@almadar/ui 6.22.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.
@@ -200,7 +200,20 @@ interface ServerBridgeTransport {
200
200
  sendEvent: (orbitalName: string, event: string, payload?: EventPayload, clientId?: string, tick?: string, sourceTrait?: string, results?: ReadonlyArray<{
201
201
  traitName: string;
202
202
  result: TransitionResult;
203
- }>, entityByTrait?: Readonly<Record<string, EntityRow>>) => Promise<OrbitalEventResponse>;
203
+ }>, entityByTrait?: Readonly<Record<string, EntityRow>>,
204
+ /**
205
+ * The mounted top-level schema's own `name` (`ServerBridgeProvider`'s
206
+ * `schema` prop). Orbital names are not unique across a hosting
207
+ * server's whole catalog — a "whole orbital import" copies an existing
208
+ * orbital wholesale into a new behavior, so two catalog entries can
209
+ * declare an orbital with the identical name — this disambiguates
210
+ * which one a stateless server should resolve against instead of it
211
+ * guessing from a global orbital-name reverse index (verified
212
+ * 2026-09-16: project-friday's own imported `TaskOrbital` was
213
+ * misrouted to the standalone `std-project-manager` orbital of the
214
+ * same name). An unmodified server ignores the extra field.
215
+ */
216
+ behaviorHint?: string) => Promise<OrbitalEventResponse>;
204
217
  }
205
218
  /**
206
219
  * Supplies the bearer token the hosting server authenticates with. Resolved
@@ -200,7 +200,20 @@ interface ServerBridgeTransport {
200
200
  sendEvent: (orbitalName: string, event: string, payload?: EventPayload, clientId?: string, tick?: string, sourceTrait?: string, results?: ReadonlyArray<{
201
201
  traitName: string;
202
202
  result: TransitionResult;
203
- }>, entityByTrait?: Readonly<Record<string, EntityRow>>) => Promise<OrbitalEventResponse>;
203
+ }>, entityByTrait?: Readonly<Record<string, EntityRow>>,
204
+ /**
205
+ * The mounted top-level schema's own `name` (`ServerBridgeProvider`'s
206
+ * `schema` prop). Orbital names are not unique across a hosting
207
+ * server's whole catalog — a "whole orbital import" copies an existing
208
+ * orbital wholesale into a new behavior, so two catalog entries can
209
+ * declare an orbital with the identical name — this disambiguates
210
+ * which one a stateless server should resolve against instead of it
211
+ * guessing from a global orbital-name reverse index (verified
212
+ * 2026-09-16: project-friday's own imported `TaskOrbital` was
213
+ * misrouted to the standalone `std-project-manager` orbital of the
214
+ * same name). An unmodified server ignores the extra field.
215
+ */
216
+ behaviorHint?: string) => Promise<OrbitalEventResponse>;
204
217
  }
