@json-render/svelte 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  <script module lang="ts">
2
- import type { ComputedFunction, Spec, StateStore } from "@json-render/core";
2
+ import type { ComputedFunction, DirectiveDefinition, Spec, StateStore } from "@json-render/core";
3
3
  import type { ComponentRenderer, ComponentRegistry } from "./renderer.js";
4
4
 
5
5
  export interface CatalogRendererProps {
@@ -10,6 +10,8 @@
10
10
  onAction?: (actionName: string, params?: Record<string, unknown>) => void;
11
11
  onStateChange?: (changes: Array<{ path: string; value: unknown }>) => void;
12
12
  functions?: Record<string, ComputedFunction>;
13
+ /** Custom directives for user-defined `$`-prefixed dynamic values */
14
+ directives?: DirectiveDefinition[];
13
15
  loading?: boolean;
14
16
  fallback?: ComponentRenderer;
15
17
  }
@@ -28,6 +30,7 @@
28
30
  onAction,
29
31
  onStateChange,
30
32
  functions,
33
+ directives,
31
34
  loading = false,
32
35
  fallback,
33
36
  }: CatalogRendererProps = $props();
@@ -50,6 +53,7 @@
50
53
  initialState={state}
51
54
  handlers={actionHandlers}
52
55
  {functions}
56
+ {directives}
53
57
  {onStateChange}>
54
58
  <Renderer {spec} {registry} {loading} {fallback} />
55
59
  </JsonUIProvider>
@@ -1,4 +1,4 @@
1
- import type { ComputedFunction, Spec, StateStore } from "@json-render/core";
1
+ import type { ComputedFunction, DirectiveDefinition, Spec, StateStore } from "@json-render/core";
2
2
  import type { ComponentRenderer, ComponentRegistry } from "./renderer.js";
3
3
  export interface CatalogRendererProps {
4
4
  spec: Spec | null;
@@ -11,6 +11,8 @@ export interface CatalogRendererProps {
11
11
  value: unknown;
12
12
  }>) => void;
13
13
  functions?: Record<string, ComputedFunction>;
14
+ /** Custom directives for user-defined `$`-prefixed dynamic values */
15
+ directives?: DirectiveDefinition[];
14
16
  loading?: boolean;
15
17
  fallback?: ComponentRenderer;
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogRenderer.svelte.d.ts","sourceRoot":"","sources":["../src/CatalogRenderer.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AA4CH,QAAA,MAAM,eAAe,0DAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"CatalogRenderer.svelte.d.ts","sourceRoot":"","sources":["../src/CatalogRenderer.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,qEAAqE;IACrE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AA6CH,QAAA,MAAM,eAAe,0DAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -5,33 +5,54 @@
5
5
  resolveBindings,
6
6
  resolveActionParam,
7
7
  evaluateVisibility,
8
+ isDevtoolsActive,
9
+ subscribeDevtoolsActive,
8
10
  type PropResolutionContext,
9
11
  } from "@json-render/core";
12
+ import { onDestroy } from "svelte";
10
13
  import type { ComponentRegistry, ComponentRenderer } from "./renderer.js";
11
14
  import type { EventHandle } from "./catalog-types.js";
12
15
  import { getStateContext } from "./contexts/StateProvider.svelte";
13
16
  import { getActionContext } from "./contexts/ActionProvider.svelte";
14
17
  import { getRepeatScope } from "./contexts/RepeatScopeProvider.svelte";
15
18
  import { getFunctions } from "./contexts/FunctionsContextProvider.svelte";
19
+ import { getDirectives } from "./contexts/DirectivesContextProvider.svelte";
16
20
  import RepeatChildren from "./RepeatChildren.svelte";
17
21
  import Self from "./ElementRenderer.svelte";
18
22
 
19
23
  interface Props {
20
24
  element: UIElement;
25
+ /** Spec key for this element. Used by the devtools picker. */
26
+ elementKey?: string;
21
27
  spec: Spec;
22
28
  registry: ComponentRegistry;
23
29
  loading?: boolean;
24
30
  fallback?: ComponentRenderer;
25
31
  }
