@arkcit/engine-react 0.3.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.
- package/README.md +51 -0
- package/dist/composition.d.ts +116 -0
- package/dist/composition.js +344 -0
- package/dist/directives.d.ts +49 -0
- package/dist/directives.js +58 -0
- package/dist/engine.d.ts +96 -0
- package/dist/engine.js +508 -0
- package/dist/hooks.d.ts +55 -0
- package/dist/hooks.js +135 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +1371 -0
- package/dist/materialization.d.ts +86 -0
- package/dist/materialization.js +334 -0
- package/dist/renderReactNode-DmxD8hot.d.ts +109 -0
- package/dist/rendering.d.ts +118 -0
- package/dist/rendering.js +582 -0
- package/package.json +91 -0
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
|
|
21
|
+
// src/rendering/finalizeRenderedNode.tsx
|
|
22
|
+
import React2 from "react";
|
|
23
|
+
|
|
24
|
+
// src/rendering/previewLinkBehavior.ts
|
|
25
|
+
var configurePreviewLinkBehavior = (componentProps) => {
|
|
26
|
+
const existingOnClick = componentProps.onClick;
|
|
27
|
+
componentProps.onClick = (event) => {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
if (typeof existingOnClick === "function") {
|
|
30
|
+
existingOnClick(event);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// src/materialization/materializeBoundTable.tsx
|
|
36
|
+
import React from "react";
|
|
37
|
+
|
|
38
|
+
// src/rendering/resolveBoundTableData.ts
|
|
39
|
+
var resolveBoundTableData = ({
|
|
40
|
+
nodeId,
|
|
41
|
+
componentProps,
|
|
42
|
+
runtime
|
|
43
|
+
}) => {
|
|
44
|
+
var _a, _b, _c, _d;
|
|
45
|
+
const rows = Array.isArray(componentProps.rows) ? componentProps.rows : [];
|
|
46
|
+
const columns = Array.isArray(componentProps.columns) ? componentProps.columns : [];
|
|
47
|
+
const paginationCandidate = componentProps.pagination;
|
|
48
|
+
const pagination = paginationCandidate && typeof paginationCandidate === "object" ? paginationCandidate : null;
|
|
49
|
+
const pageRaw = Number((_a = pagination == null ? void 0 : pagination.page) != null ? _a : 1);
|
|
50
|
+
const pageSizeRaw = Number(((_b = pagination == null ? void 0 : pagination.pageSize) != null ? _b : rows.length) || 1);
|
|
51
|
+
const page = Number.isFinite(pageRaw) && pageRaw > 0 ? pageRaw : 1;
|
|
52
|
+
const pageSize = Number.isFinite(pageSizeRaw) && pageSizeRaw > 0 ? pageSizeRaw : rows.length || 1;
|
|
53
|
+
const tableQueriesRaw = runtime.get("table.queriesByNodeId");
|
|
54
|
+
const tableQueries = tableQueriesRaw && typeof tableQueriesRaw === "object" ? tableQueriesRaw : {};
|
|
55
|
+
const query = String((_d = (_c = tableQueries[nodeId]) != null ? _c : tableQueries.__all__) != null ? _d : "").trim().toLowerCase();
|
|
56
|
+
const filteredRows = query.length === 0 ? rows : rows.filter(
|
|
57
|
+
(row) => columns.some((column) => {
|
|
58
|
+
var _a2;
|
|
59
|
+
const key = String((_a2 = column.key) != null ? _a2 : "").trim();
|
|
60
|
+
if (!key) return false;
|
|
61
|
+
const value = row[key];
|
|
62
|
+
return String(value != null ? value : "").toLowerCase().includes(query);
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
const startIndex = (page - 1) * pageSize;
|
|
66
|
+
const pagedRows = pagination ? filteredRows.slice(startIndex, startIndex + pageSize) : filteredRows;
|
|
67
|
+
return {
|
|
68
|
+
columns,
|
|
69
|
+
rows,
|
|
70
|
+
filteredRows,
|
|
71
|
+
pagedRows,
|
|
72
|
+
pagination,
|
|
73
|
+
page,
|
|
74
|
+
pageSize,
|
|
75
|
+
query
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// src/materialization/materializeBoundTable.tsx
|
|
80
|
+
var RENDER_INTERNAL_PROP_NAMES = /* @__PURE__ */ new Set([
|
|
81
|
+
"bindingEnabled",
|
|
82
|
+
"valueBindingKey",
|
|
83
|
+
"optionsBindingKey",
|
|
84
|
+
"useBindingData",
|
|
85
|
+
"entitiesBindingKey",
|
|
86
|
+
"videoBindingKey",
|
|
87
|
+
"mapBindingKey",
|
|
88
|
+
"productBindingKey",
|
|
89
|
+
"useTranslationKeys",
|
|
90
|
+
"tagContentTranslationKey",
|
|
91
|
+
"tagContentTranslationValue",
|
|
92
|
+
"hrefTranslationKey",
|
|
93
|
+
"hrefTranslationValue",
|
|
94
|
+
"mediaSource",
|
|
95
|
+
"mediaSrc",
|
|
96
|
+
"mediaAlt",
|
|
97
|
+
"rowsBindingKey",
|
|
98
|
+
"columnsBindingKey"
|
|
99
|
+
]);
|
|
100
|
+
var omitInternalProps = (props) => {
|
|
101
|
+
const next = __spreadValues({}, props);
|
|
102
|
+
delete next.__studio;
|
|
103
|
+
for (const propName of RENDER_INTERNAL_PROP_NAMES) {
|
|
104
|
+
delete next[propName];
|
|
105
|
+
}
|
|
106
|
+
return next;
|
|
107
|
+
};
|
|
108
|
+
var materializeBoundTable = ({
|
|
109
|
+
nodeId,
|
|
110
|
+
componentProps,
|
|
111
|
+
runtime,
|
|
112
|
+
TableComponent
|
|
113
|
+
}) => {
|
|
114
|
+
const { columns, pagedRows } = resolveBoundTableData({
|
|
115
|
+
nodeId,
|
|
116
|
+
componentProps,
|
|
117
|
+
runtime
|
|
118
|
+
});
|
|
119
|
+
delete componentProps.rows;
|
|
120
|
+
delete componentProps.columns;
|
|
121
|
+
delete componentProps.pagination;
|
|
122
|
+
delete componentProps.rowsBindingKey;
|
|
123
|
+
delete componentProps.columnsBindingKey;
|
|
124
|
+
delete componentProps.useBindingData;
|
|
125
|
+
if (columns.length === 0) return null;
|
|
126
|
+
delete componentProps.children;
|
|
127
|
+
const headerNode = React.createElement(
|
|
128
|
+
TableComponent.Header,
|
|
129
|
+
null,
|
|
130
|
+
React.createElement(
|
|
131
|
+
TableComponent.Row,
|
|
132
|
+
null,
|
|
133
|
+
...columns.map(
|
|
134
|
+
(column, columnIndex) => {
|
|
135
|
+
var _a, _b, _c;
|
|
136
|
+
return React.createElement(
|
|
137
|
+
TableComponent.Head,
|
|
138
|
+
{ key: `table-head-${String((_a = column.key) != null ? _a : columnIndex)}` },
|
|
139
|
+
String((_c = (_b = column.header) != null ? _b : column.key) != null ? _c : `Column ${columnIndex + 1}`)
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
const bodyNode = React.createElement(
|
|
146
|
+
TableComponent.Body,
|
|
147
|
+
null,
|
|
148
|
+
...pagedRows.map(
|
|
149
|
+
(row, rowIndex) => {
|
|
150
|
+
var _a;
|
|
151
|
+
return React.createElement(
|
|
152
|
+
TableComponent.Row,
|
|
153
|
+
{ key: `table-row-${String((_a = row.id) != null ? _a : rowIndex)}` },
|
|
154
|
+
...columns.map((column, columnIndex) => {
|
|
155
|
+
var _a2, _b;
|
|
156
|
+
const key = String((_a2 = column.key) != null ? _a2 : "").trim();
|
|
157
|
+
const value = key ? row[key] : "";
|
|
158
|
+
return React.createElement(
|
|
159
|
+
TableComponent.Cell,
|
|
160
|
+
{ key: `table-cell-${String((_b = row.id) != null ? _b : rowIndex)}-${key || columnIndex}` },
|
|
161
|
+
value == null ? "" : String(value)
|
|
162
|
+
);
|
|
163
|
+
})
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
)
|
|
167
|
+
);
|
|
168
|
+
return React.createElement(
|
|
169
|
+
TableComponent,
|
|
170
|
+
omitInternalProps(componentProps),
|
|
171
|
+
headerNode,
|
|
172
|
+
bodyNode
|
|
173
|
+
);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
// src/rendering/finalizeRenderedNode.tsx
|
|
177
|
+
var finalizeRenderedNode = ({
|
|
178
|
+
node,
|
|
179
|
+
children,
|
|
180
|
+
componentProps,
|
|
181
|
+
registryComponent,
|
|
182
|
+
runtime,
|
|
183
|
+
isStudioRendererContext,
|
|
184
|
+
studioSizing,
|
|
185
|
+
plans: providedPlans,
|
|
186
|
+
dependencies
|
|
187
|
+
}) => {
|
|
188
|
+
const plans = providedPlans != null ? providedPlans : dependencies.resolveFinalRenderPlan({
|
|
189
|
+
node,
|
|
190
|
+
componentProps,
|
|
191
|
+
isStudioRendererContext,
|
|
192
|
+
studioSizing
|
|
193
|
+
});
|
|
194
|
+
for (const plan of plans) {
|
|
195
|
+
if (plan.kind === "style-sizing") {
|
|
196
|
+
componentProps.style = plan.style;
|
|
197
|
+
}
|
|
198
|
+
if (plan.kind === "configure-studio-link") {
|
|
199
|
+
configurePreviewLinkBehavior(componentProps);
|
|
200
|
+
}
|
|
201
|
+
if (plan.kind === "cleanup-studio-props") {
|
|
202
|
+
delete componentProps.__studioColSpan;
|
|
203
|
+
delete componentProps.__studioWrapperClassName;
|
|
204
|
+
delete componentProps.__studioWidthPct;
|
|
205
|
+
delete componentProps.__studioHeightPct;
|
|
206
|
+
delete componentProps.__studioHeightPx;
|
|
207
|
+
delete componentProps.__studioCardSection;
|
|
208
|
+
delete componentProps.layout;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (plans.some((plan) => plan.kind === "table-fallback")) {
|
|
212
|
+
const tableNode = materializeBoundTable({
|
|
213
|
+
nodeId: node.id,
|
|
214
|
+
componentProps,
|
|
215
|
+
runtime,
|
|
216
|
+
TableComponent: registryComponent
|
|
217
|
+
});
|
|
218
|
+
if (tableNode) {
|
|
219
|
+
return tableNode;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const finalComponentProps = dependencies.omitStudioProps(componentProps);
|
|
223
|
+
if (children && children.length > 0) {
|
|
224
|
+
if (node.type === "Cover" || node.type === "Tabs" || node.type === "Accordion") {
|
|
225
|
+
return React2.createElement(registryComponent, finalComponentProps);
|
|
226
|
+
}
|
|
227
|
+
return React2.createElement(registryComponent, finalComponentProps, children);
|
|
228
|
+
}
|
|
229
|
+
return React2.createElement(registryComponent, finalComponentProps);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
// src/rendering/gridItemWrapperProps.ts
|
|
233
|
+
var getGridItemWrapperProps = (colSpan) => ({
|
|
234
|
+
className: "w-full min-w-0",
|
|
235
|
+
style: {
|
|
236
|
+
gridColumn: `span ${colSpan} / span ${colSpan}`
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
// src/rendering/nodeResetToken.ts
|
|
241
|
+
import { isValidElement } from "react";
|
|
242
|
+
var buildNodeResetToken = (node) => {
|
|
243
|
+
var _a, _b, _c, _d, _e, _f;
|
|
244
|
+
const seen = /* @__PURE__ */ new WeakSet();
|
|
245
|
+
try {
|
|
246
|
+
return JSON.stringify(
|
|
247
|
+
{
|
|
248
|
+
type: node.type,
|
|
249
|
+
props: (_a = node.props) != null ? _a : null,
|
|
250
|
+
events: (_b = node.events) != null ? _b : null,
|
|
251
|
+
children: (_d = (_c = node.children) == null ? void 0 : _c.map((child) => child.id)) != null ? _d : []
|
|
252
|
+
},
|
|
253
|
+
(_key, value) => {
|
|
254
|
+
if (typeof value === "function") return "[function]";
|
|
255
|
+
if (isValidElement(value)) return "[react-element]";
|
|
256
|
+
if (value && typeof value === "object") {
|
|
257
|
+
if (seen.has(value)) return "[circular]";
|
|
258
|
+
seen.add(value);
|
|
259
|
+
}
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
);
|
|
263
|
+
} catch (e) {
|
|
264
|
+
return `${node.type}:${node.id}:${Object.keys((_e = node.props) != null ? _e : {}).join(",")}:${((_f = node.children) != null ? _f : []).map((child) => child.id).join(",")}`;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// src/rendering/prepareRenderableChildren.tsx
|
|
269
|
+
import React4 from "react";
|
|
270
|
+
import {
|
|
271
|
+
resolveChildContentDescriptor,
|
|
272
|
+
resolveChildDescriptors
|
|
273
|
+
} from "@arkcit/engine-render-layer";
|
|
274
|
+
|
|
275
|
+
// src/materialization/materializeChildContent.tsx
|
|
276
|
+
import React3 from "react";
|
|
277
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
278
|
+
var materializeChildContent = ({
|
|
279
|
+
descriptor,
|
|
280
|
+
renderSafeNode
|
|
281
|
+
}) => {
|
|
282
|
+
if (descriptor.kind === "empty") {
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
const renderDescriptor = (childDescriptor) => {
|
|
286
|
+
if (childDescriptor.kind === "grid-item") {
|
|
287
|
+
return /* @__PURE__ */ jsx("div", __spreadProps(__spreadValues({}, getGridItemWrapperProps(childDescriptor.colSpan)), { children: renderSafeNode(childDescriptor.child) }), childDescriptor.child.id);
|
|
288
|
+
}
|
|
289
|
+
return /* @__PURE__ */ jsx(React3.Fragment, { children: renderSafeNode(childDescriptor.child) }, childDescriptor.child.id);
|
|
290
|
+
};
|
|
291
|
+
if (descriptor.kind === "single") {
|
|
292
|
+
return renderDescriptor(descriptor.child);
|
|
293
|
+
}
|
|
294
|
+
return /* @__PURE__ */ jsx(Fragment, { children: descriptor.children.map(renderDescriptor) });
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// src/rendering/prepareRenderableChildren.tsx
|
|
298
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
299
|
+
var prepareRenderableChildren = ({
|
|
300
|
+
node,
|
|
301
|
+
internalStudioNodeTypes,
|
|
302
|
+
renderSafeNode,
|
|
303
|
+
childDescriptors,
|
|
304
|
+
childContentDescriptor
|
|
305
|
+
}) => {
|
|
306
|
+
const resolvedDescriptors = childDescriptors != null ? childDescriptors : resolveChildDescriptors({
|
|
307
|
+
node,
|
|
308
|
+
internalStudioNodeTypes
|
|
309
|
+
});
|
|
310
|
+
const children = resolvedDescriptors.map((descriptor) => {
|
|
311
|
+
if (descriptor.kind === "grid-item") {
|
|
312
|
+
return /* @__PURE__ */ jsx2("div", __spreadProps(__spreadValues({}, getGridItemWrapperProps(descriptor.colSpan)), { children: renderSafeNode(descriptor.child) }), descriptor.child.id);
|
|
313
|
+
}
|
|
314
|
+
return /* @__PURE__ */ jsx2(React4.Fragment, { children: renderSafeNode(descriptor.child) }, descriptor.child.id);
|
|
315
|
+
});
|
|
316
|
+
const resolvedChildContentDescriptor = childContentDescriptor != null ? childContentDescriptor : resolveChildContentDescriptor({
|
|
317
|
+
childDescriptors: resolvedDescriptors
|
|
318
|
+
});
|
|
319
|
+
const resolvedChildContent = materializeChildContent({
|
|
320
|
+
descriptor: resolvedChildContentDescriptor,
|
|
321
|
+
renderSafeNode
|
|
322
|
+
});
|
|
323
|
+
return {
|
|
324
|
+
children,
|
|
325
|
+
resolvedChildContent,
|
|
326
|
+
childDescriptors: resolvedDescriptors,
|
|
327
|
+
childContentDescriptor: resolvedChildContentDescriptor
|
|
328
|
+
};
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// src/rendering/renderChildren.tsx
|
|
332
|
+
import React5, { isValidElement as isValidElement2 } from "react";
|
|
333
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
334
|
+
var toBoolean = (value) => {
|
|
335
|
+
if (typeof value === "boolean") return value;
|
|
336
|
+
if (typeof value === "string") return value.toLowerCase() === "true";
|
|
337
|
+
return false;
|
|
338
|
+
};
|
|
339
|
+
var normalizeRenderableChild = (value) => {
|
|
340
|
+
if (value == null || typeof value === "boolean") return null;
|
|
341
|
+
if (typeof value === "string" || typeof value === "number") return value;
|
|
342
|
+
if (isValidElement2(value)) return value;
|
|
343
|
+
if (Array.isArray(value)) {
|
|
344
|
+
return value.map((item, index) => /* @__PURE__ */ jsx3(React5.Fragment, { children: normalizeRenderableChild(item) }, `normalized-child-${index}`));
|
|
345
|
+
}
|
|
346
|
+
if (value && typeof value === "object") {
|
|
347
|
+
const candidate = value;
|
|
348
|
+
if ("props" in candidate && candidate.props && typeof candidate.props === "object") {
|
|
349
|
+
const nestedChildren = candidate.props.children;
|
|
350
|
+
return normalizeRenderableChild(nestedChildren);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return null;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
// src/engine/EngineWarningFallback.tsx
|
|
357
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
358
|
+
var EngineWarningFallback = ({ message }) => /* @__PURE__ */ jsx4(
|
|
359
|
+
"div",
|
|
360
|
+
{
|
|
361
|
+
role: "alert",
|
|
362
|
+
className: "rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-900",
|
|
363
|
+
children: message
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
var EngineWarningFallback_default = EngineWarningFallback;
|
|
367
|
+
|
|
368
|
+
// src/rendering/resolveResolvedReactNode.ts
|
|
369
|
+
import {
|
|
370
|
+
resolveResolvedNode
|
|
371
|
+
} from "@arkcit/engine-render-layer";
|
|
372
|
+
var resolveResolvedReactNode = ({
|
|
373
|
+
node,
|
|
374
|
+
runtime,
|
|
375
|
+
registry,
|
|
376
|
+
internalStudioNodeTypes,
|
|
377
|
+
renderSafeNode,
|
|
378
|
+
isStudioRendererContext,
|
|
379
|
+
studioSizing
|
|
380
|
+
}) => {
|
|
381
|
+
const registryEntry = registry[node.type];
|
|
382
|
+
if (!registryEntry) {
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
const resolvedNode = resolveResolvedNode({
|
|
386
|
+
node,
|
|
387
|
+
runtime,
|
|
388
|
+
internalStudioNodeTypes,
|
|
389
|
+
isStudioRendererContext,
|
|
390
|
+
studioSizing
|
|
391
|
+
});
|
|
392
|
+
const { children, resolvedChildContent } = prepareRenderableChildren({
|
|
393
|
+
node,
|
|
394
|
+
internalStudioNodeTypes,
|
|
395
|
+
renderSafeNode,
|
|
396
|
+
childDescriptors: resolvedNode.childDescriptors,
|
|
397
|
+
childContentDescriptor: resolvedNode.childContentDescriptor
|
|
398
|
+
});
|
|
399
|
+
return __spreadProps(__spreadValues({}, resolvedNode), {
|
|
400
|
+
registryEntry,
|
|
401
|
+
children,
|
|
402
|
+
resolvedChildContent
|
|
403
|
+
});
|
|
404
|
+
};
|
|
405
|
+
|
|
406
|
+
// src/rendering/renderReactNode.tsx
|
|
407
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
408
|
+
var renderReactNode = ({
|
|
409
|
+
node,
|
|
410
|
+
runtime,
|
|
411
|
+
registry,
|
|
412
|
+
schemaNodes,
|
|
413
|
+
renderSafeNode,
|
|
414
|
+
internalStudioNodeTypes,
|
|
415
|
+
overlaysByNodeId,
|
|
416
|
+
onInlineTextEdit,
|
|
417
|
+
isStudioRendererContext,
|
|
418
|
+
dropdownOpenByNodeId,
|
|
419
|
+
setDropdownOpenByNodeId,
|
|
420
|
+
captureFieldFocus,
|
|
421
|
+
selectedNodeId,
|
|
422
|
+
wizardActiveStepByNodeId,
|
|
423
|
+
accordionOpenIdsByNodeId,
|
|
424
|
+
expandablePanelOpenByNodeId,
|
|
425
|
+
setWizardActiveStepByNodeId,
|
|
426
|
+
setAccordionOpenIdsByNodeId,
|
|
427
|
+
setExpandablePanelOpenByNodeId,
|
|
428
|
+
onNodeClick,
|
|
429
|
+
setInlineEditing,
|
|
430
|
+
studioSizing,
|
|
431
|
+
dependencies
|
|
432
|
+
}) => {
|
|
433
|
+
try {
|
|
434
|
+
const resolvedNode = resolveResolvedReactNode({
|
|
435
|
+
node,
|
|
436
|
+
runtime,
|
|
437
|
+
registry,
|
|
438
|
+
internalStudioNodeTypes,
|
|
439
|
+
renderSafeNode,
|
|
440
|
+
isStudioRendererContext,
|
|
441
|
+
studioSizing
|
|
442
|
+
});
|
|
443
|
+
if (!resolvedNode) {
|
|
444
|
+
return /* @__PURE__ */ jsx5(
|
|
445
|
+
EngineWarningFallback_default,
|
|
446
|
+
{
|
|
447
|
+
message: `Unknown component type "${node.type}" for node "${node.id}".`
|
|
448
|
+
}
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
const {
|
|
452
|
+
registryEntry,
|
|
453
|
+
componentProps,
|
|
454
|
+
renderBindingProps,
|
|
455
|
+
children,
|
|
456
|
+
resolvedChildContent,
|
|
457
|
+
contentPlans,
|
|
458
|
+
navigationPlans,
|
|
459
|
+
renderDirectivePlans,
|
|
460
|
+
finalRenderPlans
|
|
461
|
+
} = resolvedNode;
|
|
462
|
+
dependencies.applyStudioOverlayComponentProps({
|
|
463
|
+
node,
|
|
464
|
+
componentProps,
|
|
465
|
+
runtime,
|
|
466
|
+
overlaysByNodeId,
|
|
467
|
+
renderBindingProps,
|
|
468
|
+
resolvedChildContent,
|
|
469
|
+
onInlineTextEdit,
|
|
470
|
+
isStudioRendererContext,
|
|
471
|
+
dropdownOpenByNodeId,
|
|
472
|
+
setDropdownOpenByNodeId
|
|
473
|
+
});
|
|
474
|
+
const contentNode = dependencies.applyContentComposition({
|
|
475
|
+
node,
|
|
476
|
+
componentProps,
|
|
477
|
+
isStudioRendererContext,
|
|
478
|
+
internalStudioNodeTypes,
|
|
479
|
+
schemaNodes,
|
|
480
|
+
onInlineTextEdit,
|
|
481
|
+
captureFieldFocus,
|
|
482
|
+
renderSafeNode,
|
|
483
|
+
normalizeRenderableChild: dependencies.normalizeRenderableChild,
|
|
484
|
+
findNodeById: dependencies.findNodeById,
|
|
485
|
+
runtime,
|
|
486
|
+
plans: contentPlans
|
|
487
|
+
});
|
|
488
|
+
if (contentNode) {
|
|
489
|
+
return contentNode;
|
|
490
|
+
}
|
|
491
|
+
dependencies.applyRenderDirectives({
|
|
492
|
+
node,
|
|
493
|
+
componentProps,
|
|
494
|
+
renderBindingProps,
|
|
495
|
+
runtime,
|
|
496
|
+
plans: renderDirectivePlans
|
|
497
|
+
});
|
|
498
|
+
dependencies.applyNavigationComposition({
|
|
499
|
+
node,
|
|
500
|
+
componentProps,
|
|
501
|
+
isStudioRendererContext,
|
|
502
|
+
selectedNodeId: selectedNodeId != null ? selectedNodeId : null,
|
|
503
|
+
wizardActiveStepByNodeId,
|
|
504
|
+
accordionOpenIdsByNodeId,
|
|
505
|
+
expandablePanelOpenByNodeId,
|
|
506
|
+
runtime,
|
|
507
|
+
setWizardActiveStepByNodeId,
|
|
508
|
+
setAccordionOpenIdsByNodeId,
|
|
509
|
+
setExpandablePanelOpenByNodeId,
|
|
510
|
+
onNodeClick,
|
|
511
|
+
onInlineTextEdit,
|
|
512
|
+
renderSafeNode,
|
|
513
|
+
normalizeRenderableChild: dependencies.normalizeRenderableChild,
|
|
514
|
+
captureFieldFocus,
|
|
515
|
+
setInlineEditing,
|
|
516
|
+
internalStudioNodeTypes,
|
|
517
|
+
plans: navigationPlans
|
|
518
|
+
});
|
|
519
|
+
return dependencies.finalizeRenderedNode({
|
|
520
|
+
node,
|
|
521
|
+
children,
|
|
522
|
+
componentProps,
|
|
523
|
+
registryComponent: registryEntry.Component,
|
|
524
|
+
runtime,
|
|
525
|
+
isStudioRendererContext,
|
|
526
|
+
studioSizing,
|
|
527
|
+
plans: finalRenderPlans
|
|
528
|
+
});
|
|
529
|
+
} catch (e) {
|
|
530
|
+
return /* @__PURE__ */ jsx5(
|
|
531
|
+
EngineWarningFallback_default,
|
|
532
|
+
{
|
|
533
|
+
message: `Renderer fallback: node "${node.type}" (${node.id}) could not be resolved.`
|
|
534
|
+
}
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
// src/rendering/resolveReactNodePlan.ts
|
|
540
|
+
import { resolveNodeBase } from "@arkcit/engine-render-layer";
|
|
541
|
+
var resolveReactNodePlan = ({
|
|
542
|
+
node,
|
|
543
|
+
runtime,
|
|
544
|
+
registry,
|
|
545
|
+
internalStudioNodeTypes,
|
|
546
|
+
renderSafeNode
|
|
547
|
+
}) => {
|
|
548
|
+
const registryEntry = registry[node.type];
|
|
549
|
+
if (!registryEntry) {
|
|
550
|
+
return null;
|
|
551
|
+
}
|
|
552
|
+
const resolvedNodeBase = resolveNodeBase({
|
|
553
|
+
node,
|
|
554
|
+
runtime,
|
|
555
|
+
internalStudioNodeTypes
|
|
556
|
+
});
|
|
557
|
+
const { children, resolvedChildContent } = prepareRenderableChildren({
|
|
558
|
+
node,
|
|
559
|
+
internalStudioNodeTypes,
|
|
560
|
+
renderSafeNode,
|
|
561
|
+
childDescriptors: resolvedNodeBase.childDescriptors,
|
|
562
|
+
childContentDescriptor: resolvedNodeBase.childContentDescriptor
|
|
563
|
+
});
|
|
564
|
+
return __spreadProps(__spreadValues({}, resolvedNodeBase), {
|
|
565
|
+
registryEntry,
|
|
566
|
+
children,
|
|
567
|
+
resolvedChildContent
|
|
568
|
+
});
|
|
569
|
+
};
|
|
570
|
+
export {
|
|
571
|
+
buildNodeResetToken,
|
|
572
|
+
configurePreviewLinkBehavior,
|
|
573
|
+
finalizeRenderedNode,
|
|
574
|
+
getGridItemWrapperProps,
|
|
575
|
+
normalizeRenderableChild,
|
|
576
|
+
prepareRenderableChildren,
|
|
577
|
+
renderReactNode,
|
|
578
|
+
resolveBoundTableData,
|
|
579
|
+
resolveReactNodePlan,
|
|
580
|
+
resolveResolvedReactNode,
|
|
581
|
+
toBoolean
|
|
582
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@arkcit/engine-react",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.3.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"description": "React-specific renderer package for the Arkcit engine platform.",
|
|
8
|
+
"license": "UNLICENSED",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/Arkcit/engine-react.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/Arkcit/engine-react",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/Arkcit/engine-react/issues"
|
|
16
|
+
},
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"module": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./engine": {
|
|
33
|
+
"types": "./dist/engine.d.ts",
|
|
34
|
+
"import": "./dist/engine.js",
|
|
35
|
+
"default": "./dist/engine.js"
|
|
36
|
+
},
|
|
37
|
+
"./hooks": {
|
|
38
|
+
"types": "./dist/hooks.d.ts",
|
|
39
|
+
"import": "./dist/hooks.js",
|
|
40
|
+
"default": "./dist/hooks.js"
|
|
41
|
+
},
|
|
42
|
+
"./composition": {
|
|
43
|
+
"types": "./dist/composition.d.ts",
|
|
44
|
+
"import": "./dist/composition.js",
|
|
45
|
+
"default": "./dist/composition.js"
|
|
46
|
+
},
|
|
47
|
+
"./directives": {
|
|
48
|
+
"types": "./dist/directives.d.ts",
|
|
49
|
+
"import": "./dist/directives.js",
|
|
50
|
+
"default": "./dist/directives.js"
|
|
51
|
+
},
|
|
52
|
+
"./materialization": {
|
|
53
|
+
"types": "./dist/materialization.d.ts",
|
|
54
|
+
"import": "./dist/materialization.js",
|
|
55
|
+
"default": "./dist/materialization.js"
|
|
56
|
+
},
|
|
57
|
+
"./rendering": {
|
|
58
|
+
"types": "./dist/rendering.d.ts",
|
|
59
|
+
"import": "./dist/rendering.js",
|
|
60
|
+
"default": "./dist/rendering.js"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"scripts": {
|
|
64
|
+
"build": "tsup --config tsup.config.ts",
|
|
65
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
66
|
+
"test:smoke": "node tests/run-all.mjs",
|
|
67
|
+
"test:unit": "node --import tsx --test tests/*.test.ts tests/*.test.tsx",
|
|
68
|
+
"test:coverage": "node --import tsx --test --experimental-test-coverage --test-coverage-include=\"src/**\" tests/*.test.ts tests/*.test.tsx",
|
|
69
|
+
"test": "npm run test:smoke && npm run test:unit"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"@arkcit/engine-core": "^0.3.0",
|
|
73
|
+
"@arkcit/engine-render-layer": "^0.3.0",
|
|
74
|
+
"@arkcit/engine-runtime": "^0.3.0",
|
|
75
|
+
"@arkcit/engine-schema": "^0.3.0"
|
|
76
|
+
},
|
|
77
|
+
"peerDependencies": {
|
|
78
|
+
"react": "^19.1.0",
|
|
79
|
+
"react-dom": "^19.1.0"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@types/react": "^19.2.5",
|
|
83
|
+
"@types/react-dom": "^19.2.3",
|
|
84
|
+
"tsx": "^4.20.6",
|
|
85
|
+
"tsup": "^8.5.1",
|
|
86
|
+
"typescript": "~5.9.3"
|
|
87
|
+
},
|
|
88
|
+
"engines": {
|
|
89
|
+
"node": ">=20.0.0"
|
|
90
|
+
}
|
|
91
|
+
}
|