@almadar/ui 6.23.0 → 6.24.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 +80 -42
- package/dist/avl/index.js +81 -43
- package/dist/runtime/index.cjs +90 -52
- package/dist/runtime/index.js +90 -52
- 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,
|
|
@@ -59793,7 +59831,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59793
59831
|
slotsTouched: Array.from(pendingSlots.keys()).join(",")
|
|
59794
59832
|
}));
|
|
59795
59833
|
for (const [slot, patterns] of pendingSlots) {
|
|
59796
|
-
|
|
59834
|
+
log13.debug("flush:slot", {
|
|
59797
59835
|
traitName,
|
|
59798
59836
|
slot,
|
|
59799
59837
|
patternCount: patterns.length,
|
|
@@ -59811,7 +59849,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59811
59849
|
publishBindingSnapshot(traitName, liveEntity);
|
|
59812
59850
|
}
|
|
59813
59851
|
} catch (error) {
|
|
59814
|
-
|
|
59852
|
+
log13.error("effects:error", {
|
|
59815
59853
|
traitName,
|
|
59816
59854
|
transition: `${previousState}->${newState}`,
|
|
59817
59855
|
event: flushEvent,
|
|
@@ -59821,7 +59859,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59821
59859
|
}
|
|
59822
59860
|
return { emitted: emittedDuringExec, serverEffectResults };
|
|
59823
59861
|
}, [eventBus, flushSlot, sharedEntityStore, publishBindingSnapshot, orbitalsByTrait, viewer]);
|
|
59824
|
-
const reRenderCallsiteCaptureChildren = useCallback(async (traitName, callsitePayload, entityByTrait,
|
|
59862
|
+
const reRenderCallsiteCaptureChildren = useCallback(async (traitName, callsitePayload, entityByTrait, log13, visited = /* @__PURE__ */ new Set()) => {
|
|
59825
59863
|
const children = callsiteCaptureChildrenByTrait?.get(traitName);
|
|
59826
59864
|
if (!children || children.size === 0) return;
|
|
59827
59865
|
const mgr = managerRef.current;
|
|
@@ -59835,7 +59873,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59835
59873
|
if (lifecycleEvent === void 0) continue;
|
|
59836
59874
|
const [entry] = mgr.sendEvent(lifecycleEvent, {}, void 0, entityByTrait, void 0, childName);
|
|
59837
59875
|
if (!entry || !entry.result.executed) continue;
|
|
59838
|
-
|
|
59876
|
+
log13.debug("callsite-capture-child:rerender", {
|
|
59839
59877
|
referrer: traitName,
|
|
59840
59878
|
child: childName,
|
|
59841
59879
|
lifecycleEvent,
|
|
@@ -59849,10 +59887,10 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
59849
59887
|
payload: {},
|
|
59850
59888
|
flushEvent: lifecycleEvent,
|
|
59851
59889
|
syncOnly: false,
|
|
59852
|
-
log:
|
|
59890
|
+
log: log13,
|
|
59853
59891
|
callsitePayload
|
|
59854
59892
|
});
|
|
59855
|
-
await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait,
|
|
59893
|
+
await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait, log13, visited);
|
|
59856
59894
|
}
|
|
59857
59895
|
}, [callsiteCaptureChildrenByTrait, executeTransitionEffects]);
|
|
59858
59896
|
const runTickEffects = useCallback((tick, binding) => {
|
|
@@ -61076,7 +61114,7 @@ init_useEventBus();
|
|
|
61076
61114
|
// components/avl/hooks/useCanvasDnd.tsx
|
|
61077
61115
|
init_useEventBus();
|
|
61078
61116
|
init_useAlmadarDndCollision();
|
|
61079
|
-
var
|
|
61117
|
+
var log11 = createLogger("almadar:ui:canvas-dnd");
|
|
61080
61118
|
function useCanvasDraggable({
|
|
61081
61119
|
id,
|
|
61082
61120
|
payload,
|
|
@@ -61114,7 +61152,7 @@ function defaultEmit(eventBus, drop) {
|
|
|
61114
61152
|
if (payload.kind === "pattern") {
|
|
61115
61153
|
const patternType = payload.data["type"];
|
|
61116
61154
|
if (typeof patternType !== "string") {
|
|
61117
|
-
|
|
61155
|
+
log11.warn("default-emit:pattern:missing-type");
|
|
61118
61156
|
return;
|
|
61119
61157
|
}
|
|
61120
61158
|
const out = { patternType, containerNode: target.containerNode };
|
|
@@ -61123,26 +61161,26 @@ function defaultEmit(eventBus, drop) {
|
|
|
61123
61161
|
out.index = resolved.index;
|
|
61124
61162
|
}
|
|
61125
61163
|
eventBus.emit("UI:PATTERN_DROP", out);
|
|
61126
|
-
|
|
61164
|
+
log11.info("default-emit:pattern", { patternType, level: target.level });
|
|
61127
61165
|
return;
|
|
61128
61166
|
}
|
|
61129
61167
|
if (payload.kind === "behavior") {
|
|
61130
61168
|
const behaviorName = payload.data["name"];
|
|
61131
61169
|
if (typeof behaviorName !== "string") {
|
|
61132
|
-
|
|
61170
|
+
log11.warn("default-emit:behavior:missing-name");
|
|
61133
61171
|
return;
|
|
61134
61172
|
}
|
|
61135
61173
|
eventBus.emit("UI:BEHAVIOR_DROP", {
|
|
61136
61174
|
behaviorName,
|
|
61137
61175
|
containerNode: target.containerNode
|
|
61138
61176
|
});
|
|
61139
|
-
|
|
61177
|
+
log11.info("default-emit:behavior", { behaviorName, level: target.level });
|
|
61140
61178
|
return;
|
|
61141
61179
|
}
|
|
61142
61180
|
if (payload.kind === "pattern-instance") {
|
|
61143
61181
|
const fromPath = payload.data["fromPath"];
|
|
61144
61182
|
if (typeof fromPath !== "string") {
|
|
61145
|
-
|
|
61183
|
+
log11.warn("default-emit:pattern-instance:missing-fromPath");
|
|
61146
61184
|
return;
|
|
61147
61185
|
}
|
|
61148
61186
|
const out = { fromPath, loc: payload.data["loc"] };
|
|
@@ -61151,10 +61189,10 @@ function defaultEmit(eventBus, drop) {
|
|
|
61151
61189
|
out.toIndex = resolved.index;
|
|
61152
61190
|
}
|
|
61153
61191
|
eventBus.emit("UI:PATTERN_MOVE", out);
|
|
61154
|
-
|
|
61192
|
+
log11.info("default-emit:pattern-instance", { fromPath, level: target.level });
|
|
61155
61193
|
return;
|
|
61156
61194
|
}
|
|
61157
|
-
|
|
61195
|
+
log11.debug("default-emit:unhandled-kind", { kind: payload.kind });
|
|
61158
61196
|
}
|
|
61159
61197
|
function CanvasDndProvider({
|
|
61160
61198
|
children,
|
|
@@ -61177,9 +61215,9 @@ function CanvasDndProvider({
|
|
|
61177
61215
|
if (payload) {
|
|
61178
61216
|
setActivePayload(payload);
|
|
61179
61217
|
eventBus.emit("UI:DRAG_START", { kind: payload.kind, data: payload.data });
|
|
61180
|
-
|
|
61218
|
+
log11.info("dragStart", { id: e.active.id, kind: payload.kind });
|
|
61181
61219
|
} else {
|
|
61182
|
-
|
|
61220
|
+
log11.warn("dragStart:missing-payload", { id: e.active.id });
|
|
61183
61221
|
}
|
|
61184
61222
|
}, [eventBus, trackPointer]);
|
|
61185
61223
|
const handleDragEnd = React96__default.useCallback((e) => {
|
|
@@ -61190,7 +61228,7 @@ function CanvasDndProvider({
|
|
|
61190
61228
|
const overData = e.over?.data.current;
|
|
61191
61229
|
const target = overData?.target;
|
|
61192
61230
|
const accepts = overData?.accepts;
|
|
61193
|
-
|
|
61231
|
+
log11.info("dragEnd", {
|
|
61194
61232
|
activeId: e.active.id,
|
|
61195
61233
|
overId: e.over?.id,
|
|
61196
61234
|
hasPayload: !!payload,
|
|
@@ -61202,12 +61240,12 @@ function CanvasDndProvider({
|
|
|
61202
61240
|
}
|
|
61203
61241
|
if (!payload || !target) return;
|
|
61204
61242
|
if (accepts && !accepts.includes(payload.kind)) {
|
|
61205
|
-
|
|
61243
|
+
log11.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
|
|
61206
61244
|
return;
|
|
61207
61245
|
}
|
|
61208
61246
|
const cursor = lastPointerRef.current;
|
|
61209
61247
|
const resolved = target.resolvePath && cursor ? target.resolvePath(cursor) : null;
|
|
61210
|
-
|
|
61248
|
+
log11.debug("dragEnd:resolve", {
|
|
61211
61249
|
hasResolver: !!target.resolvePath,
|
|
61212
61250
|
cursorX: cursor?.x,
|
|
61213
61251
|
cursorY: cursor?.y,
|
|
@@ -61221,7 +61259,7 @@ function CanvasDndProvider({
|
|
|
61221
61259
|
const handleDragCancel = React96__default.useCallback(() => {
|
|
61222
61260
|
setActivePayload(null);
|
|
61223
61261
|
document.removeEventListener("pointermove", trackPointer);
|
|
61224
|
-
|
|
61262
|
+
log11.info("dragCancel");
|
|
61225
61263
|
}, [trackPointer]);
|
|
61226
61264
|
return /* @__PURE__ */ jsxs(
|
|
61227
61265
|
DndContext,
|
|
@@ -63280,7 +63318,7 @@ init_AvlTransitionLane();
|
|
|
63280
63318
|
init_AvlSwimLane();
|
|
63281
63319
|
init_avl_atom_types();
|
|
63282
63320
|
init_avl_elk_layout();
|
|
63283
|
-
var
|
|
63321
|
+
var log12 = createLogger("almadar:ui:avl:trait-scene");
|
|
63284
63322
|
var SWIM_GUTTER2 = 120;
|
|
63285
63323
|
var CENTER_W2 = 360;
|
|
63286
63324
|
var AvlTraitScene = ({
|
|
@@ -63293,7 +63331,7 @@ var AvlTraitScene = ({
|
|
|
63293
63331
|
const dataKey = useMemo(() => JSON.stringify(data), [data]);
|
|
63294
63332
|
useEffect(() => {
|
|
63295
63333
|
computeTraitLayout(data).then(setLayout).catch((error) => {
|
|
63296
|
-
|
|
63334
|
+
log12.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
|
|
63297
63335
|
});
|
|
63298
63336
|
}, [dataKey]);
|
|
63299
63337
|
if (!layout) {
|