@arkcit/engine-react 0.3.6 → 0.3.8

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.
package/dist/engine.d.ts CHANGED
@@ -3,8 +3,8 @@ import React__default from 'react';
3
3
  import { UIEngineProps, UINodeSize, UINodeWrapperProps } from '@arkcit/engine-core';
4
4
  import { UINode } from '@arkcit/engine-schema';
5
5
  import { UIRuntimeAdapter } from '@arkcit/engine-runtime';
6
- import { r as renderReactNode } from './renderReactNode-DmxD8hot.js';
7
- export { StaticReactWebEngineRoot } from './static-engine.js';
6
+ import { a as RenderReactNodeDependencies } from './renderReactNode-xwA81IXf.js';
7
+ export { StaticReactWebEngineRoot, StaticReactWebEngineRootArgs, StaticReactWebEngineRootDependencies, StaticRenderSafeNodeArgs } from './static-engine.js';
8
8
  import '@arkcit/engine-render-layer';
9
9
 
10
10
  type EngineWarningFallbackProps = {
@@ -30,7 +30,7 @@ declare class NodeErrorBoundary extends React__default.Component<NodeErrorBounda
30
30
  render(): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
31
31
  }
32
32
 
33
- type UseUIEngineEffectsArgs = {
33
+ type ReactWebUseUIEngineEffectsArgs = {
34
34
  schema: UIEngineProps["schema"];
35
35
  runtime: UIRuntimeAdapter;
36
36
  onNodeResize?: ((nodeId: string, size: UINodeSize) => void) | undefined;
@@ -42,12 +42,12 @@ type UseUIEngineEffectsArgs = {
42
42
  minHeightPct: number;
43
43
  minHeightPx: number;
44
44
  };
45
- type UseUIEngineEffectsResult = {
45
+ type ReactWebUseUIEngineEffectsResult = {
46
46
  ancestorTypeMembership: Record<string, Set<string>>;
47
47
  overlaysByNodeId: Record<string, unknown>;
48
48
  captureFieldFocus: (target: EventTarget | null) => void;
49
49
  };
50
- type RenderSafeNodeArgs<TInlineEditing> = {
50
+ type ReactWebRenderSafeNodeArgs<TInlineEditing = unknown> = {
51
51
  node: UINode;
52
52
  registry: NonNullable<UIEngineProps["registry"]>;
53
53
  runtime: UIRuntimeAdapter;
@@ -77,9 +77,9 @@ type RenderSafeNodeArgs<TInlineEditing> = {
77
77
  NodeWrapper: React__default.ComponentType<UINodeWrapperProps>;
78
78
  isFormInteractiveTarget: (target: HTMLElement | null) => boolean;
79
79
  };
80
- type ReactWebEngineRootDependencies<TInlineEditing> = {
81
- useUIEngineEffects: (args: UseUIEngineEffectsArgs) => UseUIEngineEffectsResult;
82
- renderSafeNode: (args: RenderSafeNodeArgs<TInlineEditing>) => React__default.ReactNode;
80
+ type ReactWebEngineRootDependencies<TInlineEditing = unknown> = {
81
+ useUIEngineEffects: (args: ReactWebUseUIEngineEffectsArgs) => ReactWebUseUIEngineEffectsResult;
82
+ renderSafeNode: (args: ReactWebRenderSafeNodeArgs<TInlineEditing>) => React__default.ReactNode;
83
83
  InlineTextEditor: React__default.ComponentType<{
84
84
  editing: TInlineEditing;
85
85
  onChange: (value: string) => void;
@@ -87,11 +87,11 @@ type ReactWebEngineRootDependencies<TInlineEditing> = {
87
87
  onCommit: () => void;
88
88
  }>;
89
89
  StudioNodeWrapper: React__default.ComponentType<UINodeWrapperProps>;
90
- renderReactNodeDependencies: Parameters<typeof renderReactNode<TInlineEditing>>[0]["dependencies"];
90
+ renderReactNodeDependencies: RenderReactNodeDependencies<TInlineEditing>;
91
91
  };
92
- type ReactWebEngineRootArgs<TInlineEditing> = UIEngineProps & {
92
+ type ReactWebEngineRootArgs<TInlineEditing = unknown> = UIEngineProps & {
93
93
  dependencies: ReactWebEngineRootDependencies<TInlineEditing>;
94
94
  };
95
95
  declare const ReactWebEngineRoot: <TInlineEditing = unknown>({ schema, registry, store, onNodeClick, onInlineTextEdit, onNodeResize, onNodeResizeStart, onNodeResizeEnd, onNodeDragStart, onNodeDragOverTarget, onNodeDropTarget, selectedNodeId, nodeWrapper, dependencies, }: ReactWebEngineRootArgs<TInlineEditing>) => react_jsx_runtime.JSX.Element;
96
96
 
97
- export { EngineWarningFallback, NodeErrorBoundary, ReactWebEngineRoot };
97
+ export { EngineWarningFallback, NodeErrorBoundary, ReactWebEngineRoot, type ReactWebEngineRootArgs, type ReactWebEngineRootDependencies, type ReactWebRenderSafeNodeArgs, type ReactWebUseUIEngineEffectsArgs, type ReactWebUseUIEngineEffectsResult };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  export { applyContentComposition, applyNavigationComposition } from './composition.js';
2
2
  export { applyRenderDirectives } from './directives.js';
3
- export { EngineWarningFallback, NodeErrorBoundary, ReactWebEngineRoot } from './engine.js';
4
- export { StaticReactWebEngineRoot } from './static-engine.js';
3
+ export { EngineWarningFallback, NodeErrorBoundary, ReactWebEngineRoot, ReactWebEngineRootArgs, ReactWebEngineRootDependencies, ReactWebRenderSafeNodeArgs, ReactWebUseUIEngineEffectsArgs, ReactWebUseUIEngineEffectsResult } from './engine.js';
4
+ export { StaticReactWebEngineRoot, StaticReactWebEngineRootArgs, StaticReactWebEngineRootDependencies, StaticRenderSafeNodeArgs } from './static-engine.js';
5
5
  export { useUIEngineEffects, useUIEngineState } from './hooks.js';
6
6
  export { buildAccordionItems, buildCoverContent, buildCoverMedia, buildExpandablePanelChildren, buildScrollRevealChildren, materializeAccordionItems, materializeBoundTable, materializeChildContent, materializeCoverContent, materializeExpandablePanelContent, materializeTabsContent } from './materialization.js';
7
7
  export { BoundTableColumn, BoundTableRow, ReactNodeRenderPlan, ResolvedBoundTableData, ResolvedReactNode, buildNodeResetToken, configurePreviewLinkBehavior, finalizeRenderedNode, getGridItemWrapperProps, normalizeRenderableChild, prepareRenderableChildren, resolveBoundTableData, resolveReactNodePlan, resolveResolvedReactNode, toBoolean } from './rendering.js';
8
- export { r as renderReactNode } from './renderReactNode-DmxD8hot.js';
8
+ export { R as RenderReactNodeArgs, a as RenderReactNodeDependencies, r as renderReactNode } from './renderReactNode-xwA81IXf.js';
9
9
  export { AccordionItemDescriptor, CoverContentDescriptor, ExpandablePanelContentDescriptor, ResolvedNodeContentDescriptor as ResolvedChildContentDescriptor, ResolvedNodeChildDescriptor as ResolvedChildDescriptor, TabsContentDescriptor } from '@arkcit/engine-render-layer';
10
10
  export { ComponentRegistry, ComponentRegistryEntry } from '@arkcit/engine-core';
11
11
  import 'react';
package/dist/index.js CHANGED
@@ -1354,6 +1354,43 @@ var configurePreviewLinkBehavior = (componentProps) => {
1354
1354
  // src/rendering/finalizeRenderedNode.tsx
1355
1355
  var RESPONSIVE_MEDIA_NODE_TYPES = /* @__PURE__ */ new Set(["Image", "Video", "EmbeddedVideo", "Cover", "Document"]);
1356
1356
  var RESPONSIVE_MEDIA_CLASS_NAME = "max-md:!w-full max-md:![flex-basis:100%!important] max-md:!h-auto";
1357
+ var RESPONSIVE_TEXT_NODE_TYPES = /* @__PURE__ */ new Set([
1358
+ "Typography",
1359
+ "H1",
1360
+ "H2",
1361
+ "H3",
1362
+ "Text",
1363
+ "Muted",
1364
+ "Lead",
1365
+ "Code"
1366
+ ]);
1367
+ var RESPONSIVE_AUTO_HEIGHT_NODE_TYPES = /* @__PURE__ */ new Set([
1368
+ ...RESPONSIVE_MEDIA_NODE_TYPES,
1369
+ ...RESPONSIVE_TEXT_NODE_TYPES,
1370
+ "Accordion",
1371
+ "BookingCalendar",
1372
+ "Button",
1373
+ "Breadcrumb",
1374
+ "Link",
1375
+ "Card",
1376
+ "Carousel",
1377
+ "ContentSlider",
1378
+ "Cover",
1379
+ "DataGrid",
1380
+ "ExpandablePanel",
1381
+ "FilterBar",
1382
+ "Form",
1383
+ "FormWizard",
1384
+ "Grid",
1385
+ "Container",
1386
+ "MapCard",
1387
+ "Pagination",
1388
+ "QRCode",
1389
+ "Slider",
1390
+ "Table",
1391
+ "Tabs"
1392
+ ]);
1393
+ var RESPONSIVE_TEXT_CLASS_NAME = "max-md:!h-auto";
1357
1394
  var hasExplicitStudioSizing = (studioSizing) => Boolean(
1358
1395
  studioSizing && (studioSizing.widthPct !== null || studioSizing.heightPct !== null || studioSizing.heightPx !== null)
1359
1396
  );
@@ -1372,6 +1409,10 @@ var finalizeRenderedNode = ({
1372
1409
  const currentClassName = typeof componentProps.className === "string" ? componentProps.className : "";
1373
1410
  componentProps.className = [currentClassName, RESPONSIVE_MEDIA_CLASS_NAME].filter(Boolean).join(" ");
1374
1411
  }
1412
+ if (RESPONSIVE_AUTO_HEIGHT_NODE_TYPES.has(node.type) && hasExplicitStudioSizing(studioSizing)) {
1413
+ const currentClassName = typeof componentProps.className === "string" ? componentProps.className : "";
1414
+ componentProps.className = [currentClassName, RESPONSIVE_TEXT_CLASS_NAME].filter(Boolean).join(" ");
1415
+ }
1375
1416
  const plans = providedPlans != null ? providedPlans : dependencies.resolveFinalRenderPlan({
1376
1417
  node,
1377
1418
  componentProps,
@@ -1465,6 +1506,11 @@ var normalizeRenderableChild = (value) => {
1465
1506
  const nestedChildren = candidate.props.children;
1466
1507
  return normalizeRenderableChild(nestedChildren);
1467
1508
  }
1509
+ for (const key of ["children", "label", "title", "content", "text", "value"]) {
1510
+ if (key in candidate) {
1511
+ return normalizeRenderableChild(candidate[key]);
1512
+ }
1513
+ }
1468
1514
  }
1469
1515
  return null;
1470
1516
  };
@@ -0,0 +1,110 @@
1
+ import React__default from 'react';
2
+ import { ComponentRegistry } from '@arkcit/engine-core';
3
+ import { UINode } from '@arkcit/engine-schema';
4
+ import { UIRuntimeAdapter } from '@arkcit/engine-runtime';
5
+ import { ContentCompositionPlan, RenderDirectivePlan, NavigationCompositionPlan, FinalRenderPlan } from '@arkcit/engine-render-layer';
6
+
7
+ type RenderReactNodeDependencies<TInlineEditing = unknown> = {
8
+ applyStudioOverlayComponentProps: (args: {
9
+ node: UINode;
10
+ componentProps: Record<string, unknown>;
11
+ runtime: UIRuntimeAdapter;
12
+ overlaysByNodeId: Record<string, unknown>;
13
+ renderBindingProps: Record<string, unknown>;
14
+ resolvedChildContent: React__default.ReactNode | null;
15
+ onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
16
+ isStudioRendererContext: boolean;
17
+ dropdownOpenByNodeId: Record<string, boolean>;
18
+ setDropdownOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
19
+ }) => void;
20
+ applyContentComposition: (args: {
21
+ node: UINode;
22
+ componentProps: Record<string, unknown>;
23
+ isStudioRendererContext: boolean;
24
+ internalStudioNodeTypes: Set<string>;
25
+ schemaNodes: UINode[];
26
+ onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
27
+ captureFieldFocus: (target: EventTarget | null) => void;
28
+ renderSafeNode: (node: UINode) => React__default.ReactNode;
29
+ normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
30
+ findNodeById: (nodeId: string, nodes: UINode[]) => UINode | null;
31
+ runtime: UIRuntimeAdapter;
32
+ plans?: ContentCompositionPlan[];
33
+ }) => React__default.ReactNode | null;
34
+ applyRenderDirectives: (args: {
35
+ node: UINode;
36
+ componentProps: Record<string, unknown>;
37
+ renderBindingProps: Record<string, unknown>;
38
+ runtime: UIRuntimeAdapter;
39
+ plans?: RenderDirectivePlan[];
40
+ }) => void;
41
+ applyNavigationComposition: (args: {
42
+ node: UINode;
43
+ componentProps: Record<string, unknown>;
44
+ isStudioRendererContext: boolean;
45
+ selectedNodeId: string | null;
46
+ wizardActiveStepByNodeId: Record<string, string>;
47
+ accordionOpenIdsByNodeId: Record<string, string[]>;
48
+ expandablePanelOpenByNodeId: Record<string, boolean>;
49
+ runtime: UIRuntimeAdapter;
50
+ setWizardActiveStepByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string>>>;
51
+ setAccordionOpenIdsByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string[]>>>;
52
+ setExpandablePanelOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
53
+ onNodeClick?: (nodeId: string) => void;
54
+ onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
55
+ renderSafeNode: (node: UINode) => React__default.ReactNode;
56
+ normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
57
+ captureFieldFocus: (target: EventTarget | null) => void;
58
+ setInlineEditing: React__default.Dispatch<React__default.SetStateAction<TInlineEditing | null>>;
59
+ internalStudioNodeTypes: Set<string>;
60
+ plans?: NavigationCompositionPlan[];
61
+ }) => void;
62
+ finalizeRenderedNode: (args: {
63
+ node: UINode;
64
+ children: React__default.ReactNode[] | undefined;
65
+ componentProps: Record<string, unknown>;
66
+ registryComponent: React__default.ComponentType<Record<string, unknown>>;
67
+ runtime: UIRuntimeAdapter;
68
+ isStudioRendererContext: boolean;
69
+ studioSizing?: {
70
+ widthPct: number | null;
71
+ heightPct: number | null;
72
+ heightPx: number | null;
73
+ };
74
+ plans?: FinalRenderPlan[];
75
+ }) => React__default.ReactNode | null;
76
+ normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
77
+ findNodeById: (nodeId: string, nodes: UINode[]) => UINode | null;
78
+ };
79
+ type RenderReactNodeArgs<TInlineEditing = unknown> = {
80
+ node: UINode;
81
+ runtime: UIRuntimeAdapter;
82
+ registry: ComponentRegistry;
83
+ schemaNodes: UINode[];
84
+ renderSafeNode: (node: UINode) => React__default.ReactNode;
85
+ internalStudioNodeTypes: Set<string>;
86
+ overlaysByNodeId: Record<string, unknown>;
87
+ onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
88
+ isStudioRendererContext: boolean;
89
+ dropdownOpenByNodeId: Record<string, boolean>;
90
+ setDropdownOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
91
+ captureFieldFocus: (target: EventTarget | null) => void;
92
+ selectedNodeId: string | null | undefined;
93
+ wizardActiveStepByNodeId: Record<string, string>;
94
+ accordionOpenIdsByNodeId: Record<string, string[]>;
95
+ expandablePanelOpenByNodeId: Record<string, boolean>;
96
+ setWizardActiveStepByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string>>>;
97
+ setAccordionOpenIdsByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string[]>>>;
98
+ setExpandablePanelOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
99
+ onNodeClick?: (nodeId: string) => void;
100
+ setInlineEditing: React__default.Dispatch<React__default.SetStateAction<TInlineEditing | null>>;
101
+ studioSizing?: {
102
+ widthPct: number | null;
103
+ heightPct: number | null;
104
+ heightPx: number | null;
105
+ };
106
+ dependencies: RenderReactNodeDependencies<TInlineEditing>;
107
+ };
108
+ declare const renderReactNode: <TInlineEditing = unknown>({ node, runtime, registry, schemaNodes, renderSafeNode, internalStudioNodeTypes, overlaysByNodeId, onInlineTextEdit, isStudioRendererContext, dropdownOpenByNodeId, setDropdownOpenByNodeId, captureFieldFocus, selectedNodeId, wizardActiveStepByNodeId, accordionOpenIdsByNodeId, expandablePanelOpenByNodeId, setWizardActiveStepByNodeId, setAccordionOpenIdsByNodeId, setExpandablePanelOpenByNodeId, onNodeClick, setInlineEditing, studioSizing, dependencies, }: RenderReactNodeArgs<TInlineEditing>) => React__default.ReactNode;
109
+
110
+ export { type RenderReactNodeArgs as R, type RenderReactNodeDependencies as a, renderReactNode as r };
@@ -3,7 +3,7 @@ import { FinalRenderPlan, ResolvedNodeChildDescriptor, ResolvedNodeContentDescri
3
3
  import { UINode } from '@arkcit/engine-schema';
4
4
  import { UIRuntimeAdapter } from '@arkcit/engine-runtime';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
- export { r as renderReactNode } from './renderReactNode-DmxD8hot.js';
6
+ export { R as RenderReactNodeArgs, a as RenderReactNodeDependencies, r as renderReactNode } from './renderReactNode-xwA81IXf.js';
7
7
  import { ComponentRegistry } from '@arkcit/engine-core';
8
8
 
9
9
  type FinalizeRenderedNodeParams = {
package/dist/rendering.js CHANGED
@@ -176,6 +176,43 @@ var materializeBoundTable = ({
176
176
  // src/rendering/finalizeRenderedNode.tsx
177
177
  var RESPONSIVE_MEDIA_NODE_TYPES = /* @__PURE__ */ new Set(["Image", "Video", "EmbeddedVideo", "Cover", "Document"]);
178
178
  var RESPONSIVE_MEDIA_CLASS_NAME = "max-md:!w-full max-md:![flex-basis:100%!important] max-md:!h-auto";
179
+ var RESPONSIVE_TEXT_NODE_TYPES = /* @__PURE__ */ new Set([
180
+ "Typography",
181
+ "H1",
182
+ "H2",
183
+ "H3",
184
+ "Text",
185
+ "Muted",
186
+ "Lead",
187
+ "Code"
188
+ ]);
189
+ var RESPONSIVE_AUTO_HEIGHT_NODE_TYPES = /* @__PURE__ */ new Set([
190
+ ...RESPONSIVE_MEDIA_NODE_TYPES,
191
+ ...RESPONSIVE_TEXT_NODE_TYPES,
192
+ "Accordion",
193
+ "BookingCalendar",
194
+ "Button",
195
+ "Breadcrumb",
196
+ "Link",
197
+ "Card",
198
+ "Carousel",
199
+ "ContentSlider",
200
+ "Cover",
201
+ "DataGrid",
202
+ "ExpandablePanel",
203
+ "FilterBar",
204
+ "Form",
205
+ "FormWizard",
206
+ "Grid",
207
+ "Container",
208
+ "MapCard",
209
+ "Pagination",
210
+ "QRCode",
211
+ "Slider",
212
+ "Table",
213
+ "Tabs"
214
+ ]);
215
+ var RESPONSIVE_TEXT_CLASS_NAME = "max-md:!h-auto";
179
216
  var hasExplicitStudioSizing = (studioSizing) => Boolean(
180
217
  studioSizing && (studioSizing.widthPct !== null || studioSizing.heightPct !== null || studioSizing.heightPx !== null)
181
218
  );
@@ -194,6 +231,10 @@ var finalizeRenderedNode = ({
194
231
  const currentClassName = typeof componentProps.className === "string" ? componentProps.className : "";
195
232
  componentProps.className = [currentClassName, RESPONSIVE_MEDIA_CLASS_NAME].filter(Boolean).join(" ");
196
233
  }
234
+ if (RESPONSIVE_AUTO_HEIGHT_NODE_TYPES.has(node.type) && hasExplicitStudioSizing(studioSizing)) {
235
+ const currentClassName = typeof componentProps.className === "string" ? componentProps.className : "";
236
+ componentProps.className = [currentClassName, RESPONSIVE_TEXT_CLASS_NAME].filter(Boolean).join(" ");
237
+ }
197
238
  const plans = providedPlans != null ? providedPlans : dependencies.resolveFinalRenderPlan({
198
239
  node,
199
240
  componentProps,
@@ -417,6 +458,11 @@ var normalizeRenderableChild = (value) => {
417
458
  const nestedChildren = candidate.props.children;
418
459
  return normalizeRenderableChild(nestedChildren);
419
460
  }
461
+ for (const key of ["children", "label", "title", "content", "text", "value"]) {
462
+ if (key in candidate) {
463
+ return normalizeRenderableChild(candidate[key]);
464
+ }
465
+ }
420
466
  }
421
467
  return null;
422
468
  };
@@ -3,10 +3,10 @@ import React__default from 'react';
3
3
  import { UIEngineProps, UINodeWrapperProps } from '@arkcit/engine-core';
4
4
  import { UINode } from '@arkcit/engine-schema';
5
5
  import { UIRuntimeAdapter } from '@arkcit/engine-runtime';
6
- import { r as renderReactNode } from './renderReactNode-DmxD8hot.js';
6
+ import { a as RenderReactNodeDependencies } from './renderReactNode-xwA81IXf.js';
7
7
  import '@arkcit/engine-render-layer';
8
8
 
9
- type RenderSafeNodeArgs<TInlineEditing> = {
9
+ type StaticRenderSafeNodeArgs<TInlineEditing = unknown> = {
10
10
  node: UINode;
11
11
  registry: NonNullable<UIEngineProps["registry"]>;
12
12
  runtime: UIRuntimeAdapter;
@@ -36,14 +36,14 @@ type RenderSafeNodeArgs<TInlineEditing> = {
36
36
  NodeWrapper: React__default.ComponentType<UINodeWrapperProps>;
37
37
  isFormInteractiveTarget: (target: HTMLElement | null) => boolean;
38
38
  };
39
- type StaticReactWebEngineRootDependencies<TInlineEditing> = {
40
- renderSafeNode: (args: RenderSafeNodeArgs<TInlineEditing>) => React__default.ReactNode;
39
+ type StaticReactWebEngineRootDependencies<TInlineEditing = unknown> = {
40
+ renderSafeNode: (args: StaticRenderSafeNodeArgs<TInlineEditing>) => React__default.ReactNode;
41
41
  StudioNodeWrapper: React__default.ComponentType<UINodeWrapperProps>;
42
- renderReactNodeDependencies: Parameters<typeof renderReactNode<TInlineEditing>>[0]["dependencies"];
42
+ renderReactNodeDependencies: RenderReactNodeDependencies<TInlineEditing>;
43
43
  };
44
- type StaticReactWebEngineRootArgs<TInlineEditing> = UIEngineProps & {
44
+ type StaticReactWebEngineRootArgs<TInlineEditing = unknown> = UIEngineProps & {
45
45
  dependencies: StaticReactWebEngineRootDependencies<TInlineEditing>;
46
46
  };
47
47
  declare const StaticReactWebEngineRoot: <TInlineEditing = unknown>({ schema, registry, store, nodeWrapper, dependencies, }: StaticReactWebEngineRootArgs<TInlineEditing>) => react_jsx_runtime.JSX.Element;
48
48
 
49
- export { StaticReactWebEngineRoot };
49
+ export { StaticReactWebEngineRoot, type StaticReactWebEngineRootArgs, type StaticReactWebEngineRootDependencies, type StaticRenderSafeNodeArgs };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@arkcit/engine-react",
3
3
  "private": false,
4
- "version": "0.3.6",
4
+ "version": "0.3.8",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "React-specific renderer package for the Arkcit engine platform.",
@@ -75,10 +75,10 @@
75
75
  "test": "npm run test:smoke && npm run test:unit"
76
76
  },
77
77
  "dependencies": {
78
- "@arkcit/engine-core": "^0.3.2",
79
- "@arkcit/engine-render-layer": "^0.3.2",
80
- "@arkcit/engine-runtime": "^0.3.1",
81
- "@arkcit/engine-schema": "^0.3.2"
78
+ "@arkcit/engine-core": "^0.3.3",
79
+ "@arkcit/engine-render-layer": "^0.3.3",
80
+ "@arkcit/engine-runtime": "^0.3.2",
81
+ "@arkcit/engine-schema": "^0.3.3"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "react": "^19.1.0",
@@ -1,109 +0,0 @@
1
- import React__default from 'react';
2
- import { ComponentRegistry } from '@arkcit/engine-core';
3
- import { UINode } from '@arkcit/engine-schema';
4
- import { UIRuntimeAdapter } from '@arkcit/engine-runtime';
5
- import { ContentCompositionPlan, RenderDirectivePlan, NavigationCompositionPlan, FinalRenderPlan } from '@arkcit/engine-render-layer';
6
-
7
- type RenderReactNodeArgs<TInlineEditing = unknown> = {
8
- node: UINode;
9
- runtime: UIRuntimeAdapter;
10
- registry: ComponentRegistry;
11
- schemaNodes: UINode[];
12
- renderSafeNode: (node: UINode) => React__default.ReactNode;
13
- internalStudioNodeTypes: Set<string>;
14
- overlaysByNodeId: Record<string, unknown>;
15
- onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
16
- isStudioRendererContext: boolean;
17
- dropdownOpenByNodeId: Record<string, boolean>;
18
- setDropdownOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
19
- captureFieldFocus: (target: EventTarget | null) => void;
20
- selectedNodeId: string | null | undefined;
21
- wizardActiveStepByNodeId: Record<string, string>;
22
- accordionOpenIdsByNodeId: Record<string, string[]>;
23
- expandablePanelOpenByNodeId: Record<string, boolean>;
24
- setWizardActiveStepByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string>>>;
25
- setAccordionOpenIdsByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string[]>>>;
26
- setExpandablePanelOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
27
- onNodeClick?: (nodeId: string) => void;
28
- setInlineEditing: React__default.Dispatch<React__default.SetStateAction<TInlineEditing | null>>;
29
- studioSizing?: {
30
- widthPct: number | null;
31
- heightPct: number | null;
32
- heightPx: number | null;
33
- };
34
- dependencies: {
35
- applyStudioOverlayComponentProps: (args: {
36
- node: UINode;
37
- componentProps: Record<string, unknown>;
38
- runtime: UIRuntimeAdapter;
39
- overlaysByNodeId: Record<string, unknown>;
40
- renderBindingProps: Record<string, unknown>;
41
- resolvedChildContent: React__default.ReactNode | null;
42
- onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
43
- isStudioRendererContext: boolean;
44
- dropdownOpenByNodeId: Record<string, boolean>;
45
- setDropdownOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
46
- }) => void;
47
- applyContentComposition: (args: {
48
- node: UINode;
49
- componentProps: Record<string, unknown>;
50
- isStudioRendererContext: boolean;
51
- internalStudioNodeTypes: Set<string>;
52
- schemaNodes: UINode[];
53
- onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
54
- captureFieldFocus: (target: EventTarget | null) => void;
55
- renderSafeNode: (node: UINode) => React__default.ReactNode;
56
- normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
57
- findNodeById: (nodeId: string, nodes: UINode[]) => UINode | null;
58
- runtime: UIRuntimeAdapter;
59
- plans?: ContentCompositionPlan[];
60
- }) => React__default.ReactNode | null;
61
- applyRenderDirectives: (args: {
62
- node: UINode;
63
- componentProps: Record<string, unknown>;
64
- renderBindingProps: Record<string, unknown>;
65
- runtime: UIRuntimeAdapter;
66
- plans?: RenderDirectivePlan[];
67
- }) => void;
68
- applyNavigationComposition: (args: {
69
- node: UINode;
70
- componentProps: Record<string, unknown>;
71
- isStudioRendererContext: boolean;
72
- selectedNodeId: string | null;
73
- wizardActiveStepByNodeId: Record<string, string>;
74
- accordionOpenIdsByNodeId: Record<string, string[]>;
75
- expandablePanelOpenByNodeId: Record<string, boolean>;
76
- runtime: UIRuntimeAdapter;
77
- setWizardActiveStepByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string>>>;
78
- setAccordionOpenIdsByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, string[]>>>;
79
- setExpandablePanelOpenByNodeId: React__default.Dispatch<React__default.SetStateAction<Record<string, boolean>>>;
80
- onNodeClick?: (nodeId: string) => void;
81
- onInlineTextEdit?: (nodeId: string, propName: string, value: unknown) => void;
82
- renderSafeNode: (node: UINode) => React__default.ReactNode;
83
- normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
84
- captureFieldFocus: (target: EventTarget | null) => void;
85
- setInlineEditing: React__default.Dispatch<React__default.SetStateAction<TInlineEditing | null>>;
86
- internalStudioNodeTypes: Set<string>;
87
- plans?: NavigationCompositionPlan[];
88
- }) => void;
89
- finalizeRenderedNode: (args: {
90
- node: UINode;
91
- children: React__default.ReactNode[] | undefined;
92
- componentProps: Record<string, unknown>;
93
- registryComponent: React__default.ComponentType<Record<string, unknown>>;
94
- runtime: UIRuntimeAdapter;
95
- isStudioRendererContext: boolean;
96
- studioSizing?: {
97
- widthPct: number | null;
98
- heightPct: number | null;
99
- heightPx: number | null;
100
- };
101
- plans?: FinalRenderPlan[];
102
- }) => React__default.ReactNode | null;
103
- normalizeRenderableChild: (value: unknown) => React__default.ReactNode;
104
- findNodeById: (nodeId: string, nodes: UINode[]) => UINode | null;
105
- };
106
- };
107
- declare const renderReactNode: <TInlineEditing = unknown>({ node, runtime, registry, schemaNodes, renderSafeNode, internalStudioNodeTypes, overlaysByNodeId, onInlineTextEdit, isStudioRendererContext, dropdownOpenByNodeId, setDropdownOpenByNodeId, captureFieldFocus, selectedNodeId, wizardActiveStepByNodeId, accordionOpenIdsByNodeId, expandablePanelOpenByNodeId, setWizardActiveStepByNodeId, setAccordionOpenIdsByNodeId, setExpandablePanelOpenByNodeId, onNodeClick, setInlineEditing, studioSizing, dependencies, }: RenderReactNodeArgs<TInlineEditing>) => React__default.ReactNode;
108
-
109
- export { renderReactNode as r };