@almadar/ui 5.157.0 → 5.158.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/dist/{EntityBindingContext-BfZGeDfX.d.cts → EntityBindingContext-Bn3ePJQC.d.cts} +6 -2
- package/dist/{EntityBindingContext-BfZGeDfX.d.ts → EntityBindingContext-Bn3ePJQC.d.ts} +6 -2
- package/dist/avl/index.cjs +244 -25
- package/dist/avl/index.js +244 -25
- package/dist/components/index.cjs +205 -13
- package/dist/components/index.d.cts +40 -6
- package/dist/components/index.d.ts +40 -6
- package/dist/components/index.js +205 -13
- package/dist/providers/index.cjs +212 -17
- package/dist/providers/index.d.cts +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.js +212 -17
- package/dist/runtime/index.cjs +244 -25
- package/dist/runtime/index.d.cts +12 -3
- package/dist/runtime/index.d.ts +12 -3
- package/dist/runtime/index.js +244 -25
- package/package.json +4 -4
package/dist/providers/index.cjs
CHANGED
|
@@ -360,11 +360,32 @@ function isPlainObject(value) {
|
|
|
360
360
|
if (typeof value === "function") return false;
|
|
361
361
|
return true;
|
|
362
362
|
}
|
|
363
|
+
function subtreeHasMarker(value) {
|
|
364
|
+
const cached = markerPresenceCache.get(value);
|
|
365
|
+
if (cached !== void 0) return cached;
|
|
366
|
+
let found = false;
|
|
367
|
+
const children = Array.isArray(value) ? value : Object.values(value);
|
|
368
|
+
for (const child of children) {
|
|
369
|
+
if (core.isRenderBindingMarker(child)) {
|
|
370
|
+
found = true;
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
if (Array.isArray(child) || isPlainObject(child)) {
|
|
374
|
+
if (subtreeHasMarker(child)) {
|
|
375
|
+
found = true;
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
markerPresenceCache.set(value, found);
|
|
381
|
+
return found;
|
|
382
|
+
}
|
|
363
383
|
function walkValue(value, scopeTrait, entity, config, state) {
|
|
364
384
|
if (core.isRenderBindingMarker(value)) {
|
|
365
385
|
return { resolved: resolveMarkerExpression(value.expression, entity, config, state), changed: true };
|
|
366
386
|
}
|
|
367
387
|
if (Array.isArray(value)) {
|
|
388
|
+
if (!subtreeHasMarker(value)) return { resolved: value, changed: false };
|
|
368
389
|
const out = [];
|
|
369
390
|
let changed = false;
|
|
370
391
|
for (const item of value) {
|
|
@@ -382,6 +403,7 @@ function walkValue(value, scopeTrait, entity, config, state) {
|
|
|
382
403
|
return changed ? { resolved: out, changed: true } : { resolved: value, changed: false };
|
|
383
404
|
}
|
|
384
405
|
if (isPlainObject(value)) {
|
|
406
|
+
if (!subtreeHasMarker(value)) return { resolved: value, changed: false };
|
|
385
407
|
const sourceTrait = value._sourceTrait;
|
|
386
408
|
if (typeof sourceTrait === "string" && sourceTrait !== scopeTrait) {
|
|
387
409
|
return { resolved: value, changed: false };
|
|
@@ -407,9 +429,11 @@ function resolveRenderBindingMarkers(props, scopeTrait, entity, config, state) {
|
|
|
407
429
|
}
|
|
408
430
|
return changed ? out : props;
|
|
409
431
|
}
|
|
432
|
+
var markerPresenceCache;
|
|
410
433
|
var init_resolve_render_bindings = __esm({
|
|
411
434
|
"lib/resolve-render-bindings.ts"() {
|
|
412
435
|
"use client";
|
|
436
|
+
markerPresenceCache = /* @__PURE__ */ new WeakMap();
|
|
413
437
|
}
|
|
414
438
|
});
|
|
415
439
|
function cn(...inputs) {
|
|
@@ -27442,7 +27466,7 @@ function fileIcon(name) {
|
|
|
27442
27466
|
return "file";
|
|
27443
27467
|
}
|
|
27444
27468
|
}
|
|
27445
|
-
var TreeNodeItem, FileTree;
|
|
27469
|
+
var TreeNodeItem, FlatTreeNodeItem, FileTree;
|
|
27446
27470
|
var init_FileTree = __esm({
|
|
27447
27471
|
"components/core/molecules/FileTree.tsx"() {
|
|
27448
27472
|
"use client";
|
|
@@ -27527,14 +27551,101 @@ var init_FileTree = __esm({
|
|
|
27527
27551
|
)) })
|
|
27528
27552
|
] });
|
|
27529
27553
|
};
|
|
27554
|
+
FlatTreeNodeItem = ({
|
|
27555
|
+
item,
|
|
27556
|
+
depth,
|
|
27557
|
+
indent,
|
|
27558
|
+
childrenByParent,
|
|
27559
|
+
onNodeSelect,
|
|
27560
|
+
defaultExpanded = false
|
|
27561
|
+
}) => {
|
|
27562
|
+
const [expanded, setExpanded] = React87.useState(defaultExpanded || depth < 1);
|
|
27563
|
+
const children = childrenByParent.get(item.id);
|
|
27564
|
+
const hasChildren = !!children && children.length > 0;
|
|
27565
|
+
const handleClick = React87.useCallback(() => {
|
|
27566
|
+
if (hasChildren) setExpanded((prev) => !prev);
|
|
27567
|
+
onNodeSelect?.(item.id);
|
|
27568
|
+
}, [hasChildren, item.id, onNodeSelect]);
|
|
27569
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
27570
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
27571
|
+
Box,
|
|
27572
|
+
{
|
|
27573
|
+
className: "flex items-center gap-1.5 py-0.5 px-2 cursor-pointer rounded-sm transition-colors hover:bg-muted",
|
|
27574
|
+
style: { paddingLeft: depth * indent + 8 },
|
|
27575
|
+
onClick: handleClick,
|
|
27576
|
+
role: "treeitem",
|
|
27577
|
+
"aria-expanded": hasChildren ? expanded : void 0,
|
|
27578
|
+
children: [
|
|
27579
|
+
hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
27580
|
+
Icon,
|
|
27581
|
+
{
|
|
27582
|
+
name: expanded ? "chevron-down" : "chevron-right",
|
|
27583
|
+
size: "xs",
|
|
27584
|
+
className: "text-[var(--color-muted-foreground)] flex-shrink-0"
|
|
27585
|
+
}
|
|
27586
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Box, { style: { width: 12, flexShrink: 0 } }),
|
|
27587
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
27588
|
+
Icon,
|
|
27589
|
+
{
|
|
27590
|
+
name: item.icon ?? (hasChildren ? expanded ? "folder-open" : "folder" : "file"),
|
|
27591
|
+
size: "xs",
|
|
27592
|
+
className: hasChildren ? "text-[var(--color-warning)]" : "text-[var(--color-muted-foreground)]"
|
|
27593
|
+
}
|
|
27594
|
+
),
|
|
27595
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "truncate font-mono text-xs", children: item.label })
|
|
27596
|
+
]
|
|
27597
|
+
}
|
|
27598
|
+
),
|
|
27599
|
+
hasChildren && expanded && /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "group", children: children.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
27600
|
+
FlatTreeNodeItem,
|
|
27601
|
+
{
|
|
27602
|
+
item: child,
|
|
27603
|
+
depth: depth + 1,
|
|
27604
|
+
indent,
|
|
27605
|
+
childrenByParent,
|
|
27606
|
+
onNodeSelect
|
|
27607
|
+
},
|
|
27608
|
+
child.id
|
|
27609
|
+
)) })
|
|
27610
|
+
] });
|
|
27611
|
+
};
|
|
27530
27612
|
FileTree = ({
|
|
27531
27613
|
tree,
|
|
27614
|
+
items,
|
|
27532
27615
|
selectedPath,
|
|
27533
27616
|
onFileSelect,
|
|
27617
|
+
onNodeSelect,
|
|
27534
27618
|
className,
|
|
27535
27619
|
indent = 16
|
|
27536
27620
|
}) => {
|
|
27537
|
-
if (
|
|
27621
|
+
if (items) {
|
|
27622
|
+
if (items.length === 0) return null;
|
|
27623
|
+
const ids = new Set(items.map((node) => node.id));
|
|
27624
|
+
const childrenByParent = /* @__PURE__ */ new Map();
|
|
27625
|
+
const roots = [];
|
|
27626
|
+
for (const item of items) {
|
|
27627
|
+
if (item.parentId && ids.has(item.parentId)) {
|
|
27628
|
+
const siblings = childrenByParent.get(item.parentId);
|
|
27629
|
+
if (siblings) siblings.push(item);
|
|
27630
|
+
else childrenByParent.set(item.parentId, [item]);
|
|
27631
|
+
} else {
|
|
27632
|
+
roots.push(item);
|
|
27633
|
+
}
|
|
27634
|
+
}
|
|
27635
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: roots.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
27636
|
+
FlatTreeNodeItem,
|
|
27637
|
+
{
|
|
27638
|
+
item,
|
|
27639
|
+
depth: 0,
|
|
27640
|
+
indent,
|
|
27641
|
+
childrenByParent,
|
|
27642
|
+
onNodeSelect,
|
|
27643
|
+
defaultExpanded: true
|
|
27644
|
+
},
|
|
27645
|
+
item.id
|
|
27646
|
+
)) });
|
|
27647
|
+
}
|
|
27648
|
+
if (!tree || tree.length === 0) return null;
|
|
27538
27649
|
return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
27539
27650
|
TreeNodeItem,
|
|
27540
27651
|
{
|
|
@@ -28929,7 +29040,7 @@ var init_debug = __esm({
|
|
|
28929
29040
|
logger.createLogger("almadar:ui:debug:game-state");
|
|
28930
29041
|
}
|
|
28931
29042
|
});
|
|
28932
|
-
var isRelationsDebugEnabled, RelationSelect;
|
|
29043
|
+
var isRelationsDebugEnabled, MANY_CARDINALITIES, RelationSelect;
|
|
28933
29044
|
var init_RelationSelect = __esm({
|
|
28934
29045
|
"components/core/molecules/RelationSelect.tsx"() {
|
|
28935
29046
|
"use client";
|
|
@@ -28943,6 +29054,11 @@ var init_RelationSelect = __esm({
|
|
|
28943
29054
|
init_Typography();
|
|
28944
29055
|
init_debug();
|
|
28945
29056
|
isRelationsDebugEnabled = () => isDebugEnabled();
|
|
29057
|
+
MANY_CARDINALITIES = [
|
|
29058
|
+
"many",
|
|
29059
|
+
"one-to-many",
|
|
29060
|
+
"many-to-many"
|
|
29061
|
+
];
|
|
28946
29062
|
RelationSelect = ({
|
|
28947
29063
|
value,
|
|
28948
29064
|
onChange,
|
|
@@ -30607,17 +30723,21 @@ var init_MathCanvas = __esm({
|
|
|
30607
30723
|
error
|
|
30608
30724
|
}) => {
|
|
30609
30725
|
const eventBus = useEventBus();
|
|
30726
|
+
const keyMapKey = keyMap ? JSON.stringify(keyMap) : null;
|
|
30727
|
+
const keyUpMapKey = keyUpMap ? JSON.stringify(keyUpMap) : null;
|
|
30728
|
+
const stableKeyMap = React87.useMemo(() => keyMap, [keyMapKey]);
|
|
30729
|
+
const stableKeyUpMap = React87.useMemo(() => keyUpMap, [keyUpMapKey]);
|
|
30610
30730
|
React87.useEffect(() => {
|
|
30611
|
-
if (!
|
|
30731
|
+
if (!stableKeyMap && !stableKeyUpMap) return;
|
|
30612
30732
|
const onDown = (e) => {
|
|
30613
|
-
const ev =
|
|
30733
|
+
const ev = stableKeyMap?.[e.code];
|
|
30614
30734
|
if (ev) {
|
|
30615
30735
|
eventBus.emit(`UI:${ev}`, {});
|
|
30616
30736
|
e.preventDefault();
|
|
30617
30737
|
}
|
|
30618
30738
|
};
|
|
30619
30739
|
const onUp = (e) => {
|
|
30620
|
-
const ev =
|
|
30740
|
+
const ev = stableKeyUpMap?.[e.code];
|
|
30621
30741
|
if (ev) eventBus.emit(`UI:${ev}`, {});
|
|
30622
30742
|
};
|
|
30623
30743
|
window.addEventListener("keydown", onDown);
|
|
@@ -30626,7 +30746,7 @@ var init_MathCanvas = __esm({
|
|
|
30626
30746
|
window.removeEventListener("keydown", onDown);
|
|
30627
30747
|
window.removeEventListener("keyup", onUp);
|
|
30628
30748
|
};
|
|
30629
|
-
}, [
|
|
30749
|
+
}, [stableKeyMap, stableKeyUpMap, eventBus]);
|
|
30630
30750
|
const derivedShapes = React87.useMemo(() => {
|
|
30631
30751
|
const out = [];
|
|
30632
30752
|
const margin = 24;
|
|
@@ -43063,6 +43183,9 @@ function determineInputType(field) {
|
|
|
43063
43183
|
if (field.type === "relation" || field.relation) {
|
|
43064
43184
|
return "relation";
|
|
43065
43185
|
}
|
|
43186
|
+
if (field.type === "array") {
|
|
43187
|
+
return "array";
|
|
43188
|
+
}
|
|
43066
43189
|
if (field.type === "enum" || field.values || getEnumOptions(field).length > 0) {
|
|
43067
43190
|
return "select";
|
|
43068
43191
|
}
|
|
@@ -43138,6 +43261,7 @@ var init_Form = __esm({
|
|
|
43138
43261
|
init_Typography();
|
|
43139
43262
|
init_Icon();
|
|
43140
43263
|
init_RelationSelect();
|
|
43264
|
+
init_TagInput();
|
|
43141
43265
|
init_UploadDropZone();
|
|
43142
43266
|
init_Alert();
|
|
43143
43267
|
init_useEventBus();
|
|
@@ -43217,7 +43341,7 @@ var init_Form = __esm({
|
|
|
43217
43341
|
values: "values" in f3 ? f3.values : void 0,
|
|
43218
43342
|
min: f3.min,
|
|
43219
43343
|
max: f3.max,
|
|
43220
|
-
relation: "relation" in f3 ? { entity: f3.relation.entity } : void 0
|
|
43344
|
+
relation: "relation" in f3 ? { entity: f3.relation.entity, cardinality: f3.relation.cardinality } : void 0
|
|
43221
43345
|
})
|
|
43222
43346
|
);
|
|
43223
43347
|
}, [entity, fields]);
|
|
@@ -43452,7 +43576,7 @@ var init_Form = __esm({
|
|
|
43452
43576
|
values: "values" in entityField ? entityField.values : void 0,
|
|
43453
43577
|
min: entityField.min,
|
|
43454
43578
|
max: entityField.max,
|
|
43455
|
-
relation: "relation" in entityField ? { entity: entityField.relation.entity } : void 0
|
|
43579
|
+
relation: "relation" in entityField ? { entity: entityField.relation.entity, cardinality: entityField.relation.cardinality } : void 0
|
|
43456
43580
|
};
|
|
43457
43581
|
}
|
|
43458
43582
|
return { name: field, type: "string" };
|
|
@@ -43564,6 +43688,22 @@ var init_Form = __esm({
|
|
|
43564
43688
|
case "relation": {
|
|
43565
43689
|
const relationOptions = relationsData[fieldName] || [];
|
|
43566
43690
|
const relationLoading = relationsLoading[fieldName] || false;
|
|
43691
|
+
if (field.relation?.cardinality !== void 0 && MANY_CARDINALITIES.includes(field.relation.cardinality)) {
|
|
43692
|
+
const selectedValues = Array.isArray(currentValue) ? currentValue.map((v) => String(v)) : [];
|
|
43693
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43694
|
+
Select,
|
|
43695
|
+
{
|
|
43696
|
+
...commonProps,
|
|
43697
|
+
multiple: true,
|
|
43698
|
+
searchable: true,
|
|
43699
|
+
clearable: true,
|
|
43700
|
+
options: [...relationOptions],
|
|
43701
|
+
value: selectedValues,
|
|
43702
|
+
onValueChange: (value) => handleChange(fieldName, Array.isArray(value) ? value : [value]),
|
|
43703
|
+
placeholder: field.placeholder || `Select ${label}...`
|
|
43704
|
+
}
|
|
43705
|
+
);
|
|
43706
|
+
}
|
|
43567
43707
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43568
43708
|
RelationSelect,
|
|
43569
43709
|
{
|
|
@@ -43578,6 +43718,18 @@ var init_Form = __esm({
|
|
|
43578
43718
|
}
|
|
43579
43719
|
);
|
|
43580
43720
|
}
|
|
43721
|
+
case "array": {
|
|
43722
|
+
const arrayValue = Array.isArray(currentValue) ? currentValue.map((v) => String(v)) : currentValue != null && currentValue !== "" ? [String(currentValue)] : [];
|
|
43723
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43724
|
+
TagInput,
|
|
43725
|
+
{
|
|
43726
|
+
placeholder: field.placeholder,
|
|
43727
|
+
disabled: isLoading,
|
|
43728
|
+
value: arrayValue,
|
|
43729
|
+
onChange: (next) => handleChange(fieldName, [...next])
|
|
43730
|
+
}
|
|
43731
|
+
);
|
|
43732
|
+
}
|
|
43581
43733
|
case "number":
|
|
43582
43734
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
43583
43735
|
Input,
|
|
@@ -49127,7 +49279,10 @@ function enrichFormFields(fields, entityDef) {
|
|
|
49127
49279
|
enriched.values = entityField.enumValues;
|
|
49128
49280
|
}
|
|
49129
49281
|
if (entityField.relation) {
|
|
49130
|
-
enriched.relation =
|
|
49282
|
+
enriched.relation = {
|
|
49283
|
+
entity: entityField.relation.entity,
|
|
49284
|
+
cardinality: entityField.relation.cardinality
|
|
49285
|
+
};
|
|
49131
49286
|
}
|
|
49132
49287
|
return enriched;
|
|
49133
49288
|
}
|
|
@@ -49155,7 +49310,10 @@ function enrichFormFields(fields, entityDef) {
|
|
|
49155
49310
|
}
|
|
49156
49311
|
}
|
|
49157
49312
|
if (!obj.relation && entityField.relation) {
|
|
49158
|
-
enriched.relation =
|
|
49313
|
+
enriched.relation = {
|
|
49314
|
+
entity: entityField.relation.entity,
|
|
49315
|
+
cardinality: entityField.relation.cardinality
|
|
49316
|
+
};
|
|
49159
49317
|
}
|
|
49160
49318
|
return enriched;
|
|
49161
49319
|
}
|
|
@@ -49170,7 +49328,12 @@ function enrichDetailFields(fields, entityDef) {
|
|
|
49170
49328
|
const meta = { type: entityField.type };
|
|
49171
49329
|
const values = entityField.values ?? entityField.enumValues;
|
|
49172
49330
|
if (values && values.length > 0) meta.values = values;
|
|
49173
|
-
if (entityField.relation)
|
|
49331
|
+
if (entityField.relation) {
|
|
49332
|
+
meta.relation = {
|
|
49333
|
+
entity: entityField.relation.entity,
|
|
49334
|
+
cardinality: entityField.relation.cardinality
|
|
49335
|
+
};
|
|
49336
|
+
}
|
|
49174
49337
|
return meta;
|
|
49175
49338
|
};
|
|
49176
49339
|
return fields.map((field) => {
|
|
@@ -49724,6 +49887,32 @@ function isPlainConfigObject(value) {
|
|
|
49724
49887
|
const proto = Object.getPrototypeOf(value);
|
|
49725
49888
|
return proto === Object.prototype || proto === null;
|
|
49726
49889
|
}
|
|
49890
|
+
function subtreeHasTraitRef(value) {
|
|
49891
|
+
const cached = traitRefPresenceCache.get(value);
|
|
49892
|
+
if (cached !== void 0) return cached;
|
|
49893
|
+
let found = false;
|
|
49894
|
+
const children = Array.isArray(value) ? value : Object.values(value);
|
|
49895
|
+
for (const child of children) {
|
|
49896
|
+
if (typeof child === "string" && TRAIT_BINDING_RE.test(child)) {
|
|
49897
|
+
found = true;
|
|
49898
|
+
break;
|
|
49899
|
+
}
|
|
49900
|
+
if (core.isRenderBindingMarker(child)) continue;
|
|
49901
|
+
if (Array.isArray(child)) {
|
|
49902
|
+
if (subtreeHasTraitRef(child)) {
|
|
49903
|
+
found = true;
|
|
49904
|
+
break;
|
|
49905
|
+
}
|
|
49906
|
+
} else if (child !== null && typeof child === "object" && isPlainConfigObject(child)) {
|
|
49907
|
+
if (subtreeHasTraitRef(child)) {
|
|
49908
|
+
found = true;
|
|
49909
|
+
break;
|
|
49910
|
+
}
|
|
49911
|
+
}
|
|
49912
|
+
}
|
|
49913
|
+
traitRefPresenceCache.set(value, found);
|
|
49914
|
+
return found;
|
|
49915
|
+
}
|
|
49727
49916
|
function substituteTraitRefsDeep(value, pathKey) {
|
|
49728
49917
|
if (core.isRenderBindingMarker(value)) return value;
|
|
49729
49918
|
if (typeof value === "string") {
|
|
@@ -49738,11 +49927,13 @@ function substituteTraitRefsDeep(value, pathKey) {
|
|
|
49738
49927
|
return value;
|
|
49739
49928
|
}
|
|
49740
49929
|
if (Array.isArray(value)) {
|
|
49930
|
+
if (!subtreeHasTraitRef(value)) return value;
|
|
49741
49931
|
return value.map(
|
|
49742
49932
|
(item, i) => substituteTraitRefsDeep(item, `${pathKey}[${i}]`)
|
|
49743
49933
|
);
|
|
49744
49934
|
}
|
|
49745
49935
|
if (typeof value === "object" && isPlainConfigObject(value)) {
|
|
49936
|
+
if (!subtreeHasTraitRef(value)) return value;
|
|
49746
49937
|
const out = {};
|
|
49747
49938
|
for (const [k, v] of Object.entries(value)) {
|
|
49748
49939
|
out[k] = substituteTraitRefsDeep(v, `${pathKey}.${k}`);
|
|
@@ -50031,7 +50222,7 @@ function UISlotRenderer({
|
|
|
50031
50222
|
}
|
|
50032
50223
|
return wrapped;
|
|
50033
50224
|
}
|
|
50034
|
-
var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, SELF_OVERLAY_PATTERNS, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN;
|
|
50225
|
+
var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, SELF_OVERLAY_PATTERNS, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
|
|
50035
50226
|
var init_UISlotRenderer = __esm({
|
|
50036
50227
|
"components/core/organisms/UISlotRenderer.tsx"() {
|
|
50037
50228
|
"use client";
|
|
@@ -50105,6 +50296,7 @@ var init_UISlotRenderer = __esm({
|
|
|
50105
50296
|
"alert",
|
|
50106
50297
|
"dialog"
|
|
50107
50298
|
]);
|
|
50299
|
+
traitRefPresenceCache = /* @__PURE__ */ new WeakMap();
|
|
50108
50300
|
UISlotRenderer.displayName = "UISlotRenderer";
|
|
50109
50301
|
}
|
|
50110
50302
|
});
|
|
@@ -51297,8 +51489,8 @@ function createHttpTransport(serverUrl) {
|
|
|
51297
51489
|
} catch {
|
|
51298
51490
|
}
|
|
51299
51491
|
},
|
|
51300
|
-
sendEvent: async (orbitalName, event, payload, clientId) => {
|
|
51301
|
-
const body = { event, payload, clientId };
|
|
51492
|
+
sendEvent: async (orbitalName, event, payload, clientId, tick, sourceTrait) => {
|
|
51493
|
+
const body = { event, payload, clientId, tick, sourceTrait };
|
|
51302
51494
|
const res = await fetch(`${serverUrl}/${orbitalName}/events`, {
|
|
51303
51495
|
method: "POST",
|
|
51304
51496
|
headers: { "Content-Type": "application/json" },
|
|
@@ -51343,12 +51535,15 @@ function ServerBridgeProvider({
|
|
|
51343
51535
|
async () => transport.unregister(),
|
|
51344
51536
|
[transport]
|
|
51345
51537
|
);
|
|
51346
|
-
const sendEvent = React87.useCallback(async (orbitalName, event, payload) => {
|
|
51538
|
+
const sendEvent = React87.useCallback(async (orbitalName, event, payload, tick, sourceTrait) => {
|
|
51347
51539
|
const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
|
|
51348
51540
|
if (!connected) return { effects: [], meta: emptyMeta };
|
|
51349
51541
|
try {
|
|
51350
|
-
const result = await transport.sendEvent(orbitalName, event, payload, getTabClientId());
|
|
51542
|
+
const result = await transport.sendEvent(orbitalName, event, payload, getTabClientId(), tick, sourceTrait);
|
|
51351
51543
|
const effects = [];
|
|
51544
|
+
if (tick !== void 0) {
|
|
51545
|
+
return { effects, meta: { ...emptyMeta, success: !!result.success, error: result.error } };
|
|
51546
|
+
}
|
|
51352
51547
|
const responseData = result.data || {};
|
|
51353
51548
|
const dataEntities = {};
|
|
51354
51549
|
for (const [entityName, records] of Object.entries(responseData)) {
|
|
@@ -3,7 +3,7 @@ import { EntityRow, SExpr } from '@almadar/core';
|
|
|
3
3
|
export { ANONYMOUS_USER } from '@almadar/core';
|
|
4
4
|
import { U as UIThemeDefinition, j as UserData } from '../UserContext-g_LcDiGN.cjs';
|
|
5
5
|
export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as CurrentPagePathProviderProps, d as DesignThemeProvider, O as OrbitalThemeProvider, e as OrbitalThemeProviderProps, h as UserContext, i as UserContextValue, k as UserProvider, l as UserProviderProps, u as useCurrentPagePath, m as useDesignTheme, n as useHasPermission, o as useHasRole, q as useUser, r as useUserForEvaluation } from '../UserContext-g_LcDiGN.cjs';
|
|
6
|
-
export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-
|
|
6
|
+
export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-Bn3ePJQC.cjs';
|
|
7
7
|
import { j as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-QUdKOj7f.cjs';
|
|
8
8
|
export { c as NavigationContextValue, d as NavigationProvider, e as NavigationProviderProps, f as NavigationState, k as comparePathSpecificity, m as extractRouteParams, n as findPageByName, o as findPageByPath, p as getAllPages, q as getDefaultPage, r as matchPath, s as matchPathAmong, t as pathMatches, u as useActivePage, v as useInitPayload, w as useNavigateTo, x as useNavigation, y as useNavigationId, z as useNavigationState } from '../offline-executor-QUdKOj7f.cjs';
|
|
9
9
|
import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.cjs';
|
|
@@ -3,7 +3,7 @@ import { EntityRow, SExpr } from '@almadar/core';
|
|
|
3
3
|
export { ANONYMOUS_USER } from '@almadar/core';
|
|
4
4
|
import { U as UIThemeDefinition, j as UserData } from '../UserContext-g_LcDiGN.js';
|
|
5
5
|
export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as CurrentPagePathProviderProps, d as DesignThemeProvider, O as OrbitalThemeProvider, e as OrbitalThemeProviderProps, h as UserContext, i as UserContextValue, k as UserProvider, l as UserProviderProps, u as useCurrentPagePath, m as useDesignTheme, n as useHasPermission, o as useHasRole, q as useUser, r as useUserForEvaluation } from '../UserContext-g_LcDiGN.js';
|
|
6
|
-
export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-
|
|
6
|
+
export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-Bn3ePJQC.js';
|
|
7
7
|
import { j as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-QUdKOj7f.js';
|
|
8
8
|
export { c as NavigationContextValue, d as NavigationProvider, e as NavigationProviderProps, f as NavigationState, k as comparePathSpecificity, m as extractRouteParams, n as findPageByName, o as findPageByPath, p as getAllPages, q as getDefaultPage, r as matchPath, s as matchPathAmong, t as pathMatches, u as useActivePage, v as useInitPayload, w as useNavigateTo, x as useNavigation, y as useNavigationId, z as useNavigationState } from '../offline-executor-QUdKOj7f.js';
|
|
9
9
|
import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.js';
|