JsonUIProvider.svelte 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script module lang="ts">
  2. import type { ComputedFunction } from "@json-render/core";
  3. /**
  4. * Props for JSONUIProvider
  5. */
  6. export interface JSONUIProviderProps {
  7. /** Component registry (passed through for convenience; not used internally) */
  8. registry?: ComponentRegistry;
  9. /**
  10. * External store (controlled mode). When provided, `initialState` and
  11. * `onStateChange` are ignored.
  12. */
  13. store?: StateStore;
  14. /** Initial state model */
  15. initialState?: Record<string, unknown>;
  16. /** Action handlers */
  17. handlers?: Record<string, ActionHandler>;
  18. /** Navigation function */
  19. navigate?: (path: string) => void;
  20. /** Custom validation functions */
  21. validationFunctions?: Record<
  22. string,
  23. (value: unknown, args?: Record<string, unknown>) => boolean
  24. >;
  25. /** Named functions for `$computed` expressions in props */
  26. functions?: Record<string, ComputedFunction>;
  27. /** Callback when state changes (uncontrolled mode) */
  28. onStateChange?: (changes: Array<{ path: string; value: unknown }>) => void;
  29. /** Children snippet */
  30. children: Snippet;
  31. }
  32. </script>
  33. <script lang="ts">
  34. import type { Snippet } from "svelte";
  35. import type { ActionHandler, StateStore } from "@json-render/core";
  36. import StateProvider from "./contexts/StateProvider.svelte";
  37. import VisibilityProvider from "./contexts/VisibilityProvider.svelte";
  38. import ValidationProvider from "./contexts/ValidationProvider.svelte";
  39. import ActionProvider from "./contexts/ActionProvider.svelte";
  40. import FunctionsContextProvider from "./contexts/FunctionsContextProvider.svelte";
  41. import ConfirmDialogManager from "./ConfirmDialogManager.svelte";
  42. import type { ComponentRegistry } from "./renderer.js";
  43. let {
  44. store,
  45. initialState = {},
  46. handlers = {},
  47. navigate,
  48. validationFunctions = {},
  49. functions,
  50. onStateChange,
  51. children,
  52. }: JSONUIProviderProps = $props();
  53. </script>
  54. <StateProvider {store} {initialState} {onStateChange}>
  55. <VisibilityProvider>
  56. <ValidationProvider customFunctions={validationFunctions}>
  57. <ActionProvider {handlers} {navigate}>
  58. <FunctionsContextProvider {functions}>
  59. {@render children()}
  60. <ConfirmDialogManager />
  61. </FunctionsContextProvider>
  62. </ActionProvider>
  63. </ValidationProvider>
  64. </VisibilityProvider>
  65. </StateProvider>