@datalayer/core
Version:
[](https://datalayer.io)
54 lines (53 loc) • 2.05 kB
JavaScript
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
import { createContext, useState, useContext } from 'react';
import { LayoutScreenshot } from './layouts';
export const ScreenshotContext = createContext({
closeScreenshot: () => { },
displayScreenshot: (nextScreenshot) => { },
});
export function useScreenshot() {
const context = useContext(ScreenshotContext);
if (!context)
throw new Error('useContext must be inside a provider with a value.');
return context;
}
/**
* The type for the Screenshot context provider.
*/
export const ScreenshotContextProvider = ScreenshotContext.Provider;
export function ScreenshotProvider({ children = null, zIndex = 9999, disableDarken = false, screenshotSurface = undefined, }) {
const defaultScreenshotSurface = {
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: disableDarken ? 'initial' : 'rgba(0, 0, 0, 0.5)',
zIndex,
};
const [screenshot, setScreenshot] = useState({
open: false,
render: (closeScreenshot) => _jsx(_Fragment, {}),
});
const displayScreenshot = (nextScreenshot) => {
setScreenshot({
open: true,
render: nextScreenshot,
});
};
const closeScreenshot = () => {
setScreenshot({
open: false,
render: (closeScreenshot) => _jsx(_Fragment, {}),
});
};
return (_jsxs(ScreenshotContextProvider, { value: { closeScreenshot, displayScreenshot }, children: [_jsx(LayoutScreenshot, {}), children, screenshot.open &&
(screenshotSurface ? (screenshotSurface(screenshot.render(closeScreenshot))) : (_jsx("div", { style: defaultScreenshotSurface, children: screenshot.render(closeScreenshot) })))] }));
}