UNPKG

react-toast-kit

Version:

A modern, accessible toast notification system for React applications with automatic CSS injection

1 lines 7.43 kB
{"version":3,"sources":["../src/DevToolsWrapper.tsx"],"names":["createContext","useContext","useEffect","useState","React","DevToolsContext","devToolsConfig","configureDevTools","config","useDevToolsVisible","context","ClientDevTools","visible","jsx","ToastDevTools","DevToolsWrapper","children","mergedConfig","enabled","defaultVisible","shortcut","setVisible","handleKeyDown","e","prevVisible","keys","modifiers","key","k","Fragment","toggle","jsxs"],"mappings":"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","file":"devtools-entry.mjs","sourcesContent":["import * as React from 'react';\nimport { ToastDevTools } from './DevTools';\n\nconst { createContext, useContext, useEffect, useState } = React;\n\n// Create a context for DevTools visibility\ninterface DevToolsContextType {\n visible: boolean;\n setVisible: (visible: boolean) => void;\n toggle: () => void;\n}\n\nconst DevToolsContext = createContext<DevToolsContextType>({\n visible: false,\n setVisible: () => {},\n toggle: () => {},\n});\n\n// Configuration for DevTools\nexport interface DevToolsConfig {\n /**\n * Whether DevTools should be enabled\n * @default false in production, true in development\n */\n enabled?: boolean;\n \n /**\n * Whether DevTools should be visible by default\n * @default false\n */\n defaultVisible?: boolean;\n \n /**\n * Keyboard shortcut to toggle DevTools\n * @default 'alt+shift+d'\n */\n shortcut?: string;\n \n /**\n * Whether to show DevTools button\n * @default true\n */\n showButton?: boolean;\n \n /**\n * Position of the DevTools button\n * @default 'bottom-right'\n */\n buttonPosition?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n}\n\n// Global DevTools configuration\nlet devToolsConfig: DevToolsConfig = {\n enabled: process.env.NODE_ENV !== 'production',\n defaultVisible: false,\n shortcut: 'alt+shift+d',\n showButton: true,\n buttonPosition: 'bottom-right',\n};\n\n/**\n * Configure the DevTools globally\n * @param config DevTools configuration\n */\nexport function configureDevTools(config: DevToolsConfig) {\n devToolsConfig = { ...devToolsConfig, ...config };\n}\n\n/**\n * Hook to access DevTools visibility state\n */\nexport function useDevToolsVisible() {\n const context = useContext(DevToolsContext);\n return {\n visible: context.visible,\n setVisible: context.setVisible,\n toggle: context.toggle,\n };\n}\n\n// The DevTools component that will be lazily loaded\nexport const ClientDevTools = ({ visible = false }: { visible?: boolean }) => {\n if (!visible) return null;\n return <ToastDevTools />;\n};\n\n/**\n * DevToolsWrapper - A wrapper for DevTools with visibility control and keyboard shortcut\n */\nexport default function DevToolsWrapper({ \n children,\n config \n}: { \n children?: React.ReactNode;\n config?: DevToolsConfig;\n}) {\n // Merge provided config with global config\n const mergedConfig = { ...devToolsConfig, ...config };\n const { enabled, defaultVisible, shortcut } = mergedConfig;\n \n // DevTools visibility state\n const [visible, setVisible] = useState<boolean>(defaultVisible || false);\n \n // Keyboard shortcut handler\n useEffect(() => {\n if (!enabled) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n // Default: Alt+Shift+D\n if (shortcut === 'alt+shift+d' && e.altKey && e.shiftKey && e.key.toLowerCase() === 'd') {\n setVisible(prevVisible => !prevVisible);\n } else if (shortcut) {\n // Custom shortcut parsing\n const keys = shortcut.toLowerCase().split('+');\n const modifiers = {\n alt: keys.includes('alt'),\n shift: keys.includes('shift'),\n ctrl: keys.includes('ctrl') || keys.includes('control'),\n meta: keys.includes('meta') || keys.includes('command') || keys.includes('cmd'),\n };\n \n const key = keys.filter(k => !['alt', 'shift', 'ctrl', 'control', 'meta', 'command', 'cmd'].includes(k))[0];\n \n if (\n (!modifiers.alt || e.altKey) &&\n (!modifiers.shift || e.shiftKey) &&\n (!modifiers.ctrl || e.ctrlKey) &&\n (!modifiers.meta || e.metaKey) &&\n key === e.key.toLowerCase()\n ) {\n setVisible(prevVisible => !prevVisible);\n }\n }\n };\n \n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [enabled, shortcut]);\n \n // Don't render anything in production unless explicitly enabled\n if (!enabled) {\n return <>{children}</>;\n }\n \n // Toggle visibility\n const toggle = () => setVisible(prevVisible => !prevVisible);\n \n return (\n <DevToolsContext.Provider value={{ visible, setVisible, toggle }}>\n {children}\n <ClientDevTools visible={visible} />\n </DevToolsContext.Provider>\n );\n}"]}