Package: @lilith/react-terminal-ui Split from: lilith/ui.git or lilith/build.git Publish workflow: calls lilith/workflows/.forgejo/workflows/publish-npm.yml@main
49 lines
No EOL
1.8 KiB
JavaScript
49 lines
No EOL
1.8 KiB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
|
|
import { createContext, useContext, useState } from 'react';
|
|
import { defaultTheme } from './themes/TerminalTheme';
|
|
const TerminalContext = createContext(null);
|
|
export const TerminalProvider = ({ children, defaultTheme: initialTheme = defaultTheme, defaultRenderer: initialRenderer = 'canvas', defaultOptions: initialOptions = {}, defaultEnableEffects: initialEnableEffects = true, }) => {
|
|
const [theme, setTheme] = useState(initialTheme);
|
|
const [renderer, setRenderer] = useState(initialRenderer);
|
|
const [options, setOptions] = useState(initialOptions);
|
|
const [enableEffects, setEnableEffects] = useState(initialEnableEffects);
|
|
const contextValue = {
|
|
theme,
|
|
setTheme,
|
|
renderer,
|
|
setRenderer,
|
|
options,
|
|
setOptions,
|
|
enableEffects,
|
|
setEnableEffects,
|
|
};
|
|
return (_jsx(TerminalContext.Provider, { value: contextValue, children: children }));
|
|
};
|
|
export const useTerminal = () => {
|
|
const context = useContext(TerminalContext);
|
|
if (!context) {
|
|
throw new Error('useTerminal must be used within a TerminalProvider');
|
|
}
|
|
return context;
|
|
};
|
|
// Hook for theme switching
|
|
export const useTheme = () => {
|
|
const { theme, setTheme } = useTerminal();
|
|
return { theme, setTheme };
|
|
};
|
|
// Hook for renderer switching
|
|
export const useRenderer = () => {
|
|
const { renderer, setRenderer } = useTerminal();
|
|
return { renderer, setRenderer };
|
|
};
|
|
// Hook for terminal options
|
|
export const useTerminalOptions = () => {
|
|
const { options, setOptions } = useTerminal();
|
|
return { options, setOptions };
|
|
};
|
|
// Hook for effects control
|
|
export const useEffects = () => {
|
|
const { enableEffects, setEnableEffects } = useTerminal();
|
|
return { enableEffects, setEnableEffects };
|
|
};
|
|
//# sourceMappingURL=TerminalProvider.js.map
|