26
32
 
27
- let { element, spec, registry, loading = false, fallback }: Props = $props();
33
+ let {
34
+ element,
35
+ elementKey,
36
+ spec,
37
+ registry,
38
+ loading = false,
39
+ fallback,
40
+ }: Props = $props();
41
+
42
+ // Reactive mirror of the devtools-active flag (for picker support).
43
+ let devtoolsActive = $state(isDevtoolsActive());
44
+ const unsubDevtools = subscribeDevtoolsActive(() => {
45
+ devtoolsActive = isDevtoolsActive();
46
+ });
47
+ onDestroy(unsubDevtools);
28
48
 
29
49
  const stateCtx = getStateContext();
30
50
  const actionCtx = getActionContext();
31
51
  const repeatScope = getRepeatScope();
32
52
  const functions = getFunctions();
53
+ const directives = getDirectives();
33
54
 
34
- // Build context with repeat scope and $computed functions
55
+ // Build context with repeat scope, $computed functions, and custom directives
35
56
  let fullCtx = $derived<PropResolutionContext>(
36
57
  repeatScope
37
58
  ? {
@@ -40,8 +61,9 @@
40
61
  repeatIndex: repeatScope.index,
41
62
  repeatBasePath: repeatScope.basePath,
42
63
  functions,
64
+ directives,
43
65
  }
44
- : { stateModel: stateCtx.state, functions },
66
+ : { stateModel: stateCtx.state, functions, directives },
45
67
  );
46
68
 
47
69
  // Evaluate visibility
@@ -110,36 +132,73 @@
110
132
  error,
111
133
  );
112
134
  }}>
