@almadar/ui 6.23.0 → 6.25.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/avl/index.cjs +98 -55
- package/dist/avl/index.js +99 -56
- package/dist/runtime/index.cjs +108 -65
- package/dist/runtime/index.js +108 -65
- package/package.json +1 -1
package/dist/avl/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import ELK from 'elkjs/lib/elk.bundled.js';
|
|
|
7
7
|
import { MarkerType, useReactFlow, Handle, Position, getBezierPath, EdgeLabelRenderer, useNodeId, ReactFlowProvider, BaseEdge, useNodesState, useEdgesState, ReactFlow, Controls, Background, BackgroundVariant } from '@xyflow/react';
|
|
8
8
|
import { useTranslate } from '@almadar/ui/hooks';
|
|
9
9
|
import { InMemoryPersistence, StateMachineManager, collectDeclaredConfigDefaults, createServerEffectHandlers, EffectExecutor, LIFECYCLE_EVENTS, createContextFromBindings, createTickScheduler, isValidCronExpression, parseDurationString, normalizeCallSiteConfigToValues, interpolateValue } from '@almadar/runtime';
|
|
10
|
-
import { FieldTypeSchema, isInlineTrait, isPageReference, buildResolvedTraitConfigs, collectCallsiteCaptureChildren, schemaToIR, getPage, mergeEntityFrame, isCircuitEvent, applyListenPayloadMapping, walkSExpr, isRenderBindingMarker, containsEntityBinding, isSExpr, isEventPayloadValue, RENDER_BINDING_MARKER, getNestedValue, isFileValue } from '@almadar/core';
|
|
10
|
+
import { UI_SLOTS, FieldTypeSchema, isInlineTrait, isPageReference, buildResolvedTraitConfigs, collectCallsiteCaptureChildren, schemaToIR, getPage, mergeEntityFrame, isCircuitEvent, applyListenPayloadMapping, walkSExpr, isRenderBindingMarker, containsEntityBinding, isSExpr, isEventPayloadValue, RENDER_BINDING_MARKER, getNestedValue, isFileValue } from '@almadar/core';
|
|
11
11
|
import * as LucideIcons2 from 'lucide-react';
|
|
12
12
|
import { Loader2, X, Code, FileText, WrapText, Check, Copy, Lightbulb, CheckCircle, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, RotateCcw, Play, Terminal, XCircle, AlertTriangle, Trash2, Link2, ArrowLeft, ZoomOut, ZoomIn, Download, DollarSign, ChevronDown, Menu as Menu$1, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, HelpCircle, PauseCircle, Search, Bold, Italic, Underline, Strikethrough, Heading1, Heading2, Heading3, ListOrdered, Quote, Link as Link$1, Minus, Eraser, TrendingUp, TrendingDown, AlertCircle, Circle, Clock, CheckCircle2, ChevronUp } from 'lucide-react';
|
|
13
13
|
import { createPortal } from 'react-dom';
|
|
@@ -37264,13 +37264,13 @@ var init_MapView = __esm({
|
|
|
37264
37264
|
shadowSize: [41, 41]
|
|
37265
37265
|
});
|
|
37266
37266
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
37267
|
-
const { useEffect:
|
|
37267
|
+
const { useEffect: useEffect72, useRef: useRef71, useCallback: useCallback102, useState: useState110 } = React96__default;
|
|
37268
37268
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
37269
37269
|
const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
37270
37270
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
37271
37271
|
const map = useMap();
|
|
37272
|
-
const prevRef =
|
|
37273
|
-
|
|
37272
|
+
const prevRef = useRef71({ centerLat, centerLng, zoom });
|
|
37273
|
+
useEffect72(() => {
|
|
37274
37274
|
const prev = prevRef.current;
|
|
37275
37275
|
if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
|
|
37276
37276
|
map.setView([centerLat, centerLng], zoom);
|
|
@@ -37281,7 +37281,7 @@ var init_MapView = __esm({
|
|
|
37281
37281
|
}
|
|
37282
37282
|
function MapClickHandler({ onMapClick }) {
|
|
37283
37283
|
const map = useMap();
|
|
37284
|
-
|
|
37284
|
+
useEffect72(() => {
|
|
37285
37285
|
if (!onMapClick) return;
|
|
37286
37286
|
const handler = (e) => {
|
|
37287
37287
|
onMapClick(e.latlng.lat, e.latlng.lng);
|
|
@@ -37309,8 +37309,8 @@ var init_MapView = __esm({
|
|
|
37309
37309
|
showAttribution = true
|
|
37310
37310
|
}) {
|
|
37311
37311
|
const eventBus = useEventBus2();
|
|
37312
|
-
const [clickedPosition, setClickedPosition] =
|
|
37313
|
-
const handleMapClick =
|
|
37312
|
+
const [clickedPosition, setClickedPosition] = useState110(null);
|
|
37313
|
+
const handleMapClick = useCallback102((lat, lng) => {
|
|
37314
37314
|
if (showClickedPin) {
|
|
37315
37315
|
setClickedPosition({ lat, lng });
|
|
37316
37316
|
}
|
|
@@ -37319,7 +37319,7 @@ var init_MapView = __esm({
|
|
|
37319
37319
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
37320
37320
|
}
|
|
37321
37321
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
37322
|
-
const handleMarkerClick =
|
|
37322
|
+
const handleMarkerClick = useCallback102((marker) => {
|
|
37323
37323
|
onMarkerClick?.(marker);
|
|
37324
37324
|
if (markerClickEvent) {
|
|
37325
37325
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -51635,7 +51635,7 @@ function getAllEvents(traits2) {
|
|
|
51635
51635
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
51636
51636
|
const eventBus = useEventBus();
|
|
51637
51637
|
const { t } = useTranslate();
|
|
51638
|
-
const [
|
|
51638
|
+
const [log13, setLog] = React96.useState([]);
|
|
51639
51639
|
const prevStatesRef = React96.useRef(/* @__PURE__ */ new Map());
|
|
51640
51640
|
React96.useEffect(() => {
|
|
51641
51641
|
for (const trait of traits2) {
|
|
@@ -51699,9 +51699,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
|
|
|
51699
51699
|
/* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-muted-foreground mb-1", children: t("debug.otherEvents") }),
|
|
51700
51700
|
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
|
|
51701
51701
|
] }),
|
|
51702
|
-
|
|
51702
|
+
log13.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
51703
51703
|
/* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-muted-foreground mb-1", children: t("debug.recentTransitions") }),
|
|
51704
|
-
/* @__PURE__ */ jsx(Stack, { gap: "xs", children:
|
|
51704
|
+
/* @__PURE__ */ jsx(Stack, { gap: "xs", children: log13.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
|
|
51705
51705
|
/* @__PURE__ */ jsx("span", { className: "text-primary", children: entry.traitName }),
|
|
51706
51706
|
" ",
|
|
51707
51707
|
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: entry.from }),
|
|
@@ -58996,7 +58996,25 @@ function convertFnFormLambdasInProps(props) {
|
|
|
58996
58996
|
|
|
58997
58997
|
// hooks/index.ts
|
|
58998
58998
|
init_useEventBus();
|
|
58999
|
-
|
|
58999
|
+
createLogger("almadar:ui:ui-slots");
|
|
59000
|
+
var ALL_SLOTS2 = UI_SLOTS.filter(
|
|
59001
|
+
(slot) => !slot.includes(".") && slot !== "hud" && slot !== "screen"
|
|
59002
|
+
);
|
|
59003
|
+
ALL_SLOTS2.reduce(
|
|
59004
|
+
(acc, slot) => {
|
|
59005
|
+
acc[slot] = null;
|
|
59006
|
+
return acc;
|
|
59007
|
+
},
|
|
59008
|
+
{}
|
|
59009
|
+
);
|
|
59010
|
+
ALL_SLOTS2.reduce(
|
|
59011
|
+
(acc, slot) => {
|
|
59012
|
+
acc[slot] = {};
|
|
59013
|
+
return acc;
|
|
59014
|
+
},
|
|
59015
|
+
{}
|
|
59016
|
+
);
|
|
59017
|
+
var log9 = createLogger("almadar:ui:shared-entity-store");
|
|
59000
59018
|
var EMPTY_ENTITY_STATE = {};
|
|
59001
59019
|
function createSharedEntityStore() {
|
|
59002
59020
|
const states = /* @__PURE__ */ new Map();
|
|
@@ -59026,7 +59044,7 @@ function createSharedEntityStore() {
|
|
|
59026
59044
|
try {
|
|
59027
59045
|
callback();
|
|
59028
59046
|
} catch (error) {
|
|
59029
|
-
|
|
59047
|
+
log9.error("Shared entity subscriber error", {
|
|
59030
59048
|
entityId,
|
|
59031
59049
|
error: error instanceof Error ? error : String(error)
|
|
59032
59050
|
});
|
|
@@ -59057,7 +59075,7 @@ function runTickFrame(entityId, orderedWriters, store) {
|
|
|
59057
59075
|
store.commit(entityId, scratch);
|
|
59058
59076
|
return scratch;
|
|
59059
59077
|
}
|
|
59060
|
-
var
|
|
59078
|
+
var log10 = createLogger("almadar:ui:effects:client-handlers");
|
|
59061
59079
|
function createClientEffectHandlers(options) {
|
|
59062
59080
|
const { eventBus, slotSetter, navigate, navigateBack, callService, liveEntity, persistDelegated, callServiceDelegated } = options;
|
|
59063
59081
|
return {
|
|
@@ -59066,7 +59084,7 @@ function createClientEffectHandlers(options) {
|
|
|
59066
59084
|
eventBus.emit(prefixedEvent, payload, source);
|
|
59067
59085
|
},
|
|
59068
59086
|
persist: async () => {
|
|
59069
|
-
|
|
59087
|
+
log10.debug("persist is server-side only, ignored on client");
|
|
59070
59088
|
},
|
|
59071
59089
|
// Bridge mode: the server runs every persist and the response
|
|
59072
59090
|
// carries its outcome — tell the executor so the placeholder above is
|
|
@@ -59076,7 +59094,7 @@ function createClientEffectHandlers(options) {
|
|
|
59076
59094
|
// @almadar/runtime EffectHandlers.set types value:unknown — should be FieldValue (upstream fix queued)
|
|
59077
59095
|
set: ((_entityId, field, value) => {
|
|
59078
59096
|
if (!liveEntity) {
|
|
59079
|
-
|
|
59097
|
+
log10.warn("set is server-side only, ignored on client (no live entity)");
|
|
59080
59098
|
return;
|
|
59081
59099
|
}
|
|
59082
59100
|
liveEntity[field] = value;
|
|
@@ -59112,10 +59130,10 @@ function createClientEffectHandlers(options) {
|
|
|
59112
59130
|
window.location.href = path;
|
|
59113
59131
|
return;
|
|
59114
59132
|
}
|
|
59115
|
-
|
|
59133
|
+
log10.warn("No navigate handler, ignoring", { path });
|
|
59116
59134
|
}),
|
|
59117
59135
|
navigateBack: navigateBack ?? (() => {
|
|
59118
|
-
|
|
59136
|
+
log10.warn("No navigate-back handler, ignoring");
|
|
59119
59137
|
})
|
|
59120
59138
|
};
|
|
59121
59139
|
}
|
|
@@ -59197,6 +59215,13 @@ function effectsCallOp(effects, ops) {
|
|
|
59197
59215
|
}
|
|
59198
59216
|
return false;
|
|
59199
59217
|
}
|
|
59218
|
+
function diffDroppedTraitNames(prev, next) {
|
|
59219
|
+
const dropped = [];
|
|
59220
|
+
for (const name of prev) {
|
|
59221
|
+
if (!next.has(name)) dropped.push(name);
|
|
59222
|
+
}
|
|
59223
|
+
return dropped;
|
|
59224
|
+
}
|
|
59200
59225
|
function classifySharedTick(tick) {
|
|
59201
59226
|
const writes = effectsCallOp(tick.effects, SHARED_ENTITY_WRITE_OPS);
|
|
59202
59227
|
const renders = effectsCallOp(tick.effects, SHARED_ENTITY_RENDER_OPS);
|
|
@@ -59399,6 +59424,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59399
59424
|
const uiSlotsRef = useRef(uiSlots);
|
|
59400
59425
|
const embeddedTraitsRef = useRef(options?.embeddedTraits);
|
|
59401
59426
|
const optionsRef = useRef(options);
|
|
59427
|
+
const prevActiveTraitNamesRef = useRef(/* @__PURE__ */ new Set());
|
|
59402
59428
|
useEffect(() => {
|
|
59403
59429
|
traitBindingsRef.current = traitBindings;
|
|
59404
59430
|
}, [traitBindings]);
|
|
@@ -59527,6 +59553,18 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59527
59553
|
};
|
|
59528
59554
|
}, [traitBindings]);
|
|
59529
59555
|
useEffect(() => {
|
|
59556
|
+
const nextActiveTraitNames = new Set(
|
|
59557
|
+
traitBindings.map((b) => b.trait.name).filter((n) => !!n)
|
|
59558
|
+
);
|
|
59559
|
+
const dropped = diffDroppedTraitNames(prevActiveTraitNamesRef.current, nextActiveTraitNames);
|
|
59560
|
+
if (dropped.length > 0) {
|
|
59561
|
+
for (const traitName of dropped) {
|
|
59562
|
+
for (const slot of ALL_SLOTS2) {
|
|
59563
|
+
uiSlotsRef.current.clearBySource(slot, traitName);
|
|
59564
|
+
}
|
|
59565
|
+
}
|
|
59566
|
+
}
|
|
59567
|
+
prevActiveTraitNamesRef.current = nextActiveTraitNames;
|
|
59530
59568
|
const newManager = managerRef.current;
|
|
59531
59569
|
newManager.resetAll();
|
|
59532
59570
|
setTraitStates(newManager.getAllStates());
|
|
@@ -59574,7 +59612,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59574
59612
|
};
|
|
59575
59613
|
}, [traitBindings]);
|
|
59576
59614
|
const executeTransitionEffects = useCallback(async (params) => {
|
|
59577
|
-
const { binding, previousState, newState, payload, flushEvent, syncOnly, log:
|
|
59615
|
+
const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log13, callsitePayload } = params;
|
|
59578
59616
|
const traitName = binding.trait.name;
|
|
59579
59617
|
const linkedEntity = binding.linkedEntity || "";
|
|
59580
59618
|
const entityId = payload?.entityId;
|
|
@@ -59711,7 +59749,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59711
59749
|
if (sharedKey !== void 0) {
|
|
59712
59750
|
sharedWrites.push({ field, value });
|
|
59713
59751
|
}
|
|
59714
|
-
|
|
59752
|
+
log13.debug("set:write", {
|
|
59715
59753
|
traitName,
|
|
59716
59754
|
field,
|
|
59717
59755
|
value: JSON.stringify(value),
|
|
@@ -59783,7 +59821,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59783
59821
|
mergeEntityFrame(sharedEntityStore.getSnapshot(sharedKey), sharedWrites)
|
|
59784
59822
|
);
|
|
59785
59823
|
}
|
|
59786
|
-
|
|
59824
|
+
log13.debug("effects:executed", () => ({
|
|
59787
59825
|
traitName,
|
|
59788
59826
|
transition: `${previousState}->${newState}`,
|
|
59789
59827
|
event: flushEvent,
|
|
@@ -59792,26 +59830,31 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59792
59830
|
entityAfter: JSON.stringify(liveEntity ?? {}),
|
|
59793
59831
|
slotsTouched: Array.from(pendingSlots.keys()).join(",")
|
|
59794
59832
|
}));
|
|
59795
|
-
|
|
59796
|
-
|
|
59797
|
-
|
|
59798
|
-
|
|
59799
|
-
|
|
59800
|
-
|
|
59801
|
-
|
|
59802
|
-
|
|
59803
|
-
|
|
59804
|
-
|
|
59805
|
-
|
|
59806
|
-
|
|
59807
|
-
|
|
59808
|
-
|
|
59833
|
+
const stillActive = traitBindingsRef.current.some((b) => b.trait.name === traitName);
|
|
59834
|
+
if (!stillActive) {
|
|
59835
|
+
log13.debug("flush:skip-stale-navigation", { traitName, event: flushEvent });
|
|
59836
|
+
} else {
|
|
59837
|
+
for (const [slot, patterns] of pendingSlots) {
|
|
59838
|
+
log13.debug("flush:slot", {
|
|
59839
|
+
traitName,
|
|
59840
|
+
slot,
|
|
59841
|
+
patternCount: patterns.length,
|
|
59842
|
+
event: flushEvent,
|
|
59843
|
+
transition: `${previousState}->${newState}`,
|
|
59844
|
+
cleared: patterns.length === 0
|
|
59845
|
+
});
|
|
59846
|
+
flushSlot(traitName, slot, patterns, {
|
|
59847
|
+
event: flushEvent,
|
|
59848
|
+
state: previousState,
|
|
59849
|
+
entity: binding.linkedEntity
|
|
59850
|
+
});
|
|
59851
|
+
}
|
|
59809
59852
|
}
|
|
59810
59853
|
if (didWrite && sharedKey === void 0) {
|
|
59811
59854
|
publishBindingSnapshot(traitName, liveEntity);
|
|
59812
59855
|
}
|
|
59813
59856
|
} catch (error) {
|
|
59814
|
-
|
|
59857
|
+
log13.error("effects:error", {
|
|
59815
59858
|
traitName,
|
|
59816
59859
|
transition: `${previousState}->${newState}`,
|
|
59817
59860
|
event: flushEvent,
|
|
@@ -59821,7 +59864,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59821
59864
|
}
|
|
59822
59865
|
return { emitted: emittedDuringExec, serverEffectResults };
|
|
59823
59866
|
}, [eventBus, flushSlot, sharedEntityStore, publishBindingSnapshot, orbitalsByTrait, viewer]);
|
|
59824
|
-
const reRenderCallsiteCaptureChildren = useCallback(async (traitName, callsitePayload, entityByTrait,
|
|
59867
|
+
const reRenderCallsiteCaptureChildren = useCallback(async (traitName, callsitePayload, entityByTrait, log13, visited = /* @__PURE__ */ new Set()) => {
|
|
59825
59868
|
const children = callsiteCaptureChildrenByTrait?.get(traitName);
|
|
59826
59869
|
if (!children || children.size === 0) return;
|
|
59827
59870
|
const mgr = managerRef.current;
|
|
@@ -59835,7 +59878,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59835
59878
|
if (lifecycleEvent === void 0) continue;
|
|
59836
59879
|
const [entry] = mgr.sendEvent(lifecycleEvent, {}, void 0, entityByTrait, void 0, childName);
|
|
59837
59880
|
if (!entry || !entry.result.executed) continue;
|
|
59838
|
-
|
|
59881
|
+
log13.debug("callsite-capture-child:rerender", {
|
|
59839
59882
|
referrer: traitName,
|
|
59840
59883
|
child: childName,
|
|
59841
59884
|
lifecycleEvent,
|
|
@@ -59849,10 +59892,10 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59849
59892
|
payload: {},
|
|
59850
59893
|
flushEvent: lifecycleEvent,
|
|
59851
59894
|
syncOnly: false,
|
|
59852
|
-
log:
|
|
59895
|
+
log: log13,
|
|
59853
59896
|
callsitePayload
|
|
59854
59897
|
});
|
|
59855
|
-
await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait,
|
|
59898
|
+
await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait, log13, visited);
|
|
59856
59899
|
}
|
|
59857
59900
|
}, [callsiteCaptureChildrenByTrait, executeTransitionEffects]);
|
|
59858
59901
|
const runTickEffects = useCallback((tick, binding) => {
|
|
@@ -61076,7 +61119,7 @@ init_useEventBus();
|
|
|
61076
61119
|
// components/avl/hooks/useCanvasDnd.tsx
|
|
61077
61120
|
init_useEventBus();
|
|
61078
61121
|
init_useAlmadarDndCollision();
|
|
61079
|
-
var
|
|
61122
|
+
var log11 = createLogger("almadar:ui:canvas-dnd");
|
|
61080
61123
|
function useCanvasDraggable({
|
|
61081
61124
|
id,
|
|
61082
61125
|
payload,
|
|
@@ -61114,7 +61157,7 @@ function defaultEmit(eventBus, drop) {
|
|
|
61114
61157
|
if (payload.kind === "pattern") {
|
|
61115
61158
|
const patternType = payload.data["type"];
|
|
61116
61159
|
if (typeof patternType !== "string") {
|
|
61117
|
-
|
|
61160
|
+
log11.warn("default-emit:pattern:missing-type");
|
|
61118
61161
|
return;
|
|
61119
61162
|
}
|
|
61120
61163
|
const out = { patternType, containerNode: target.containerNode };
|
|
@@ -61123,26 +61166,26 @@ function defaultEmit(eventBus, drop) {
|
|
|
61123
61166
|
out.index = resolved.index;
|
|
61124
61167
|
}
|
|
61125
61168
|
eventBus.emit("UI:PATTERN_DROP", out);
|
|
61126
|
-
|
|
61169
|
+
log11.info("default-emit:pattern", { patternType, level: target.level });
|
|
61127
61170
|
return;
|
|
61128
61171
|
}
|
|
61129
61172
|
if (payload.kind === "behavior") {
|
|
61130
61173
|
const behaviorName = payload.data["name"];
|
|
61131
61174
|
if (typeof behaviorName !== "string") {
|
|
61132
|
-
|
|
61175
|
+
log11.warn("default-emit:behavior:missing-name");
|
|
61133
61176
|
return;
|
|
61134
61177
|
}
|
|
61135
61178
|
eventBus.emit("UI:BEHAVIOR_DROP", {
|
|
61136
61179
|
behaviorName,
|
|
61137
61180
|
containerNode: target.containerNode
|
|
61138
61181
|
});
|
|
61139
|
-
|
|
61182
|
+
log11.info("default-emit:behavior", { behaviorName, level: target.level });
|
|
61140
61183
|
return;
|
|
61141
61184
|
}
|
|
61142
61185
|
if (payload.kind === "pattern-instance") {
|
|
61143
61186
|
const fromPath = payload.data["fromPath"];
|
|
61144
61187
|
if (typeof fromPath !== "string") {
|
|
61145
|
-
|
|
61188
|
+
log11.warn("default-emit:pattern-instance:missing-fromPath");
|
|
61146
61189
|
return;
|
|
61147
61190
|
}
|
|
61148
61191
|
const out = { fromPath, loc: payload.data["loc"] };
|
|
@@ -61151,10 +61194,10 @@ function defaultEmit(eventBus, drop) {
|
|
|
61151
61194
|
out.toIndex = resolved.index;
|
|
61152
61195
|
}
|
|
61153
61196
|
eventBus.emit("UI:PATTERN_MOVE", out);
|
|
61154
|
-
|
|
61197
|
+
log11.info("default-emit:pattern-instance", { fromPath, level: target.level });
|
|
61155
61198
|
return;
|
|
61156
61199
|
}
|
|
61157
|
-
|
|
61200
|
+
log11.debug("default-emit:unhandled-kind", { kind: payload.kind });
|
|
61158
61201
|
}
|
|
61159
61202
|
function CanvasDndProvider({
|
|
61160
61203
|
children,
|
|
@@ -61177,9 +61220,9 @@ function CanvasDndProvider({
|
|
|
61177
61220
|
if (payload) {
|
|
61178
61221
|
setActivePayload(payload);
|
|
61179
61222
|
eventBus.emit("UI:DRAG_START", { kind: payload.kind, data: payload.data });
|
|
61180
|
-
|
|
61223
|
+
log11.info("dragStart", { id: e.active.id, kind: payload.kind });
|
|
61181
61224
|
} else {
|
|
61182
|
-
|
|
61225
|
+
log11.warn("dragStart:missing-payload", { id: e.active.id });
|
|
61183
61226
|
}
|
|
61184
61227
|
}, [eventBus, trackPointer]);
|
|
61185
61228
|
const handleDragEnd = React96__default.useCallback((e) => {
|
|
@@ -61190,7 +61233,7 @@ function CanvasDndProvider({
|
|
|
61190
61233
|
const overData = e.over?.data.current;
|
|
61191
61234
|
const target = overData?.target;
|
|
61192
61235
|
const accepts = overData?.accepts;
|
|
61193
|
-
|
|
61236
|
+
log11.info("dragEnd", {
|
|
61194
61237
|
activeId: e.active.id,
|
|
61195
61238
|
overId: e.over?.id,
|
|
61196
61239
|
hasPayload: !!payload,
|
|
@@ -61202,12 +61245,12 @@ function CanvasDndProvider({
|
|
|
61202
61245
|
}
|
|
61203
61246
|
if (!payload || !target) return;
|
|
61204
61247
|
if (accepts && !accepts.includes(payload.kind)) {
|
|
61205
|
-
|
|
61248
|
+
log11.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
|
|
61206
61249
|
return;
|
|
61207
61250
|
}
|
|
61208
61251
|
const cursor = lastPointerRef.current;
|
|
61209
61252
|
const resolved = target.resolvePath && cursor ? target.resolvePath(cursor) : null;
|
|
61210
|
-
|
|
61253
|
+
log11.debug("dragEnd:resolve", {
|
|
61211
61254
|
hasResolver: !!target.resolvePath,
|
|
61212
61255
|
cursorX: cursor?.x,
|
|
61213
61256
|
cursorY: cursor?.y,
|
|
@@ -61221,7 +61264,7 @@ function CanvasDndProvider({
|
|
|
61221
61264
|
const handleDragCancel = React96__default.useCallback(() => {
|
|
61222
61265
|
setActivePayload(null);
|
|
61223
61266
|
document.removeEventListener("pointermove", trackPointer);
|
|
61224
|
-
|
|
61267
|
+
log11.info("dragCancel");
|
|
61225
61268
|
}, [trackPointer]);
|
|
61226
61269
|
return /* @__PURE__ */ jsxs(
|
|
61227
61270
|
DndContext,
|
|
@@ -63280,7 +63323,7 @@ init_AvlTransitionLane();
|
|
|
63280
63323
|
init_AvlSwimLane();
|
|
63281
63324
|
init_avl_atom_types();
|
|
63282
63325
|
init_avl_elk_layout();
|
|
63283
|
-
var
|
|
63326
|
+
var log12 = createLogger("almadar:ui:avl:trait-scene");
|
|
63284
63327
|
var SWIM_GUTTER2 = 120;
|
|
63285
63328
|
var CENTER_W2 = 360;
|
|
63286
63329
|
var AvlTraitScene = ({
|
|
@@ -63293,7 +63336,7 @@ var AvlTraitScene = ({
|
|
|
63293
63336
|
const dataKey = useMemo(() => JSON.stringify(data), [data]);
|
|
63294
63337
|
useEffect(() => {
|
|
63295
63338
|
computeTraitLayout(data).then(setLayout).catch((error) => {
|
|
63296
|
-
|
|
63339
|
+
log12.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
|
|
63297
63340
|
});
|
|
63298
63341
|
}, [dataKey]);
|
|
63299
63342
|
if (!layout) {
|