@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 +11 -11
- package/dist/index.d.ts +3 -3
- package/dist/index.js +46 -0
- package/dist/renderReactNode-xwA81IXf.d.ts +110 -0
- package/dist/rendering.d.ts +1 -1
- package/dist/rendering.js +46 -0
- package/dist/static-engine.d.ts +7 -7
- package/package.json +5 -5
- package/dist/renderReactNode-DmxD8hot.d.ts +0 -109
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 {
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
82
|
-
renderSafeNode: (args:
|
|
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:
|
|
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-
|
|
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 };
|
package/dist/rendering.d.ts
CHANGED
|
@@ -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-
|
|
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
|
};
|
package/dist/static-engine.d.ts
CHANGED
|
@@ -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 {
|
|
6
|
+
import { a as RenderReactNodeDependencies } from './renderReactNode-xwA81IXf.js';
|
|
7
7
|
import '@arkcit/engine-render-layer';
|
|
8
8
|
|
|
9
|
-
type
|
|
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:
|
|
39
|
+
type StaticReactWebEngineRootDependencies<TInlineEditing = unknown> = {
|
|
40
|
+
renderSafeNode: (args: StaticRenderSafeNodeArgs<TInlineEditing>) => React__default.ReactNode;
|
|
41
41
|
StudioNodeWrapper: React__default.ComponentType<UINodeWrapperProps>;
|
|
42
|
-
renderReactNodeDependencies:
|
|
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.
|
|
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.
|
|
79
|
-
"@arkcit/engine-render-layer": "^0.3.
|
|
80
|
-
"@arkcit/engine-runtime": "^0.3.
|
|
81
|
-
"@arkcit/engine-schema": "^0.3.
|
|
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 };
|