205
218
  /**
206
219
  * Supplies the bearer token the hosting server authenticates with. Resolved
@@ -37340,13 +37340,13 @@ var init_MapView = __esm({
37340
37340
  shadowSize: [41, 41]
37341
37341
  });
37342
37342
  L.Marker.prototype.options.icon = defaultIcon;
37343
- const { useEffect: useEffect71, useRef: useRef70, useCallback: useCallback101, useState: useState109 } = React96__namespace.default;
37343
+ const { useEffect: useEffect72, useRef: useRef71, useCallback: useCallback102, useState: useState110 } = React96__namespace.default;
37344
37344
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
37345
37345
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
37346
37346
  function MapUpdater({ centerLat, centerLng, zoom }) {
37347
37347
  const map = useMap();
37348
- const prevRef = useRef70({ centerLat, centerLng, zoom });
37349
- useEffect71(() => {
37348
+ const prevRef = useRef71({ centerLat, centerLng, zoom });
37349
+ useEffect72(() => {
37350
37350
  const prev = prevRef.current;
37351
37351
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
37352
37352
  map.setView([centerLat, centerLng], zoom);
@@ -37357,7 +37357,7 @@ var init_MapView = __esm({
37357
37357
  }
37358
37358
  function MapClickHandler({ onMapClick }) {
37359
37359
  const map = useMap();
37360
- useEffect71(() => {
37360
+ useEffect72(() => {
37361
37361
  if (!onMapClick) return;
37362
37362
  const handler = (e) => {
37363
37363
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -37385,8 +37385,8 @@ var init_MapView = __esm({
37385
37385
  showAttribution = true
37386
37386
  }) {
37387
37387
  const eventBus = useEventBus2();
37388
- const [clickedPosition, setClickedPosition] = useState109(null);
37389
- const handleMapClick = useCallback101((lat, lng) => {
37388
+ const [clickedPosition, setClickedPosition] = useState110(null);
37389
+ const handleMapClick = useCallback102((lat, lng) => {
37390
37390
  if (showClickedPin) {
37391
37391
  setClickedPosition({ lat, lng });
37392
37392
  }
@@ -37395,7 +37395,7 @@ var init_MapView = __esm({
37395
37395
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
37396
37396
  }
37397
37397
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
37398
- const handleMarkerClick = useCallback101((marker) => {
37398
+ const handleMarkerClick = useCallback102((marker) => {
37399
37399
  onMarkerClick?.(marker);
37400
37400
  if (markerClickEvent) {
37401
37401
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -51711,7 +51711,7 @@ function getAllEvents(traits2) {
51711
51711
  function EventDispatcherTab({ traits: traits2, schema }) {
51712
51712
  const eventBus = useEventBus();
51713
51713
  const { t } = hooks.useTranslate();
51714
- const [log12, setLog] = React96__namespace.useState([]);
51714
+ const [log13, setLog] = React96__namespace.useState([]);
51715
51715
  const prevStatesRef = React96__namespace.useRef(/* @__PURE__ */ new Map());
51716
51716
  React96__namespace.useEffect(() => {
51717
51717
  for (const trait of traits2) {
@@ -51775,9 +51775,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
51775
51775
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-muted-foreground mb-1", children: t("debug.otherEvents") }),
51776
51776
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
51777
51777
  ] }),
51778
- log12.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
51778
+ log13.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
51779
51779
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-muted-foreground mb-1", children: t("debug.recentTransitions") }),
51780
- /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log12.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
51780
+ /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log13.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
51781
51781
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: entry.traitName }),
51782
51782
  " ",
