@hhgtech/hhg-components
Version:
Hello Health Group common components
119 lines (107 loc) • 4.22 kB
JavaScript
import { _ as __rest } from './tslib.es6-ea4dfe68.js';
import React__default, { useState, useCallback, useMemo, useEffect } from 'react';
import { clsx } from '@mantine/core';
import { Drawer } from 'vaul';
import styled from '@emotion/styled';
import { Z as ZINDEX_SSO } from './index-5e947517.js';
const StyledDrawerComponentContent = styled(Drawer.Content) `
position: fixed;
z-index: ${ZINDEX_SSO - 9e6 + 1};
inset: 0;
background-color: #fff;
outline: none !important;
&::-webkit-scrollbar {
width: 6px;
height: 6px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.4);
border-radius: 6px;
}
&[data-vaul-drawer-direction='bottom'] {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
}
&[data-vaul-drawer-direction='top'] {
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
}
&[data-vaul-drawer-direction='left'] {
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
}
&[data-vaul-drawer-direction='right'] {
border-top-left-radius: 8px;
border-bottom-left-radius: 8px;
}
`;
const StyledDrawerComponentOverlay = styled(Drawer.Overlay) `
position: fixed;
inset: 0;
z-index: ${ZINDEX_SSO - 9e6};
width: 100%;
max-height: 100%;
&[data-state='open'] {
opacity: 0.6 !important;
}
`;
const DrawerComponent = (props) => {
const { open: openProps, onOpenChange: onOpenChangeProps, snapPoints, activeSnapPoint, setActiveSnapPoint, children, overlayClassName, className, fadeFromIndex = ZINDEX_SSO - 9e6 } = props, restProps = __rest(props, ["open", "onOpenChange", "snapPoints", "activeSnapPoint", "setActiveSnapPoint", "children", "overlayClassName", "className", "fadeFromIndex"]);
const [open, setOpen] = useState(openProps);
const [snap, setSnap] = useState(snapPoints ? snapPoints === null || snapPoints === void 0 ? void 0 : snapPoints[0] : null);
const onOpenChange = useCallback((_open) => {
setOpen(_open);
onOpenChangeProps === null || onOpenChangeProps === void 0 ? void 0 : onOpenChangeProps(_open);
}, [onOpenChangeProps]);
const isFullSnapPoint = useMemo(() => {
if (snapPoints && snapPoints.length) {
return Boolean(snap === snapPoints[snapPoints.length - 1]);
}
return open;
}, [snap, snapPoints]);
const mergedProps = useMemo(() => {
const _mergedProps = {
open,
onOpenChange,
fadeFromIndex,
};
if (snapPoints && (snapPoints === null || snapPoints === void 0 ? void 0 : snapPoints.length)) {
_mergedProps.snapPoints = snapPoints;
_mergedProps.activeSnapPoint = snap;
_mergedProps.setActiveSnapPoint = (snP) => {
setSnap(snP);
setActiveSnapPoint === null || setActiveSnapPoint === void 0 ? void 0 : setActiveSnapPoint(snP);
};
}
return _mergedProps;
}, [
open,
onOpenChange,
snap,
setSnap,
setActiveSnapPoint,
snapPoints,
fadeFromIndex,
]);
useEffect(() => {
setOpen(openProps);
}, [openProps]);
useEffect(() => {
setSnap(activeSnapPoint);
}, [activeSnapPoint]);
return (React__default.createElement(Drawer.Root, Object.assign({}, restProps, mergedProps),
React__default.createElement(Drawer.Portal, null,
React__default.createElement(StyledDrawerComponentOverlay, { className: clsx(overlayClassName, 'drawer__overlay', {
drawer__overlay_full: isFullSnapPoint,
}) }),
React__default.createElement(StyledDrawerComponentContent, { className: clsx(className, 'drawer__content', {
drawer__content_full: isFullSnapPoint,
}) },
React__default.createElement(Drawer.Handle, { className: "drawer__handle" }),
React__default.createElement(Drawer.Title, { style: { display: 'none' } }),
children))));
};
export { DrawerComponent as D };