@gfazioli/mantine-onboarding-tour
Version:
A Mantine component enables you to create a onboarding-tour effect using overlays, popovers, and onboarding tours, which enhances element visibility and interactivity.
97 lines (93 loc) • 2.79 kB
JavaScript
'use client';
;
var React = require('react');
var core = require('@mantine/core');
var OnboardingTourFocusRevealGroup_context = require('./OnboardingTourFocusRevealGroup.context.cjs');
function OnboardingTourFocusRevealGroup(_props) {
const groupDefaultProps = {
focusedMode: "none",
withReveal: false,
withOverlay: true,
overlayProps: {
blur: 2,
backgroundOpacity: 0.5,
color: "black"
},
transitionProps: { transition: "fade", duration: 150 },
popoverProps: {
position: "left",
withArrow: true,
arrowSize: 16,
arrowRadius: 4,
offset: -4,
radius: "md",
shadow: "xl"
}
};
const props = core.useProps("OnboardingTourFocusRevealGroup", groupDefaultProps, _props);
props.overlayProps = { ...groupDefaultProps.overlayProps, ..._props.overlayProps };
props.transitionProps = { ...groupDefaultProps.transitionProps, ..._props.transitionProps };
props.popoverProps = { ...groupDefaultProps.popoverProps, ..._props.popoverProps };
const {
withReveal,
withOverlay,
focusedMode,
overlayProps,
transitionProps,
popoverProps,
children
} = props;
const [overlay, setOverlay] = React.useState(false);
const listInViewport = React.useRef({});
const areAllNotVisible = () => Object.values(listInViewport.current).every((visible) => !visible);
const setMeInViewport = (uuid, visible) => {
listInViewport.current[uuid] = visible;
};
const setRequestOverlay = (value) => {
if (value) {
setOverlay(true);
} else if (areAllNotVisible()) {
setOverlay(false);
}
};
return /* @__PURE__ */ React.createElement(
OnboardingTourFocusRevealGroup_context.OnboardingTourFocusRevealGroupProvider,
{
value: {
setRequestOverlay,
setMeInViewport,
focusedMode,
withReveal,
withOverlay,
overlayProps,
transitionProps,
popoverProps
}
},
withOverlay && /* @__PURE__ */ React.createElement(
core.Transition,
{
transition: transitionProps?.transition,
mounted: overlay,
duration: transitionProps?.duration,
exitDuration: transitionProps?.exitDuration
},
(transitionStyles) => /* @__PURE__ */ React.createElement(
core.Overlay,
{
"data-focus-reveal-overlay": true,
...overlayProps,
style: {
position: "fixed",
inset: 0,
...transitionStyles
}
}
)
),
children
);
}
OnboardingTourFocusRevealGroup.displayName = "OnboardingTourFocusRevealGroup";
exports.OnboardingTourFocusRevealGroup = OnboardingTourFocusRevealGroup;
//# sourceMappingURL=OnboardingTourFocusRevealGroup.cjs.map