page.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { Code } from "@/components/code";
  2. export const metadata = {
  3. title: "@json-render/react API | json-render",
  4. };
  5. export default function ReactApiPage() {
  6. return (
  7. <article>
  8. <h1 className="text-3xl font-bold mb-4">@json-render/react</h1>
  9. <p className="text-muted-foreground mb-8">
  10. React components, providers, and hooks.
  11. </p>
  12. <h2 className="text-xl font-semibold mt-12 mb-4">Providers</h2>
  13. <h3 className="text-lg font-semibold mt-8 mb-4">DataProvider</h3>
  14. <Code lang="tsx">{`<DataProvider initialData={object}>
  15. {children}
  16. </DataProvider>`}</Code>
  17. <h3 className="text-lg font-semibold mt-8 mb-4">ActionProvider</h3>
  18. <Code lang="tsx">{`<ActionProvider handlers={Record<string, ActionHandler>}>
  19. {children}
  20. </ActionProvider>
  21. type ActionHandler = (params: Record<string, unknown>) => void | Promise<void>;`}</Code>
  22. <h3 className="text-lg font-semibold mt-8 mb-4">VisibilityProvider</h3>
  23. <Code lang="tsx">{`<VisibilityProvider auth={AuthState}>
  24. {children}
  25. </VisibilityProvider>
  26. interface AuthState {
  27. isSignedIn: boolean;
  28. roles?: string[];
  29. }`}</Code>
  30. <h3 className="text-lg font-semibold mt-8 mb-4">ValidationProvider</h3>
  31. <Code lang="tsx">{`<ValidationProvider functions={Record<string, ValidatorFn>}>
  32. {children}
  33. </ValidationProvider>
  34. type ValidatorFn = (value: unknown, args?: object) => boolean | Promise<boolean>;`}</Code>
  35. <h2 className="text-xl font-semibold mt-12 mb-4">Components</h2>
  36. <h3 className="text-lg font-semibold mt-8 mb-4">Renderer</h3>
  37. <Code lang="tsx">{`<Renderer
  38. tree={UITree}
  39. registry={ComponentRegistry}
  40. />
  41. type ComponentRegistry = Record<string, React.ComponentType<ComponentProps>>;
  42. interface ComponentProps {
  43. element: UIElement;
  44. children?: React.ReactNode;
  45. onAction: (name: string, params: object) => void;
  46. }`}</Code>
  47. <h2 className="text-xl font-semibold mt-12 mb-4">Hooks</h2>
  48. <h3 className="text-lg font-semibold mt-8 mb-4">useUIStream</h3>
  49. <Code lang="typescript">{`const {
  50. tree, // UITree - current UI state
  51. isLoading, // boolean - true while streaming
  52. error, // Error | null
  53. generate, // (prompt: string) => void
  54. abort, // () => void
  55. } = useUIStream({
  56. endpoint: string,
  57. });`}</Code>
  58. <h3 className="text-lg font-semibold mt-8 mb-4">useData</h3>
  59. <Code lang="typescript">{`const {
  60. data, // Record<string, unknown>
  61. setData, // (data: object) => void
  62. getValue, // (path: string) => unknown
  63. setValue, // (path: string, value: unknown) => void
  64. } = useData();`}</Code>
  65. <h3 className="text-lg font-semibold mt-8 mb-4">useDataValue</h3>
  66. <Code lang="typescript">{`const value = useDataValue(path: string);`}</Code>
  67. <h3 className="text-lg font-semibold mt-8 mb-4">useDataBinding</h3>
  68. <Code lang="typescript">{`const [value, setValue] = useDataBinding(path: string);`}</Code>
  69. <h3 className="text-lg font-semibold mt-8 mb-4">useActions</h3>
  70. <Code lang="typescript">{`const { dispatch } = useActions();
  71. // dispatch(actionName: string, params: object)`}</Code>
  72. <h3 className="text-lg font-semibold mt-8 mb-4">useAction</h3>
  73. <Code lang="typescript">{`const submitForm = useAction('submit_form');
  74. // submitForm(params: object)`}</Code>
  75. <h3 className="text-lg font-semibold mt-8 mb-4">useIsVisible</h3>
  76. <Code lang="typescript">{`const isVisible = useIsVisible(condition?: VisibilityCondition);`}</Code>
  77. <h3 className="text-lg font-semibold mt-8 mb-4">useFieldValidation</h3>
  78. <Code lang="typescript">{`const {
  79. value, // unknown
  80. setValue, // (value: unknown) => void
  81. errors, // string[]
  82. validate, // () => Promise<boolean>
  83. isValid, // boolean
  84. } = useFieldValidation(path: string, checks: ValidationCheck[]);`}</Code>
  85. </article>
  86. );
  87. }