113
- <Component
114
- element={resolvedElement}
115
- bindings={elementBindings}
116
- {loading}
117
- {on}
118
- {emit}>
119
- {#if resolvedElement.repeat}
120
- <RepeatChildren
135
+ {#if devtoolsActive && elementKey}
136
+ <span data-jr-key={elementKey} style="display:contents">
137
+ <Component
121
138
  element={resolvedElement}
122
- {spec}
123
- {registry}
139
+ bindings={elementBindings}
124
140
  {loading}
125
- {fallback} />
126
- {:else if resolvedElement.children}
127
- {#each resolvedElement.children as childKey (childKey)}
128
- {#if spec.elements[childKey]}
129
- <Self
130
- element={spec.elements[childKey]}
141
+ {on}
142
+ {emit}>
143
+ {#if resolvedElement.repeat}
144
+ <RepeatChildren
145
+ element={resolvedElement}
131
146
  {spec}
132
147
  {registry}
133
148
  {loading}
134
149
  {fallback} />
135
- {:else if !loading}
136
- {console.warn(
137
- `[json-render] Missing element "${childKey}" referenced as child of "${resolvedElement.type}". This element will not render.`,
138
- )}
150
+ {:else if resolvedElement.children}
151
+ {#each resolvedElement.children as childKey (childKey)}
152
+ {#if spec.elements[childKey]}
153
+ <Self
154
+ element={spec.elements[childKey]}
155
+ elementKey={childKey}
156
+ {spec}
157
+ {registry}
158
+ {loading}
159
+ {fallback} />
160
+ {:else if !loading}
161
+ {console.warn(
162
+ `[json-render] Missing element "${childKey}" referenced as child of "${resolvedElement.type}". This element will not render.`,
163
+ )}
164
+ {/if}
165
+ {/each}
139
166
  {/if}
140
- {/each}
141
- {/if}
142
- </Component>
167
+ </Component>
168
+ </span>
169
+ {:else}
170
+ <Component
171
+ element={resolvedElement}
172
+ bindings={elementBindings}
173
+ {loading}
174
+ {on}
175
+ {emit}>
176
+ {#if resolvedElement.repeat}
177
+ <RepeatChildren
178
+ element={resolvedElement}
179
+ {spec}
180
+ {registry}
181
+ {loading}
182
+ {fallback} />
183
+ {:else if resolvedElement.children}
184
+ {#each resolvedElement.children as childKey (childKey)}
185
+ {#if spec.elements[childKey]}
186
+ <Self
187
+ element={spec.elements[childKey]}
188
+ elementKey={childKey}
189
+ {spec}
190
+ {registry}
191
+ {loading}
192
+ {fallback} />
193
+ {:else if !loading}
194
+ {console.warn(
195
+ `[json-render] Missing element "${childKey}" referenced as child of "${resolvedElement.type}". This element will not render.`,
196
+ )}
197
+ {/if}
198
+ {/each}
199
+ {/if}
200
+ </Component>
201
+ {/if}
143
202
  {#snippet failed()}
144
203
  <!-- render nothing -->
145
204
  {/snippet}
@@ -2,6 +2,8 @@ import type { Spec, UIElement } from "@json-render/core";
2
2
  import type { ComponentRegistry, ComponentRenderer } from "./renderer.js";
3
3
  interface Props {
4
4
  element: UIElement;
5
+ /** Spec key for this element. Used by the devtools picker. */
6
+ elementKey?: string;
5
7
  spec: Spec;
6
8
  registry: ComponentRegistry;
7
9
  loading?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ElementRenderer.svelte.d.ts","sourceRoot":"","sources":["../src/ElementRenderer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAQzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUxE,UAAU,KAAK;IACb,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAyHH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ElementRenderer.svelte.d.ts","sourceRoot":"","sources":["../src/ElementRenderer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAWzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAWxE,UAAU,KAAK;IACb,OAAO,EAAE,SAAS,CAAC;IACnB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AA+JH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -1,5 +1,5 @@
1
1
  <script module lang="ts">
2
- import type { ComputedFunction } from "@json-render/core";
2
+ import type { ComputedFunction, DirectiveDefinition } from "@json-render/core";
3
3
  /**
4
4
  * Props for JSONUIProvider
5
5
  */
@@ -24,6 +24,8 @@
24
24
  >;
25
25
  /** Named functions for `$computed` expressions in props */
26
26
  functions?: Record<string, ComputedFunction>;
27
+ /** Custom directives for user-defined `$`-prefixed dynamic values */
28
+ directives?: DirectiveDefinition[];
27
29
  /** Callback when state changes (uncontrolled mode) */
28
30
  onStateChange?: (changes: Array<{ path: string; value: unknown }>) => void;
29
31
  /** Children snippet */
@@ -39,6 +41,7 @@
39
41
  import ValidationProvider from "./contexts/ValidationProvider.svelte";
40
42
  import ActionProvider from "./contexts/ActionProvider.svelte";
41
43
  import FunctionsContextProvider from "./contexts/FunctionsContextProvider.svelte";
44
+ import DirectivesContextProvider from "./contexts/DirectivesContextProvider.svelte";
42
45
  import ConfirmDialogManager from "./ConfirmDialogManager.svelte";
43
46
  import type { ComponentRegistry } from "./renderer.js";
44
47
 
@@ -49,6 +52,7 @@
49
52
  navigate,
50
53
  validationFunctions = {},
51
54
  functions,
55
+ directives,
52
56
  onStateChange,
53
57
  children,
54
58
  }: JSONUIProviderProps = $props();
@@ -59,8 +63,10 @@
59
63
  <ValidationProvider customFunctions={validationFunctions}>
60
64
  <ActionProvider {handlers} {navigate}>
61
65
  <FunctionsContextProvider {functions}>
62
- {@render children()}
63
- <ConfirmDialogManager />
66
+ <DirectivesContextProvider {directives}>
67
+ {@render children()}
68
+ <ConfirmDialogManager />
69
+ </DirectivesContextProvider>
64
70
  </FunctionsContextProvider>
65
71
  </ActionProvider>
66
72
  </ValidationProvider>
@@ -1,4 +1,4 @@
1
- import type { ComputedFunction } from "@json-render/core";
1
+ import type { ComputedFunction, DirectiveDefinition } from "@json-render/core";
2
2
  /**
3
3
  * Props for JSONUIProvider
4
4
  */
@@ -20,6 +20,8 @@ export interface JSONUIProviderProps {
20
20
  validationFunctions?: Record<string, (value: unknown, args?: Record<string, unknown>) => boolean>;
21
21
  /** Named functions for `$computed` expressions in props */
22
22
  functions?: Record<string, ComputedFunction>;
23
+ /** Custom directives for user-defined `$`-prefixed dynamic values */
24
+ directives?: DirectiveDefinition[];
23
25
  /** Callback when state changes (uncontrolled mode) */
24
26
  onStateChange?: (changes: Array<{
25
27
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"JsonUIProvider.svelte.d.ts","sourceRoot":"","sources":["../src/JsonUIProvider.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAC1B,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAC5D,CAAC;IACF,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,sDAAsD;IACtD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3E,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AA0CvD,QAAA,MAAM,cAAc,yDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"JsonUIProvider.svelte.d.ts","sourceRoot":"","sources":["../src/JsonUIProvider.svelte.ts"],"names":[],"mappings":"AAGE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC/E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAC1B,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAC5D,CAAC;IACF,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,qEAAqE;IACrE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,sDAAsD;IACtD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3E,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AA8CvD,QAAA,MAAM,cAAc,yDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -27,6 +27,7 @@
27
27
  {#if spec && rootElement}
28
28
  <ElementRenderer
29
29
  element={rootElement}
30
+ elementKey={spec.root}
30
31
  {spec}
31
32
  {registry}
32
33
  {loading}
@@ -35,6 +35,7 @@
35
35
  {#if spec.elements[childKey]}
36
36
  <ElementRenderer
37
37
  element={spec.elements[childKey]}
38
+ elementKey={childKey}
38
39
  {spec}
39
40
  {registry}
40
41
  {loading}
@@ -140,6 +140,9 @@
140
140
  import {
141
141
  resolveAction,
142
142
  executeAction,
143
+ nextActionDispatchId,
144
+ notifyActionDispatch,
145
+ notifyActionSettle,
143
146
  type ActionBinding as CoreActionBinding,
144
147
  type ActionHandler as CoreActionHandler,
145
148
  } from "@json-render/core";
@@ -165,6 +168,19 @@
165
168
  const execute = async (binding: CoreActionBinding): Promise<void> => {
166
169
  const resolved = resolveAction(binding, stateCtx.getSnapshot());
167
170
 
171
+ // --- devtools / observer hooks ---
172
+ const dispatchId = nextActionDispatchId();
173
+ const dispatchedAt = Date.now();
174
+ notifyActionDispatch({
175
+ id: dispatchId,
176
+ name: resolved.action,
177
+ params: resolved.params,
178
+ at: dispatchedAt,
179
+ });
180
+ let __ok = true;
181
+ let __error: unknown = undefined;
182
+
183
+ try {
168
184
  if (resolved.action === "setState" && resolved.params) {
169
185
  const statePath = resolved.params.statePath as string;
170
186
  const value = resolved.params.value;
@@ -314,6 +330,21 @@
314
330
  } finally {
315
331
  loadingActions.delete(resolved.action);
316
332
  }
333
+ } catch (err) {
334
+ __ok = false;
335
+ __error = err;
336
+ throw err;
337
+ } finally {
338
+ const now = Date.now();
339
+ notifyActionSettle({
340
+ id: dispatchId,
341
+ name: resolved.action,
342
+ ok: __ok,
343
+ at: now,
344
+ durationMs: now - dispatchedAt,
345
+ error: __error,
346
+ });
347
+ }
317
348
  };
318
349
 
319
350
  const ctx: ActionContext = {
@@ -1 +1 @@
1
- {"version":3,"file":"ActionProvider.svelte.d.ts","sourceRoot":"","sources":["../../src/contexts/ActionProvider.svelte.ts"],"names":[],"mappings":"AAIE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,qCAAqC;IACrC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,kCAAkC;IAClC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD,gCAAgC;IAChC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iCAAiC;IACjC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GACX,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC,CAOzC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAuDH,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAIH,KAAK,aAAa,IAAI,iBAAiB,EACxC,MAAM,mBAAmB,CAAC;AAM3B,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2MH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ActionProvider.svelte.d.ts","sourceRoot":"","sources":["../../src/contexts/ActionProvider.svelte.ts"],"names":[],"mappings":"AAIE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,qCAAqC;IACrC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,kCAAkC;IAClC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD,gCAAgC;IAChC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iCAAiC;IACjC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GACX,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC,CAOzC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAuDH,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAOH,KAAK,aAAa,IAAI,iBAAiB,EACxC,MAAM,mBAAmB,CAAC;AAM3B,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuOH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,46 @@
1
+ <script module lang="ts">
2
+ import { getContext } from "svelte";
3
+ import type { DirectiveDefinition, DirectiveRegistry } from "@json-render/core";
4
+ import { createDirectiveRegistry } from "@json-render/core";
5
+
6
+ const DIRECTIVES_KEY = Symbol.for("json-render-directives");
7
+
8
+ /**
9
+ * Directives context value
10
+ */
11
+ export interface DirectivesContext {
12
+ /** Custom directive registry */
13
+ registry: DirectiveRegistry | undefined;
14
+ }
15
+
16
+ /**
17
+ * Get the directives registry from component tree
18
+ */
19
+ export function getDirectives(): DirectiveRegistry | undefined {
20
+ const ctx = getContext<DirectivesContext>(DIRECTIVES_KEY);
21
+ return ctx?.registry;
22
+ }
23
+ </script>
24
+
25
+ <script lang="ts">
26
+ import { setContext, type Snippet } from "svelte";
27
+
28
+ interface Props {
29
+ directives?: DirectiveDefinition[];
30
+ children?: Snippet;
31
+ }
32
+
33
+ let { directives, children }: Props = $props();
34
+
35
+ let registry = $derived(
36
+ directives ? createDirectiveRegistry(directives) : undefined,
37
+ );
38
+
39
+ setContext(DIRECTIVES_KEY, {
40
+ get registry() {
41
+ return registry;
42
+ },
43
+ } satisfies DirectivesContext);
44
+ </script>
45
+
46
+ {@render children?.()}
@@ -0,0 +1,21 @@
1
+ import type { DirectiveDefinition, DirectiveRegistry } from "@json-render/core";
2
+ /**
3
+ * Directives context value
4
+ */
5
+ export interface DirectivesContext {
6
+ /** Custom directive registry */
7
+ registry: DirectiveRegistry | undefined;
8
+ }
9
+ /**
10
+ * Get the directives registry from component tree
11
+ */
12
+ export declare function getDirectives(): DirectiveRegistry | undefined;
13
+ import { type Snippet } from "svelte";
14
+ interface Props {
15
+ directives?: DirectiveDefinition[];
16
+ children?: Snippet;
17
+ }
18
+ declare const DirectivesContextProvider: import("svelte").Component<Props, {}, "">;
19
+ type DirectivesContextProvider = ReturnType<typeof DirectivesContextProvider>;
20
+ export default DirectivesContextProvider;
21
+ //# sourceMappingURL=DirectivesContextProvider.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectivesContextProvider.svelte.d.ts","sourceRoot":"","sources":["../../src/contexts/DirectivesContextProvider.svelte.ts"],"names":[],"mappings":"AAIE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKhF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,GAAG,SAAS,CAG7D;AAGH,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGhD,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwBH,QAAA,MAAM,yBAAyB,2CAAwC,CAAC;AACxE,KAAK,yBAAyB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC9E,eAAe,yBAAyB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { default as ActionProvider, getActionContext, getAction, type ActionCont
4
4
  export { default as ValidationProvider, getValidationContext, getOptionalValidationContext, getFieldValidation, type ValidationContext, type FieldValidationState, } from "./contexts/ValidationProvider.svelte";
5
5
  export { default as RepeatScopeProvider, getRepeatScope, type RepeatScopeValue, } from "./contexts/RepeatScopeProvider.svelte";
6
6
  export { default as FunctionsContextProvider, getFunctions, type FunctionsContext, } from "./contexts/FunctionsContextProvider.svelte";
7
+ export { default as DirectivesContextProvider, getDirectives, type DirectivesContext, } from "./contexts/DirectivesContextProvider.svelte";
7
8
  export { schema, type SvelteSchema, type SvelteSpec } from "./schema.js";
8
9
  export type { EventHandle, BaseComponentProps, SetState, StateModel, ComponentContext, ComponentFn, Components, ActionFn, Actions, } from "./catalog-types.js";
9
10
  export { flatToTree, buildSpecFromParts, getTextFromParts, type DataPart, } from "./utils.svelte.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,OAAO,IAAI,kBAAkB,EAC7B,oBAAoB,EACpB,SAAS,EACT,KAAK,iBAAiB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,gBAAgB,EAChB,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,OAAO,IAAI,kBAAkB,EAC7B,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,OAAO,IAAI,wBAAwB,EACnC,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,4CAA4C,CAAC;AAMpD,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,QAAQ,EACR,OAAO,GACR,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,QAAQ,GACd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAMhF,YAAY,EACV,IAAI,EACJ,SAAS,EACT,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,OAAO,IAAI,kBAAkB,EAC7B,oBAAoB,EACpB,SAAS,EACT,KAAK,iBAAiB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,gBAAgB,EAChB,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,OAAO,IAAI,kBAAkB,EAC7B,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,OAAO,IAAI,wBAAwB,EACnC,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,OAAO,IAAI,yBAAyB,EACpC,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,QAAQ,EACR,OAAO,GACR,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,QAAQ,GACd,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAMhF,YAAY,EACV,IAAI,EACJ,SAAS,EACT,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export { default as ActionProvider, getActionContext, getAction, } from "./conte
7
7
  export { default as ValidationProvider, getValidationContext, getOptionalValidationContext, getFieldValidation, } from "./contexts/ValidationProvider.svelte";
8
8
  export { default as RepeatScopeProvider, getRepeatScope, } from "./contexts/RepeatScopeProvider.svelte";
9
9
  export { default as FunctionsContextProvider, getFunctions, } from "./contexts/FunctionsContextProvider.svelte";
10
+ export { default as DirectivesContextProvider, getDirectives, } from "./contexts/DirectivesContextProvider.svelte";
10
11
  // =============================================================================
11
12
  // Schema
12
13
  // =============================================================================
@@ -1,4 +1,4 @@
1
- import type { Catalog, ComputedFunction, SchemaDefinition, Spec, StateStore, UIElement } from "@json-render/core";
1
+ import type { Catalog, ComputedFunction, DirectiveDefinition, SchemaDefinition, Spec, StateStore, UIElement } from "@json-render/core";
2
2
  import type { Component, Snippet } from "svelte";
3
3
  import type { BaseComponentProps, EventHandle, SetState, StateModel } from "./catalog-types.js";
4
4
  /**
@@ -94,6 +94,8 @@ export interface CreateRendererProps {
94
94
  }>) => void;
95
95
  /** Named functions for `$computed` expressions in props */
96
96
  functions?: Record<string, ComputedFunction>;
97
+ /** Custom directives for user-defined `$`-prefixed dynamic values */
98
+ directives?: DirectiveDefinition[];
97
99
  loading?: boolean;
98
100
  fallback?: Component;
99
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
package/dist/renderer.js CHANGED
@@ -114,6 +114,9 @@ export function createRenderer(_catalog, components) {
114
114
  get functions() {
115
115
  return props.functions;
116
116
  },
117
+ get directives() {
118
+ return props.directives;
119
+ },
117
120
  get loading() {
118
121
  return props.loading;
119
122
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-render/svelte",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Svelte 5 renderer for @json-render/core. JSON becomes Svelte components.",
6
6
  "keywords": [
@@ -49,7 +49,7 @@
49
49
  "dist"
50
50
  ],
51
51
  "dependencies": {
52
- "@json-render/core": "0.17.0"
52
+ "@json-render/core": "0.19.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@sveltejs/package": "^2.3.0",