@stanfordspezi/spezi-web-design-system
Version:
Stanford Biodesign Digital Health Spezi Web Design System
69 lines (68 loc) • 2.33 kB
TypeScript
import { ComponentProps, ReactNode } from 'react';
import { AllMessages } from './messages';
/**
* Allows injecting the necessary router-related components.
*
* @remarks
* Spezi Web is router-agnostic.
* We need to provide a way to inject router-specific dependencies.
* Projects can have different routers:
* Tanstack Router, React Router, Next router.
* See {@link SpeziProvider} for examples with Next and Tanstack Router.
*/
export interface SpeziContextRouter {
/**
* Link component. Make sure to provide your router's Link component.
*/
Link: (props: ComponentProps<"a">) => ReactNode;
}
export interface SpeziContextType {
router: SpeziContextRouter;
}
export declare const SpeziContext: import('react').Context<SpeziContextType | null>;
/**
* Returns SpeziContextType from context and validates its presence.
* @throws {Error} When used outside SpeziProvider.
*/
export declare const useSpeziContext: () => SpeziContextType;
interface SpeziProviderProps extends SpeziContextType {
children?: ReactNode;
/**
* Allows overriding default localization messages.
*/
messages?: Partial<AllMessages>;
}
/**
* Injects necessary context providers for Spezi components.
* Wrap your entire application with this component
* Injected elements:
* - router configuration (Link component used by your application)
* - CSS variables for theme
* - localization messages
*
* @example
* // Usage with Next.js
* ```ts
* import { SpeziProvider, SpeziContextRouter } from "@stanfordspezi/spezi-web-design-system";
* import Link from "next/link";
*
* const routerProps: SpeziContextRouter = {
* Link: ({ href, ...props }) => <Link href={href ?? "#"} {...props} />,
* };
* <SpeziProvider router={routerProps}>...</SpeziProvider>;
* ```
*
* @example
* // Usage with @tanstack/react-router
* ```ts
* import { SpeziProvider, SpeziContextRouter } from "@stanfordspezi/spezi-web-design-system";
* import { Link } from "@tanstack/react-router";
*
* const routerProps: SpeziContextRouter = {
* Link: ({ href, ...props }) => <Link to={href} {...props} />,
* };
* <SpeziProvider router={routerProps}>...</SpeziProvider>;
* ```
*/
export declare const SpeziProvider: ({ children, messages, router, }: SpeziProviderProps) => import("react").JSX.Element;
export {};