UNPKG

@datalayer/core

Version:

[![Datalayer](https://assets.datalayer.tech/datalayer-25.svg)](https://datalayer.io)

54 lines (53 loc) 2.05 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({ 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) })))] })); }