@almadar/ui 5.53.0 → 5.55.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.
@@ -8379,6 +8379,16 @@ var init_Skeleton = __esm({
8379
8379
  Skeleton.displayName = "Skeleton";
8380
8380
  }
8381
8381
  });
8382
+ function isKnownPattern(type) {
8383
+ return type in componentMapping;
8384
+ }
8385
+ var componentMapping;
8386
+ var init_pattern_resolver = __esm({
8387
+ "renderer/pattern-resolver.ts"() {
8388
+ createLogger("almadar:ui:pattern-resolver");
8389
+ componentMapping = {};
8390
+ }
8391
+ });
8382
8392
  function executeClientEffects(effects, config) {
8383
8393
  if (!effects || effects.length === 0) {
8384
8394
  return;
@@ -8387,7 +8397,7 @@ function executeClientEffects(effects, config) {
8387
8397
  try {
8388
8398
  executeEffect(effect, config);
8389
8399
  } catch (error) {
8390
- log3.error("Error executing effect", () => ({
8400
+ log4.error("Error executing effect", () => ({
8391
8401
  effect: JSON.stringify(effect),
8392
8402
  error: error instanceof Error ? error : String(error)
8393
8403
  }));
@@ -8419,7 +8429,7 @@ function executeEffect(effect, config) {
8419
8429
  break;
8420
8430
  }
8421
8431
  default:
8422
- log3.warn("Unknown effect type", { effectType: String(effectType) });
8432
+ log4.warn("Unknown effect type", { effectType: String(effectType) });
8423
8433
  }
8424
8434
  }
8425
8435
  function executeRenderUI(slot, patternConfig, config) {
@@ -8434,10 +8444,10 @@ function executeNotify(message, options, config) {
8434
8444
  function executeEmit(event, payload, config) {
8435
8445
  config.eventBus.emit(event, payload);
8436
8446
  }
8437
- var log3;
8447
+ var log4;
8438
8448
  var init_client_effect_executor = __esm({
8439
8449
  "renderer/client-effect-executor.ts"() {
8440
- log3 = createLogger("almadar:ui:effects:client");
8450
+ log4 = createLogger("almadar:ui:effects:client");
8441
8451
  }
8442
8452
  });
8443
8453
 
@@ -8598,12 +8608,12 @@ function useOfflineExecutor(options) {
8598
8608
  clearQueue
8599
8609
  };
8600
8610
  }
8601
- var log4, effectIdCounter, OfflineExecutor;
8611
+ var log5, effectIdCounter, OfflineExecutor;
8602
8612
  var init_offline_executor = __esm({
8603
8613
  "renderer/offline-executor.ts"() {
8604
8614
  "use client";
8605
8615
  init_client_effect_executor();
8606
- log4 = createLogger("almadar:ui:effects:offline");
8616
+ log5 = createLogger("almadar:ui:effects:offline");
8607
8617
  effectIdCounter = 0;
8608
8618
  OfflineExecutor = class {
8609
8619
  constructor(config) {
@@ -8657,7 +8667,7 @@ var init_offline_executor = __esm({
8657
8667
  this.state.syncQueue = JSON.parse(stored);
8658
8668
  }
8659
8669
  } catch (error) {
8660
- log4.warn("Failed to load sync queue", { error: error instanceof Error ? error : String(error) });
8670
+ log5.warn("Failed to load sync queue", { error: error instanceof Error ? error : String(error) });
8661
8671
  }
8662
8672
  }
8663
8673
  /**
@@ -8668,7 +8678,7 @@ var init_offline_executor = __esm({
8668
8678
  try {
8669
8679
  this.storage.setItem("orbital-offline-queue", JSON.stringify(this.state.syncQueue));
8670
8680
  } catch (error) {
8671
- log4.warn("Failed to save sync queue", { error: error instanceof Error ? error : String(error) });
8681
+ log5.warn("Failed to save sync queue", { error: error instanceof Error ? error : String(error) });
8672
8682
  }
8673
8683
  }
8674
8684
  /**
@@ -8738,7 +8748,7 @@ var init_offline_executor = __esm({
8738
8748
  this.queueForSync(type, { args, event, payload });
8739
8749
  break;
8740
8750
  default:
8741
- log4.warn("Unknown effect type", { type });
8751
+ log5.warn("Unknown effect type", { type });
8742
8752
  }
8743
8753
  }
8744
8754
  }
@@ -8843,6 +8853,7 @@ var init_offline_executor = __esm({
8843
8853
  // renderer/index.ts
8844
8854
  var init_renderer = __esm({
8845
8855
  "renderer/index.ts"() {
8856
+ init_pattern_resolver();
8846
8857
  init_slot_definitions();
8847
8858
  }
8848
8859
  });
@@ -10546,7 +10557,7 @@ function recordTransition(trace) {
10546
10557
  ...trace,
10547
10558
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
10548
10559
  };
10549
- log5.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
10560
+ log6.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
10550
10561
  getState().transitions.push(entry);
10551
10562
  if (getState().transitions.length > MAX_TRANSITIONS) {
10552
10563
  getState().transitions.shift();
@@ -10615,7 +10626,7 @@ function getTraitSnapshots() {
10615
10626
  try {
10616
10627
  snapshots.push(getter());
10617
10628
  } catch (err) {
10618
- log5.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
10629
+ log6.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
10619
10630
  }
10620
10631
  }
10621
10632
  return snapshots;
@@ -10678,12 +10689,12 @@ function waitForTransition(event, timeoutMs = 1e4) {
10678
10689
  }
10679
10690
  function bindEventBus(eventBus) {
10680
10691
  if (typeof window === "undefined") return;
10681
- log5.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
10692
+ log6.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
10682
10693
  exposeOnWindow();
10683
10694
  if (window.__orbitalVerification) {
10684
10695
  window.__orbitalVerification.sendEvent = (event, payload, traitScope) => {
10685
10696
  const prefixed = event.startsWith("UI:") ? event : traitScope ? `UI:${traitScope}.${event}` : `UI:${event}`;
10686
- log5.debug("sendEvent", { event: prefixed, traitScope, payloadKeys: payload ? Object.keys(payload) : [] });
10697
+ log6.debug("sendEvent", { event: prefixed, traitScope, payloadKeys: payload ? Object.keys(payload) : [] });
10687
10698
  eventBus.emit(prefixed, payload);
10688
10699
  };
10689
10700
  const eventLog = [];
@@ -10732,10 +10743,10 @@ function updateAssetStatus(url, status) {
10732
10743
  window.__orbitalVerification.assetStatus[url] = status;
10733
10744
  }
10734
10745
  }
10735
- var log5, MAX_TRANSITIONS;
10746
+ var log6, MAX_TRANSITIONS;
10736
10747
  var init_verificationRegistry = __esm({
10737
10748
  "lib/verificationRegistry.ts"() {
10738
- log5 = createLogger("almadar:bridge");
10749
+ log6 = createLogger("almadar:bridge");
10739
10750
  MAX_TRANSITIONS = 500;
10740
10751
  exposeOnWindow();
10741
10752
  }
@@ -13029,7 +13040,7 @@ var init_avl_elk_layout = __esm({
13029
13040
  elk = new ELK();
13030
13041
  }
13031
13042
  });
13032
- var log6, SWIM_GUTTER, CENTER_W, BehaviorView;
13043
+ var log7, SWIM_GUTTER, CENTER_W, BehaviorView;
13033
13044
  var init_BehaviorView = __esm({
13034
13045
  "components/avl/molecules/BehaviorView.tsx"() {
13035
13046
  "use client";
@@ -13038,7 +13049,7 @@ var init_BehaviorView = __esm({
13038
13049
  init_AvlSwimLane();
13039
13050
  init_types();
13040
13051
  init_avl_elk_layout();
13041
- log6 = createLogger("almadar:ui:avl:behavior-view");
13052
+ log7 = createLogger("almadar:ui:avl:behavior-view");
13042
13053
  SWIM_GUTTER = 120;
13043
13054
  CENTER_W = 360;
13044
13055
  BehaviorView = ({ data }) => {
@@ -13049,7 +13060,7 @@ var init_BehaviorView = __esm({
13049
13060
  const dataKey = useMemo(() => JSON.stringify(traitData), [traitData]);
13050
13061
  useEffect(() => {
13051
13062
  if (!traitData) return;
13052
- computeTraitLayout(traitData).then(setLayout).catch((err) => log6.error("compute-trait-layout-failed", { error: err instanceof Error ? err : String(err) }));
13063
+ computeTraitLayout(traitData).then(setLayout).catch((err) => log7.error("compute-trait-layout-failed", { error: err instanceof Error ? err : String(err) }));
13053
13064
  }, [dataKey]);
13054
13065
  if (!traitData) {
13055
13066
  return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-[var(--color-border)] bg-[var(--color-card)] p-4 text-center text-[var(--color-muted-foreground)] text-sm", children: t("avl.noTraitData") });
@@ -13460,7 +13471,7 @@ function generateDiff(oldVal, newVal) {
13460
13471
  }
13461
13472
  return diff;
13462
13473
  }
13463
- var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log7, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
13474
+ var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log8, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
13464
13475
  var init_CodeBlock = __esm({
13465
13476
  "components/core/molecules/markdown/CodeBlock.tsx"() {
13466
13477
  init_cn();
@@ -13543,7 +13554,7 @@ var init_CodeBlock = __esm({
13543
13554
  "lolo-op-async": { color: ORB_COLORS.dark.async }
13544
13555
  };
13545
13556
  loloStyle = { ...dark, ...loloStyleOverrides };
13546
- log7 = createLogger("almadar:ui:markdown-code");
13557
+ log8 = createLogger("almadar:ui:markdown-code");
13547
13558
  CODE_LANGUAGES = [
13548
13559
  "text",
13549
13560
  "json",
@@ -13807,7 +13818,7 @@ var init_CodeBlock = __esm({
13807
13818
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: true });
13808
13819
  setTimeout(() => setCopied(false), 2e3);
13809
13820
  } catch (err) {
13810
- log7.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
13821
+ log8.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
13811
13822
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: false });
13812
13823
  }
13813
13824
  };
@@ -17688,14 +17699,14 @@ function useSafeEventBus2() {
17688
17699
  } };
17689
17700
  }
17690
17701
  }
17691
- var log8, lookStyles4, ButtonGroup;
17702
+ var log9, lookStyles4, ButtonGroup;
17692
17703
  var init_ButtonGroup = __esm({
17693
17704
  "components/core/molecules/ButtonGroup.tsx"() {
17694
17705
  "use client";
17695
17706
  init_cn();
17696
17707
  init_atoms2();
17697
17708
  init_useEventBus();
17698
- log8 = createLogger("almadar:ui:button-group");
17709
+ log9 = createLogger("almadar:ui:button-group");
17699
17710
  lookStyles4 = {
17700
17711
  "right-aligned-buttons": "",
17701
17712
  "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
@@ -17776,7 +17787,7 @@ var init_ButtonGroup = __esm({
17776
17787
  {
17777
17788
  variant: "ghost",
17778
17789
  onClick: () => {
17779
- log8.debug("Filter clicked", { field: filter.field });
17790
+ log9.debug("Filter clicked", { field: filter.field });
17780
17791
  },
17781
17792
  children: filter.label
17782
17793
  },
@@ -25438,9 +25449,9 @@ function debug(...args) {
25438
25449
  const [first, ...rest] = args;
25439
25450
  const message = typeof first === "string" ? first : "<debug>";
25440
25451
  if (rest.length === 0 && typeof first === "string") {
25441
- log9.debug(message);
25452
+ log10.debug(message);
25442
25453
  } else {
25443
- log9.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
25454
+ log10.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
25444
25455
  }
25445
25456
  }
25446
25457
  function debugGroup(label) {
@@ -25468,11 +25479,11 @@ function toLogMetaValue(v) {
25468
25479
  }
25469
25480
  return String(v);
25470
25481
  }
25471
- var NAMESPACE, log9;
25482
+ var NAMESPACE, log10;
25472
25483
  var init_debug = __esm({
25473
25484
  "lib/debug.ts"() {
25474
25485
  NAMESPACE = "almadar:ui:debug";
25475
- log9 = createLogger(NAMESPACE);
25486
+ log10 = createLogger(NAMESPACE);
25476
25487
  createLogger("almadar:ui:debug:input");
25477
25488
  createLogger("almadar:ui:debug:collision");
25478
25489
  createLogger("almadar:ui:debug:physics");
@@ -28883,12 +28894,18 @@ function PlatformerCanvas({
28883
28894
  camX = Math.max(0, Math.min(px - cw / 2, ww - cw));
28884
28895
  camY = Math.max(0, Math.min(py - ch / 2 - 50, wh - ch));
28885
28896
  }
28886
- if (plats.length !== lastPlatCountRef.current) {
28897
+ const shouldDiag = plats.length !== lastPlatCountRef.current;
28898
+ if (shouldDiag) {
28887
28899
  lastPlatCountRef.current = plats.length;
28888
28900
  canvasLog.debug("draw:platforms", {
28889
28901
  platformCount: plats.length,
28890
28902
  camX,
28891
28903
  camY,
28904
+ plat0: JSON.stringify(plats[0]),
28905
+ plat2: JSON.stringify(plats[2]),
28906
+ tSpritesType: tSprites ? tSprites instanceof Map ? "Map" : typeof tSprites : "none",
28907
+ canvasW: canvas.width,
28908
+ canvasH: canvas.height,
28892
28909
  player: { x: px, y: py },
28893
28910
  worldWidth: ww,
28894
28911
  canvasWidth: cw,
@@ -28929,6 +28946,19 @@ function PlatformerCanvas({
28929
28946
  const platType = plat.type ?? "ground";
28930
28947
  const spriteUrl = tSprites?.[platType];
28931
28948
  const tileImg = spriteUrl ? loadImage(spriteUrl) : null;
28949
+ if (shouldDiag) {
28950
+ canvasLog.debug("plat:draw", {
28951
+ platType,
28952
+ platX,
28953
+ platY,
28954
+ w: plat.width,
28955
+ h: plat.height,
28956
+ branch: tileImg ? "tile" : "color",
28957
+ natW: tileImg?.naturalWidth,
28958
+ natH: tileImg?.naturalHeight,
28959
+ spriteUrl: spriteUrl ?? null
28960
+ });
28961
+ }
28932
28962
  if (tileImg) {
28933
28963
  const tileW = tileImg.naturalWidth;
28934
28964
  const tileH = tileImg.naturalHeight;
@@ -41744,11 +41774,11 @@ var init_Canvas3DErrorBoundary = __esm({
41744
41774
  "components/game/molecules/three/components/Canvas3DErrorBoundary.css"() {
41745
41775
  }
41746
41776
  });
41747
- var log10, Canvas3DErrorBoundary;
41777
+ var log11, Canvas3DErrorBoundary;
41748
41778
  var init_Canvas3DErrorBoundary2 = __esm({
41749
41779
  "components/game/molecules/three/components/Canvas3DErrorBoundary.tsx"() {
41750
41780
  init_Canvas3DErrorBoundary();
41751
- log10 = createLogger("almadar:ui:game:canvas3d:error-boundary");
41781
+ log11 = createLogger("almadar:ui:game:canvas3d:error-boundary");
41752
41782
  Canvas3DErrorBoundary = class extends Component {
41753
41783
  constructor(props) {
41754
41784
  super(props);
@@ -41776,8 +41806,8 @@ var init_Canvas3DErrorBoundary2 = __esm({
41776
41806
  componentDidCatch(error, errorInfo) {
41777
41807
  this.setState({ errorInfo });
41778
41808
  this.props.onError?.(error, errorInfo);
41779
- log10.error("Error caught", { error });
41780
- log10.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
41809
+ log11.error("Error caught", { error });
41810
+ log11.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
41781
41811
  }
41782
41812
  render() {
41783
41813
  if (this.state.hasError) {
@@ -41840,7 +41870,7 @@ function useGLTFModel(url, resourceBasePath) {
41840
41870
  setState({ model: null, isLoading: false, error: null });
41841
41871
  return;
41842
41872
  }
41843
- log11.debug("Loading", { url });
41873
+ log12.debug("Loading", { url });
41844
41874
  setState((prev) => ({ ...prev, isLoading: true, error: null }));
41845
41875
  const assetRoot = resourceBasePath || detectAssetRoot2(url);
41846
41876
  const loader = new GLTFLoader$1();
@@ -41848,7 +41878,7 @@ function useGLTFModel(url, resourceBasePath) {
41848
41878
  loader.load(
41849
41879
  url,
41850
41880
  (gltf) => {
41851
- log11.debug("Loaded", { url });
41881
+ log12.debug("Loaded", { url });
41852
41882
  setState({
41853
41883
  model: gltf.scene,
41854
41884
  isLoading: false,
@@ -41857,7 +41887,7 @@ function useGLTFModel(url, resourceBasePath) {
41857
41887
  },
41858
41888
  void 0,
41859
41889
  (err) => {
41860
- log11.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
41890
+ log12.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
41861
41891
  setState({
41862
41892
  model: null,
41863
41893
  isLoading: false,
@@ -41973,11 +42003,11 @@ function ModelLoader({
41973
42003
  }
41974
42004
  );
41975
42005
  }
41976
- var log11;
42006
+ var log12;
41977
42007
  var init_ModelLoader = __esm({
41978
42008
  "components/game/molecules/three/components/ModelLoader.tsx"() {
41979
42009
  "use client";
41980
- log11 = createLogger("almadar:ui:game:model-loader");
42010
+ log12 = createLogger("almadar:ui:game:model-loader");
41981
42011
  }
41982
42012
  });
41983
42013
 
@@ -46263,7 +46293,7 @@ function getAllEvents(traits2) {
46263
46293
  function EventDispatcherTab({ traits: traits2, schema }) {
46264
46294
  const eventBus = useEventBus();
46265
46295
  const { t } = useTranslate();
46266
- const [log13, setLog] = React82.useState([]);
46296
+ const [log14, setLog] = React82.useState([]);
46267
46297
  const prevStatesRef = React82.useRef(/* @__PURE__ */ new Map());
46268
46298
  React82.useEffect(() => {
46269
46299
  for (const trait of traits2) {
@@ -46327,9 +46357,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
46327
46357
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.otherEvents") }),
46328
46358
  /* @__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)) })
46329
46359
  ] }),
46330
- log13.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
46360
+ log14.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
46331
46361
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.recentTransitions") }),
46332
- /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log13.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
46362
+ /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log14.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
46333
46363
  /* @__PURE__ */ jsx("span", { className: "text-purple-400", children: entry.traitName }),
46334
46364
  " ",
46335
46365
  /* @__PURE__ */ jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -51194,7 +51224,7 @@ function isPatternConfig(value) {
51194
51224
  if (value instanceof Date) return false;
51195
51225
  if (typeof value === "function") return false;
51196
51226
  const record = value;
51197
- return "type" in record && typeof record.type === "string";
51227
+ return "type" in record && typeof record.type === "string" && isKnownPattern(record.type);
51198
51228
  }
51199
51229
  function isPlainConfigObject(value) {
51200
51230
  if (React82__default.isValidElement(value)) return false;
@@ -51788,7 +51818,7 @@ init_UISlotRenderer();
51788
51818
  // providers/VerificationProvider.tsx
51789
51819
  init_useEventBus();
51790
51820
  init_verificationRegistry();
51791
- var log12 = createLogger("almadar:verify");
51821
+ var log13 = createLogger("almadar:verify");
51792
51822
  var DISPATCH_SUFFIX = ":DISPATCH";
51793
51823
  var SUCCESS_SUFFIX = ":SUCCESS";
51794
51824
  var ERROR_SUFFIX = ":ERROR";
@@ -51835,7 +51865,7 @@ function VerificationProvider({
51835
51865
  const verificationProviderLifecycleListener = (evt) => {
51836
51866
  const parsed = parseLifecycleEvent(evt.type);
51837
51867
  if (!parsed) return;
51838
- log12.debug("lifecycle:event", { kind: parsed.kind, traitName: parsed.traitName, event: parsed.event, type: evt.type });
51868
+ log13.debug("lifecycle:event", { kind: parsed.kind, traitName: parsed.traitName, event: parsed.event, type: evt.type });
51839
51869
  const payload = evt.payload ?? {};
51840
51870
  if (parsed.kind === "dispatch") {
51841
51871
  const key = `${parsed.traitName}:${String(payload["event"] ?? "")}`;
@@ -51890,7 +51920,7 @@ function VerificationProvider({
51890
51920
  },
51891
51921
  timestamp: Date.now()
51892
51922
  });
51893
- log12.debug("transition:success", { trait: parsed.traitName, event: parsed.event, from: pending?.from, to: newState, effectCount: effects.length });
51923
+ log13.debug("transition:success", { trait: parsed.traitName, event: parsed.event, from: pending?.from, to: newState, effectCount: effects.length });
51894
51924
  } else if (parsed.kind === "error" && parsed.event) {
51895
51925
  const key = `${parsed.traitName}:${parsed.event}`;
51896
51926
  const pending = pendingRef.current.get(key);
@@ -51920,7 +51950,7 @@ function VerificationProvider({
51920
51950
  },
51921
51951
  timestamp: Date.now()
51922
51952
  });
51923
- log12.warn("transition:error", { trait: parsed.traitName, event: parsed.event, from: fromState, error: errorMsg });
51953
+ log13.warn("transition:error", { trait: parsed.traitName, event: parsed.event, from: fromState, error: errorMsg });
51924
51954
  }
51925
51955
  };
51926
51956
  Object.defineProperty(verificationProviderLifecycleListener, "name", {