51783
51783
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: entry.from }),
@@ -59072,7 +59072,25 @@ function convertFnFormLambdasInProps(props) {
59072
59072
 
59073
59073
  // hooks/index.ts
59074
59074
  init_useEventBus();
59075
- var log8 = logger.createLogger("almadar:ui:shared-entity-store");
59075
+ logger.createLogger("almadar:ui:ui-slots");
59076
+ var ALL_SLOTS2 = core.UI_SLOTS.filter(
59077
+ (slot) => !slot.includes(".") && slot !== "hud" && slot !== "screen"
59078
+ );
59079
+ ALL_SLOTS2.reduce(
59080
+ (acc, slot) => {
59081
+ acc[slot] = null;
59082
+ return acc;
59083
+ },
59084
+ {}
59085
+ );
59086
+ ALL_SLOTS2.reduce(
59087
+ (acc, slot) => {
59088
+ acc[slot] = {};
59089
+ return acc;
59090
+ },
59091
+ {}
59092
+ );
59093
+ var log9 = logger.createLogger("almadar:ui:shared-entity-store");
59076
59094
  var EMPTY_ENTITY_STATE = {};
59077
59095
  function createSharedEntityStore() {
59078
59096
  const states = /* @__PURE__ */ new Map();
@@ -59102,7 +59120,7 @@ function createSharedEntityStore() {
59102
59120
  try {
59103
59121
  callback();
59104
59122
  } catch (error) {
59105
- log8.error("Shared entity subscriber error", {
59123
+ log9.error("Shared entity subscriber error", {
59106
59124
  entityId,
59107
59125
  error: error instanceof Error ? error : String(error)
59108
59126
  });
@@ -59133,7 +59151,7 @@ function runTickFrame(entityId, orderedWriters, store) {
59133
59151
  store.commit(entityId, scratch);
59134
59152
  return scratch;
59135
59153
  }
59136
- var log9 = logger.createLogger("almadar:ui:effects:client-handlers");
59154
+ var log10 = logger.createLogger("almadar:ui:effects:client-handlers");
59137
59155
  function createClientEffectHandlers(options) {
59138
59156
  const { eventBus, slotSetter, navigate, navigateBack, callService, liveEntity, persistDelegated, callServiceDelegated } = options;
59139
59157
  return {
@@ -59142,7 +59160,7 @@ function createClientEffectHandlers(options) {
59142
59160
  eventBus.emit(prefixedEvent, payload, source);
59143
59161
  },
59144
59162
  persist: async () => {
59145
- log9.debug("persist is server-side only, ignored on client");
59163
+ log10.debug("persist is server-side only, ignored on client");
59146
59164
  },
59147
59165
  // Bridge mode: the server runs every persist and the response
59148
59166
  // carries its outcome — tell the executor so the placeholder above is
@@ -59152,7 +59170,7 @@ function createClientEffectHandlers(options) {
59152
59170
  // @almadar/runtime EffectHandlers.set types value:unknown — should be FieldValue (upstream fix queued)
59153
59171
  set: ((_entityId, field, value) => {
59154
59172
  if (!liveEntity) {
59155
- log9.warn("set is server-side only, ignored on client (no live entity)");
59173
+ log10.warn("set is server-side only, ignored on client (no live entity)");
59156
59174
  return;
59157
59175
  }
59158
59176
  liveEntity[field] = value;
@@ -59188,10 +59206,10 @@ function createClientEffectHandlers(options) {
59188
59206
  window.location.href = path;
59189
59207
  return;
59190
59208
  }
59191
- log9.warn("No navigate handler, ignoring", { path });
59209
+ log10.warn("No navigate handler, ignoring", { path });
59192
59210
  }),
59193
59211
  navigateBack: navigateBack ?? (() => {
59194
- log9.warn("No navigate-back handler, ignoring");
59212
+ log10.warn("No navigate-back handler, ignoring");
59195
59213
  })
59196
59214
  };
59197
59215
  }
@@ -59273,6 +59291,13 @@ function effectsCallOp(effects, ops) {
59273
59291
  }
59274
59292
  return false;
59275
59293
  }
59294
+ function diffDroppedTraitNames(prev, next) {
59295
+ const dropped = [];
59296
+ for (const name of prev) {
59297
+ if (!next.has(name)) dropped.push(name);
59298
+ }
59299
+ return dropped;
59300
+ }
59276
59301
  function classifySharedTick(tick) {
59277
59302
  const writes = effectsCallOp(tick.effects, SHARED_ENTITY_WRITE_OPS);
59278
59303
  const renders = effectsCallOp(tick.effects, SHARED_ENTITY_RENDER_OPS);
@@ -59475,6 +59500,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59475
59500
  const uiSlotsRef = React96.useRef(uiSlots);
59476
59501
  const embeddedTraitsRef = React96.useRef(options?.embeddedTraits);
59477
59502
  const optionsRef = React96.useRef(options);
59503
+ const prevActiveTraitNamesRef = React96.useRef(/* @__PURE__ */ new Set());
59478
59504
  React96.useEffect(() => {
59479
59505
  traitBindingsRef.current = traitBindings;
59480
59506
  }, [traitBindings]);
@@ -59603,6 +59629,18 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59603
59629
  };
59604
59630
  }, [traitBindings]);
59605
59631
  React96.useEffect(() => {
59632
+ const nextActiveTraitNames = new Set(
59633
+ traitBindings.map((b) => b.trait.name).filter((n) => !!n)
59634
+ );
59635
+ const dropped = diffDroppedTraitNames(prevActiveTraitNamesRef.current, nextActiveTraitNames);
59636
+ if (dropped.length > 0) {
59637
+ for (const traitName of dropped) {
59638
+ for (const slot of ALL_SLOTS2) {
59639
+ uiSlotsRef.current.clearBySource(slot, traitName);
59640
+ }
59641
+ }
59642
+ }
59643
+ prevActiveTraitNamesRef.current = nextActiveTraitNames;
59606
59644
  const newManager = managerRef.current;
59607
59645
  newManager.resetAll();
59608
59646
  setTraitStates(newManager.getAllStates());
@@ -59650,7 +59688,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59650
59688
  };
59651
59689
  }, [traitBindings]);
59652
59690
  const executeTransitionEffects = React96.useCallback(async (params) => {
59653
- const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log12, callsitePayload } = params;
59691
+ const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log13, callsitePayload } = params;
59654
59692
  const traitName = binding.trait.name;
59655
59693
  const linkedEntity = binding.linkedEntity || "";
59656
59694
  const entityId = payload?.entityId;
@@ -59787,7 +59825,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59787
59825
  if (sharedKey !== void 0) {
59788
59826
  sharedWrites.push({ field, value });
59789
59827
  }
59790
- log12.debug("set:write", {
59828
+ log13.debug("set:write", {
59791
59829
  traitName,
59792
59830
  field,
59793
59831
  value: JSON.stringify(value),
@@ -59859,7 +59897,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59859
59897
  core.mergeEntityFrame(sharedEntityStore.getSnapshot(sharedKey), sharedWrites)
59860
59898
  );
59861
59899
  }
59862
- log12.debug("effects:executed", () => ({
59900
+ log13.debug("effects:executed", () => ({
59863
59901
  traitName,
59864
59902
  transition: `${previousState}->${newState}`,
59865
59903
  event: flushEvent,
@@ -59869,7 +59907,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59869
59907
  slotsTouched: Array.from(pendingSlots.keys()).join(",")
59870
59908
  }));
59871
59909
  for (const [slot, patterns] of pendingSlots) {
59872
- log12.debug("flush:slot", {
59910
+ log13.debug("flush:slot", {
59873
59911
  traitName,
59874
59912
  slot,
59875
59913
  patternCount: patterns.length,
@@ -59887,7 +59925,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59887
59925
  publishBindingSnapshot(traitName, liveEntity);
59888
59926
  }
59889
59927
  } catch (error) {
59890
- log12.error("effects:error", {
59928
+ log13.error("effects:error", {
59891
59929
  traitName,
59892
59930
  transition: `${previousState}->${newState}`,
59893
59931
  event: flushEvent,
@@ -59897,7 +59935,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59897
59935
  }
59898
59936
  return { emitted: emittedDuringExec, serverEffectResults };
59899
59937
  }, [eventBus, flushSlot, sharedEntityStore, publishBindingSnapshot, orbitalsByTrait, viewer]);
59900
- const reRenderCallsiteCaptureChildren = React96.useCallback(async (traitName, callsitePayload, entityByTrait, log12, visited = /* @__PURE__ */ new Set()) => {
59938
+ const reRenderCallsiteCaptureChildren = React96.useCallback(async (traitName, callsitePayload, entityByTrait, log13, visited = /* @__PURE__ */ new Set()) => {
59901
59939
  const children = callsiteCaptureChildrenByTrait?.get(traitName);
59902
59940
  if (!children || children.size === 0) return;
59903
59941
  const mgr = managerRef.current;
@@ -59911,7 +59949,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59911
59949
  if (lifecycleEvent === void 0) continue;
59912
59950
  const [entry] = mgr.sendEvent(lifecycleEvent, {}, void 0, entityByTrait, void 0, childName);
59913
59951
  if (!entry || !entry.result.executed) continue;
59914
- log12.debug("callsite-capture-child:rerender", {
59952
+ log13.debug("callsite-capture-child:rerender", {
59915
59953
  referrer: traitName,
59916
59954
  child: childName,
59917
59955
  lifecycleEvent,
@@ -59925,10 +59963,10 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59925
59963
  payload: {},
59926
59964
  flushEvent: lifecycleEvent,
59927
59965
  syncOnly: false,
59928
- log: log12,
59966
+ log: log13,
59929
59967
  callsitePayload
59930
59968
  });
59931
- await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait, log12, visited);
59969
+ await reRenderCallsiteCaptureChildren(childName, callsitePayload, entityByTrait, log13, visited);
59932
59970
  }
59933
59971
  }, [callsiteCaptureChildrenByTrait, executeTransitionEffects]);
59934
59972
  const runTickEffects = React96.useCallback((tick, binding) => {
@@ -61152,7 +61190,7 @@ init_useEventBus();
61152
61190
  // components/avl/hooks/useCanvasDnd.tsx
61153
61191
  init_useEventBus();
61154
61192
  init_useAlmadarDndCollision();
61155
- var log10 = logger.createLogger("almadar:ui:canvas-dnd");
61193
+ var log11 = logger.createLogger("almadar:ui:canvas-dnd");
61156
61194
  function useCanvasDraggable({
61157
61195
  id,
61158
61196
  payload,
@@ -61190,7 +61228,7 @@ function defaultEmit(eventBus, drop) {
61190
61228
  if (payload.kind === "pattern") {
61191
61229
  const patternType = payload.data["type"];
61192
61230
  if (typeof patternType !== "string") {
61193
- log10.warn("default-emit:pattern:missing-type");
61231
+ log11.warn("default-emit:pattern:missing-type");
61194
61232
  return;
61195
61233
  }
61196
61234
  const out = { patternType, containerNode: target.containerNode };
@@ -61199,26 +61237,26 @@ function defaultEmit(eventBus, drop) {
61199
61237
  out.index = resolved.index;
61200
61238
  }
61201
61239
  eventBus.emit("UI:PATTERN_DROP", out);
61202
- log10.info("default-emit:pattern", { patternType, level: target.level });
61240
+ log11.info("default-emit:pattern", { patternType, level: target.level });
61203
61241
  return;
61204
61242
  }
61205
61243
  if (payload.kind === "behavior") {
61206
61244
  const behaviorName = payload.data["name"];
61207
61245
  if (typeof behaviorName !== "string") {
61208
- log10.warn("default-emit:behavior:missing-name");
61246
+ log11.warn("default-emit:behavior:missing-name");
61209
61247
  return;
61210
61248
  }
61211
61249
  eventBus.emit("UI:BEHAVIOR_DROP", {
61212
61250
  behaviorName,
61213
61251
  containerNode: target.containerNode
61214
61252
  });
61215
- log10.info("default-emit:behavior", { behaviorName, level: target.level });
61253
+ log11.info("default-emit:behavior", { behaviorName, level: target.level });
61216
61254
  return;
61217
61255
  }
61218
61256
  if (payload.kind === "pattern-instance") {
61219
61257
  const fromPath = payload.data["fromPath"];
61220
61258
  if (typeof fromPath !== "string") {
61221
- log10.warn("default-emit:pattern-instance:missing-fromPath");
61259
+ log11.warn("default-emit:pattern-instance:missing-fromPath");
61222
61260
  return;
61223
61261
  }
61224
61262
  const out = { fromPath, loc: payload.data["loc"] };
@@ -61227,10 +61265,10 @@ function defaultEmit(eventBus, drop) {
61227
61265
  out.toIndex = resolved.index;
61228
61266
  }
61229
61267
  eventBus.emit("UI:PATTERN_MOVE", out);
61230
- log10.info("default-emit:pattern-instance", { fromPath, level: target.level });
61268
+ log11.info("default-emit:pattern-instance", { fromPath, level: target.level });
61231
61269
  return;
61232
61270
  }
61233
- log10.debug("default-emit:unhandled-kind", { kind: payload.kind });
61271
+ log11.debug("default-emit:unhandled-kind", { kind: payload.kind });
61234
61272
  }
61235
61273
  function CanvasDndProvider({
61236
61274
  children,
@@ -61253,9 +61291,9 @@ function CanvasDndProvider({
61253
61291
  if (payload) {
61254
61292
  setActivePayload(payload);
61255
61293
  eventBus.emit("UI:DRAG_START", { kind: payload.kind, data: payload.data });
61256
- log10.info("dragStart", { id: e.active.id, kind: payload.kind });
61294
+ log11.info("dragStart", { id: e.active.id, kind: payload.kind });
61257
61295
  } else {
61258
- log10.warn("dragStart:missing-payload", { id: e.active.id });
61296
+ log11.warn("dragStart:missing-payload", { id: e.active.id });
61259
61297
  }
61260
61298
  }, [eventBus, trackPointer]);
61261
61299
  const handleDragEnd = React96__namespace.default.useCallback((e) => {
@@ -61266,7 +61304,7 @@ function CanvasDndProvider({
61266
61304
  const overData = e.over?.data.current;
61267
61305
  const target = overData?.target;
61268
61306
  const accepts = overData?.accepts;
61269
- log10.info("dragEnd", {
61307
+ log11.info("dragEnd", {
61270
61308
  activeId: e.active.id,
61271
61309
  overId: e.over?.id,
61272
61310
  hasPayload: !!payload,
@@ -61278,12 +61316,12 @@ function CanvasDndProvider({
61278
61316
  }
61279
61317
  if (!payload || !target) return;
61280
61318
  if (accepts && !accepts.includes(payload.kind)) {
61281
- log10.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
61319
+ log11.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
61282
61320
  return;
61283
61321
  }
61284
61322
  const cursor = lastPointerRef.current;
61285
61323
  const resolved = target.resolvePath && cursor ? target.resolvePath(cursor) : null;
61286
- log10.debug("dragEnd:resolve", {
61324
+ log11.debug("dragEnd:resolve", {
61287
61325
  hasResolver: !!target.resolvePath,
61288
61326
  cursorX: cursor?.x,
61289
61327
  cursorY: cursor?.y,
@@ -61297,7 +61335,7 @@ function CanvasDndProvider({
61297
61335
  const handleDragCancel = React96__namespace.default.useCallback(() => {
61298
61336
  setActivePayload(null);
61299
61337
  document.removeEventListener("pointermove", trackPointer);
61300
- log10.info("dragCancel");
61338
+ log11.info("dragCancel");
61301
61339
  }, [trackPointer]);
61302
61340
  return /* @__PURE__ */ jsxRuntime.jsxs(
61303
61341
  core$1.DndContext,
@@ -63356,7 +63394,7 @@ init_AvlTransitionLane();
63356
63394
  init_AvlSwimLane();
63357
63395
  init_avl_atom_types();
63358
63396
  init_avl_elk_layout();
63359
- var log11 = logger.createLogger("almadar:ui:avl:trait-scene");
63397
+ var log12 = logger.createLogger("almadar:ui:avl:trait-scene");
63360
63398
  var SWIM_GUTTER2 = 120;
63361
63399
  var CENTER_W2 = 360;
63362
63400
  var AvlTraitScene = ({
@@ -63369,7 +63407,7 @@ var AvlTraitScene = ({
63369
63407
  const dataKey = React96.useMemo(() => JSON.stringify(data), [data]);
63370
63408
  React96.useEffect(() => {
63371
63409
  computeTraitLayout(data).then(setLayout).catch((error) => {
63372
- log11.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
63410
+ log12.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
63373
63411
  });
63374
63412
  }, [dataKey]);
63375
63413
  if (!layout) {