| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { createComponent, createContext, type JSX, useContext } from "solid-js"
- export type TuiPaths = Readonly<{
- cwd: string
- home: string
- state: string
- worktree: string
- }>
- export type TuiTerminalEnvironment = Readonly<{
- platform: string
- multiplexer?: "tmux" | "screen"
- displayServer?: "wayland" | "x11"
- }>
- export type TuiStartup = Readonly<{
- initialRoute?: unknown
- skipInitialLoading: boolean
- }>
- const PathsContext = createContext<TuiPaths>()
- const TerminalEnvironmentContext = createContext<TuiTerminalEnvironment>()
- const StartupContext = createContext<TuiStartup>()
- function provider<T>(context: ReturnType<typeof createContext<T>>, value: T, children: () => JSX.Element) {
- return createComponent(context.Provider, {
- value: Object.freeze({ ...value }),
- get children() {
- return children()
- },
- })
- }
- export function TuiPathsProvider(props: { value: TuiPaths; children: JSX.Element }) {
- return provider(PathsContext, props.value, () => props.children)
- }
- export function TuiTerminalEnvironmentProvider(props: { value: TuiTerminalEnvironment; children: JSX.Element }) {
- return provider(TerminalEnvironmentContext, props.value, () => props.children)
- }
- export function TuiStartupProvider(props: { value: TuiStartup; children: JSX.Element }) {
- return provider(StartupContext, props.value, () => props.children)
- }
- function required<T>(context: ReturnType<typeof createContext<T>>, name: string) {
- const value = useContext(context)
- if (!value) throw new Error(`${name} is missing`)
- return value
- }
- export function useTuiPaths() {
- return required(PathsContext, "TuiPathsProvider")
- }
- export function useTuiTerminalEnvironment() {
- return required(TerminalEnvironmentContext, "TuiTerminalEnvironmentProvider")
- }
- export function useTuiStartup() {
- return required(StartupContext, "TuiStartupProvider")
- }
|