UNPKG

@datalayer/core

Version:
61 lines (60 loc) 2.18 kB
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(props) { const { children, zIndex, disableDarken, screenshotSurface } = props; 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) })))] })); } ScreenshotProvider.defaultProps = { children: undefined, disableScreenshot: false, zIndex: 9999, screenshotSurface: undefined, };