@almadar/ui 5.54.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.
@@ -8468,6 +8468,16 @@ var init_Skeleton = __esm({
8468
8468
  Skeleton.displayName = "Skeleton";
8469
8469
  }
8470
8470
  });
8471
+ function isKnownPattern(type) {
8472
+ return type in componentMapping;
8473
+ }
8474
+ var componentMapping;
8475
+ var init_pattern_resolver = __esm({
8476
+ "renderer/pattern-resolver.ts"() {
8477
+ logger.createLogger("almadar:ui:pattern-resolver");
8478
+ componentMapping = {};
8479
+ }
8480
+ });
8471
8481
 
8472
8482
  // renderer/slot-definitions.ts
8473
8483
  function isPortalSlot(slot) {
@@ -8576,6 +8586,7 @@ var init_navigation = __esm({
8576
8586
  // renderer/index.ts
8577
8587
  var init_renderer = __esm({
8578
8588
  "renderer/index.ts"() {
8589
+ init_pattern_resolver();
8579
8590
  init_slot_definitions();
8580
8591
  }
8581
8592
  });
@@ -10279,7 +10290,7 @@ function recordTransition(trace) {
10279
10290
  ...trace,
10280
10291
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
10281
10292
  };
10282
- log4.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
10293
+ log5.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
10283
10294
  getState().transitions.push(entry);
10284
10295
  if (getState().transitions.length > MAX_TRANSITIONS) {
10285
10296
  getState().transitions.shift();
@@ -10378,7 +10389,7 @@ function getTraitSnapshots() {
10378
10389
  try {
10379
10390
  snapshots.push(getter());
10380
10391
  } catch (err) {
10381
- log4.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
10392
+ log5.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
10382
10393
  }
10383
10394
  }
10384
10395
  return snapshots;
@@ -10477,10 +10488,10 @@ function updateAssetStatus(url, status) {
10477
10488
  window.__orbitalVerification.assetStatus[url] = status;
10478
10489
  }
10479
10490
  }
10480
- var log4, MAX_TRANSITIONS;
10491
+ var log5, MAX_TRANSITIONS;
10481
10492
  var init_verificationRegistry = __esm({
10482
10493
  "lib/verificationRegistry.ts"() {
10483
- log4 = logger.createLogger("almadar:bridge");
10494
+ log5 = logger.createLogger("almadar:bridge");
10484
10495
  MAX_TRANSITIONS = 500;
10485
10496
  exposeOnWindow();
10486
10497
  }
@@ -12774,7 +12785,7 @@ var init_avl_elk_layout = __esm({
12774
12785
  elk = new ELK__default.default();
12775
12786
  }
12776
12787
  });
12777
- var log5, SWIM_GUTTER, CENTER_W, BehaviorView;
12788
+ var log6, SWIM_GUTTER, CENTER_W, BehaviorView;
12778
12789
  var init_BehaviorView = __esm({
12779
12790
  "components/avl/molecules/BehaviorView.tsx"() {
12780
12791
  "use client";
@@ -12783,7 +12794,7 @@ var init_BehaviorView = __esm({
12783
12794
  init_AvlSwimLane();
12784
12795
  init_types();
12785
12796
  init_avl_elk_layout();
12786
- log5 = logger.createLogger("almadar:ui:avl:behavior-view");
12797
+ log6 = logger.createLogger("almadar:ui:avl:behavior-view");
12787
12798
  SWIM_GUTTER = 120;
12788
12799
  CENTER_W = 360;
12789
12800
  BehaviorView = ({ data }) => {
@@ -12794,7 +12805,7 @@ var init_BehaviorView = __esm({
12794
12805
  const dataKey = React81.useMemo(() => JSON.stringify(traitData), [traitData]);
12795
12806
  React81.useEffect(() => {
12796
12807
  if (!traitData) return;
12797
- computeTraitLayout(traitData).then(setLayout).catch((err) => log5.error("compute-trait-layout-failed", { error: err instanceof Error ? err : String(err) }));
12808
+ computeTraitLayout(traitData).then(setLayout).catch((err) => log6.error("compute-trait-layout-failed", { error: err instanceof Error ? err : String(err) }));
12798
12809
  }, [dataKey]);
12799
12810
  if (!traitData) {
12800
12811
  return /* @__PURE__ */ jsxRuntime.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") });
@@ -13205,7 +13216,7 @@ function generateDiff(oldVal, newVal) {
13205
13216
  }
13206
13217
  return diff;
13207
13218
  }
13208
- var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log6, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
13219
+ var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log7, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
13209
13220
  var init_CodeBlock = __esm({
13210
13221
  "components/core/molecules/markdown/CodeBlock.tsx"() {
13211
13222
  init_cn();
@@ -13288,7 +13299,7 @@ var init_CodeBlock = __esm({
13288
13299
  "lolo-op-async": { color: syntax.ORB_COLORS.dark.async }
13289
13300
  };
13290
13301
  loloStyle = { ...dark__default.default, ...loloStyleOverrides };
13291
- log6 = logger.createLogger("almadar:ui:markdown-code");
13302
+ log7 = logger.createLogger("almadar:ui:markdown-code");
13292
13303
  CODE_LANGUAGES = [
13293
13304
  "text",
13294
13305
  "json",
@@ -13552,7 +13563,7 @@ var init_CodeBlock = __esm({
13552
13563
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: true });
13553
13564
  setTimeout(() => setCopied(false), 2e3);
13554
13565
  } catch (err) {
13555
- log6.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
13566
+ log7.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
13556
13567
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: false });
13557
13568
  }
13558
13569
  };
@@ -17433,14 +17444,14 @@ function useSafeEventBus2() {
17433
17444
  } };
17434
17445
  }
17435
17446
  }
17436
- var log7, lookStyles4, ButtonGroup;
17447
+ var log8, lookStyles4, ButtonGroup;
17437
17448
  var init_ButtonGroup = __esm({
17438
17449
  "components/core/molecules/ButtonGroup.tsx"() {
17439
17450
  "use client";
17440
17451
  init_cn();
17441
17452
  init_atoms2();
17442
17453
  init_useEventBus();
17443
- log7 = logger.createLogger("almadar:ui:button-group");
17454
+ log8 = logger.createLogger("almadar:ui:button-group");
17444
17455
  lookStyles4 = {
17445
17456
  "right-aligned-buttons": "",
17446
17457
  "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
@@ -17521,7 +17532,7 @@ var init_ButtonGroup = __esm({
17521
17532
  {
17522
17533
  variant: "ghost",
17523
17534
  onClick: () => {
17524
- log7.debug("Filter clicked", { field: filter.field });
17535
+ log8.debug("Filter clicked", { field: filter.field });
17525
17536
  },
17526
17537
  children: filter.label
17527
17538
  },
@@ -25183,9 +25194,9 @@ function debug(...args) {
25183
25194
  const [first, ...rest] = args;
25184
25195
  const message = typeof first === "string" ? first : "<debug>";
25185
25196
  if (rest.length === 0 && typeof first === "string") {
25186
- log8.debug(message);
25197
+ log9.debug(message);
25187
25198
  } else {
25188
- log8.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
25199
+ log9.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
25189
25200
  }
25190
25201
  }
25191
25202
  function debugGroup(label) {
@@ -25213,11 +25224,11 @@ function toLogMetaValue(v) {
25213
25224
  }
25214
25225
  return String(v);
25215
25226
  }
25216
- var NAMESPACE, log8;
25227
+ var NAMESPACE, log9;
25217
25228
  var init_debug = __esm({
25218
25229
  "lib/debug.ts"() {
25219
25230
  NAMESPACE = "almadar:ui:debug";
25220
- log8 = logger.createLogger(NAMESPACE);
25231
+ log9 = logger.createLogger(NAMESPACE);
25221
25232
  logger.createLogger("almadar:ui:debug:input");
25222
25233
  logger.createLogger("almadar:ui:debug:collision");
25223
25234
  logger.createLogger("almadar:ui:debug:physics");
@@ -41508,11 +41519,11 @@ var init_Canvas3DErrorBoundary = __esm({
41508
41519
  "components/game/molecules/three/components/Canvas3DErrorBoundary.css"() {
41509
41520
  }
41510
41521
  });
41511
- var log9, Canvas3DErrorBoundary;
41522
+ var log10, Canvas3DErrorBoundary;
41512
41523
  var init_Canvas3DErrorBoundary2 = __esm({
41513
41524
  "components/game/molecules/three/components/Canvas3DErrorBoundary.tsx"() {
41514
41525
  init_Canvas3DErrorBoundary();
41515
- log9 = logger.createLogger("almadar:ui:game:canvas3d:error-boundary");
41526
+ log10 = logger.createLogger("almadar:ui:game:canvas3d:error-boundary");
41516
41527
  Canvas3DErrorBoundary = class extends React81.Component {
41517
41528
  constructor(props) {
41518
41529
  super(props);
@@ -41540,8 +41551,8 @@ var init_Canvas3DErrorBoundary2 = __esm({
41540
41551
  componentDidCatch(error, errorInfo) {
41541
41552
  this.setState({ errorInfo });
41542
41553
  this.props.onError?.(error, errorInfo);
41543
- log9.error("Error caught", { error });
41544
- log9.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
41554
+ log10.error("Error caught", { error });
41555
+ log10.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
41545
41556
  }
41546
41557
  render() {
41547
41558
  if (this.state.hasError) {
@@ -41604,7 +41615,7 @@ function useGLTFModel(url, resourceBasePath) {
41604
41615
  setState({ model: null, isLoading: false, error: null });
41605
41616
  return;
41606
41617
  }
41607
- log10.debug("Loading", { url });
41618
+ log11.debug("Loading", { url });
41608
41619
  setState((prev) => ({ ...prev, isLoading: true, error: null }));
41609
41620
  const assetRoot = resourceBasePath || detectAssetRoot2(url);
41610
41621
  const loader = new GLTFLoader.GLTFLoader();
@@ -41612,7 +41623,7 @@ function useGLTFModel(url, resourceBasePath) {
41612
41623
  loader.load(
41613
41624
  url,
41614
41625
  (gltf) => {
41615
- log10.debug("Loaded", { url });
41626
+ log11.debug("Loaded", { url });
41616
41627
  setState({
41617
41628
  model: gltf.scene,
41618
41629
  isLoading: false,
@@ -41621,7 +41632,7 @@ function useGLTFModel(url, resourceBasePath) {
41621
41632
  },
41622
41633
  void 0,
41623
41634
  (err) => {
41624
- log10.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
41635
+ log11.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
41625
41636
  setState({
41626
41637
  model: null,
41627
41638
  isLoading: false,
@@ -41737,11 +41748,11 @@ function ModelLoader({
41737
41748
  }
41738
41749
  );
41739
41750
  }
41740
- var log10;
41751
+ var log11;
41741
41752
  var init_ModelLoader = __esm({
41742
41753
  "components/game/molecules/three/components/ModelLoader.tsx"() {
41743
41754
  "use client";
41744
- log10 = logger.createLogger("almadar:ui:game:model-loader");
41755
+ log11 = logger.createLogger("almadar:ui:game:model-loader");
41745
41756
  }
41746
41757
  });
41747
41758
 
@@ -46046,7 +46057,7 @@ function getAllEvents(traits2) {
46046
46057
  function EventDispatcherTab({ traits: traits2, schema }) {
46047
46058
  const eventBus = useEventBus();
46048
46059
  const { t } = hooks.useTranslate();
46049
- const [log14, setLog] = React81__namespace.useState([]);
46060
+ const [log15, setLog] = React81__namespace.useState([]);
46050
46061
  const prevStatesRef = React81__namespace.useRef(/* @__PURE__ */ new Map());
46051
46062
  React81__namespace.useEffect(() => {
46052
46063
  for (const trait of traits2) {
@@ -46110,9 +46121,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
46110
46121
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.otherEvents") }),
46111
46122
  /* @__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)) })
46112
46123
  ] }),
46113
- log14.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
46124
+ log15.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
46114
46125
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.recentTransitions") }),
46115
- /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log14.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
46126
+ /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log15.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
46116
46127
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-400", children: entry.traitName }),
46117
46128
  " ",
46118
46129
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -50977,7 +50988,7 @@ function isPatternConfig(value) {
50977
50988
  if (value instanceof Date) return false;
50978
50989
  if (typeof value === "function") return false;
50979
50990
  const record = value;
50980
- return "type" in record && typeof record.type === "string";
50991
+ return "type" in record && typeof record.type === "string" && isKnownPattern(record.type);
50981
50992
  }
50982
50993
  function isPlainConfigObject(value) {
50983
50994
  if (React81__namespace.default.isValidElement(value)) return false;
@@ -51724,7 +51735,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
51724
51735
  };
51725
51736
  }, [traitBindings]);
51726
51737
  const executeTransitionEffects = React81.useCallback(async (params) => {
51727
- const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log14 } = params;
51738
+ const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log15 } = params;
51728
51739
  const traitName = binding.trait.name;
51729
51740
  const linkedEntity = binding.linkedEntity || "";
51730
51741
  const entityId = payload?.entityId;
@@ -51812,7 +51823,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
51812
51823
  ...handlers,
51813
51824
  set: async (targetId, field, value) => {
51814
51825
  if (baseSet) await baseSet(targetId, field, value);
51815
- log14.debug("set:write", {
51826
+ log15.debug("set:write", {
51816
51827
  traitName,
51817
51828
  field,
51818
51829
  value: JSON.stringify(value),
@@ -51852,7 +51863,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
51852
51863
  const executor = new runtime.EffectExecutor({ handlers: trackingHandlers, bindings: bindingCtx, context: effectContext });
51853
51864
  try {
51854
51865
  await executor.executeAll(effects);
51855
- log14.debug("effects:executed", () => ({
51866
+ log15.debug("effects:executed", () => ({
51856
51867
  traitName,
51857
51868
  transition: `${previousState}->${newState}`,
51858
51869
  event: flushEvent,
@@ -51862,7 +51873,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
51862
51873
  slotsTouched: Array.from(pendingSlots.keys()).join(",")
51863
51874
  }));
51864
51875
  for (const [slot, patterns] of pendingSlots) {
51865
- log14.debug("flush:slot", {
51876
+ log15.debug("flush:slot", {
51866
51877
  traitName,
51867
51878
  slot,
51868
51879
  patternCount: patterns.length,
@@ -51877,7 +51888,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
51877
51888
  });
51878
51889
  }
51879
51890
  } catch (error) {
51880
- log14.error("effects:error", {
51891
+ log15.error("effects:error", {
51881
51892
  traitName,
51882
51893
  transition: `${previousState}->${newState}`,
51883
51894
  event: flushEvent,
@@ -52349,7 +52360,7 @@ function clearSchemaCache() {
52349
52360
 
52350
52361
  // runtime/index.ts
52351
52362
  init_EntitySchemaContext();
52352
- var log11 = logger.createLogger("almadar:ui:trait-provider");
52363
+ var log12 = logger.createLogger("almadar:ui:trait-provider");
52353
52364
  var TraitContext = React81.createContext(null);
52354
52365
  function TraitProvider({
52355
52366
  traits: traitBindings,
@@ -52366,7 +52377,7 @@ function TraitProvider({
52366
52377
  currentState: stateName,
52367
52378
  availableEvents: trait.transitions.filter((t) => t.from === stateName).map((t) => t.event),
52368
52379
  dispatch: (eventKey, payload) => {
52369
- log11.debug("Dispatch", () => ({
52380
+ log12.debug("Dispatch", () => ({
52370
52381
  trait: trait.name,
52371
52382
  event: eventKey,
52372
52383
  payloadKeys: payload ? Object.keys(payload) : []
@@ -53116,7 +53127,7 @@ OrbitalThemeProvider.displayName = "OrbitalThemeProvider";
53116
53127
  init_navigation();
53117
53128
  init_verificationRegistry();
53118
53129
  var PERF_NAMESPACE = "almadar:perf:canvas";
53119
- var log13 = logger.createLogger(PERF_NAMESPACE);
53130
+ var log14 = logger.createLogger(PERF_NAMESPACE);
53120
53131
  var RING_SIZE = 50;
53121
53132
  var ring = [];
53122
53133
  var writeIdx = 0;
@@ -53171,7 +53182,7 @@ function perfEnd(name, startToken, detail) {
53171
53182
  }
53172
53183
  }
53173
53184
  push({ name, durationMs, ts: endTs, detail });
53174
- log13.debug(name, () => ({ durationMs, ...detail ?? {} }));
53185
+ log14.debug(name, () => ({ durationMs, ...detail ?? {} }));
53175
53186
  }
53176
53187
  function perfTime(name, fn, detail) {
53177
53188
  const t = perfStart(name);
@@ -53189,7 +53200,7 @@ var profilerOnRender = (id, phase, actualDuration, baseDuration, _startTime, com
53189
53200
  ts: commitTime,
53190
53201
  detail: { baseDuration }
53191
53202
  });
53192
- log13.debug(`profiler:${id}:${phase}`, () => ({ actualDuration, baseDuration }));
53203
+ log14.debug(`profiler:${id}:${phase}`, () => ({ actualDuration, baseDuration }));
53193
53204
  };
53194
53205
  function getPerfSnapshot() {
53195
53206
  if (ring.length < RING_SIZE) return ring.slice();