@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.
package/dist/avl/index.js CHANGED
@@ -12160,6 +12160,16 @@ var init_Skeleton = __esm({
12160
12160
  Skeleton.displayName = "Skeleton";
12161
12161
  }
12162
12162
  });
12163
+ function isKnownPattern(type) {
12164
+ return type in componentMapping;
12165
+ }
12166
+ var componentMapping;
12167
+ var init_pattern_resolver = __esm({
12168
+ "renderer/pattern-resolver.ts"() {
12169
+ createLogger("almadar:ui:pattern-resolver");
12170
+ componentMapping = {};
12171
+ }
12172
+ });
12163
12173
 
12164
12174
  // renderer/slot-definitions.ts
12165
12175
  function isPortalSlot(slot) {
@@ -12268,6 +12278,7 @@ var init_navigation = __esm({
12268
12278
  // renderer/index.ts
12269
12279
  var init_renderer = __esm({
12270
12280
  "renderer/index.ts"() {
12281
+ init_pattern_resolver();
12271
12282
  init_slot_definitions();
12272
12283
  }
12273
12284
  });
@@ -13971,7 +13982,7 @@ function recordTransition(trace) {
13971
13982
  ...trace,
13972
13983
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
13973
13984
  };
13974
- log4.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
13985
+ log5.debug("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
13975
13986
  getState().transitions.push(entry);
13976
13987
  if (getState().transitions.length > MAX_TRANSITIONS) {
13977
13988
  getState().transitions.shift();
@@ -14070,7 +14081,7 @@ function getTraitSnapshots() {
14070
14081
  try {
14071
14082
  snapshots.push(getter());
14072
14083
  } catch (err) {
14073
- log4.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
14084
+ log5.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
14074
14085
  }
14075
14086
  }
14076
14087
  return snapshots;
@@ -14169,10 +14180,10 @@ function updateAssetStatus(url, status) {
14169
14180
  window.__orbitalVerification.assetStatus[url] = status;
14170
14181
  }
14171
14182
  }
14172
- var log4, MAX_TRANSITIONS;
14183
+ var log5, MAX_TRANSITIONS;
14173
14184
  var init_verificationRegistry = __esm({
14174
14185
  "lib/verificationRegistry.ts"() {
14175
- log4 = createLogger("almadar:bridge");
14186
+ log5 = createLogger("almadar:bridge");
14176
14187
  MAX_TRANSITIONS = 500;
14177
14188
  exposeOnWindow();
14178
14189
  }
@@ -16068,7 +16079,7 @@ function generateDiff(oldVal, newVal) {
16068
16079
  }
16069
16080
  return diff;
16070
16081
  }
16071
- var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log5, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
16082
+ var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log6, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, CodeBlock;
16072
16083
  var init_CodeBlock = __esm({
16073
16084
  "components/core/molecules/markdown/CodeBlock.tsx"() {
16074
16085
  init_cn();
@@ -16151,7 +16162,7 @@ var init_CodeBlock = __esm({
16151
16162
  "lolo-op-async": { color: ORB_COLORS.dark.async }
16152
16163
  };
16153
16164
  loloStyle = { ...dark, ...loloStyleOverrides };
16154
- log5 = createLogger("almadar:ui:markdown-code");
16165
+ log6 = createLogger("almadar:ui:markdown-code");
16155
16166
  CODE_LANGUAGES = [
16156
16167
  "text",
16157
16168
  "json",
@@ -16415,7 +16426,7 @@ var init_CodeBlock = __esm({
16415
16426
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: true });
16416
16427
  setTimeout(() => setCopied(false), 2e3);
16417
16428
  } catch (err) {
16418
- log5.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
16429
+ log6.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
16419
16430
  eventBus.emit("UI:COPY_CODE", { language: activeLanguage, success: false });
16420
16431
  }
16421
16432
  };
@@ -20296,14 +20307,14 @@ function useSafeEventBus2() {
20296
20307
  } };
20297
20308
  }
20298
20309
  }
20299
- var log6, lookStyles4, ButtonGroup;
20310
+ var log7, lookStyles4, ButtonGroup;
20300
20311
  var init_ButtonGroup = __esm({
20301
20312
  "components/core/molecules/ButtonGroup.tsx"() {
20302
20313
  "use client";
20303
20314
  init_cn();
20304
20315
  init_atoms2();
20305
20316
  init_useEventBus();
20306
- log6 = createLogger("almadar:ui:button-group");
20317
+ log7 = createLogger("almadar:ui:button-group");
20307
20318
  lookStyles4 = {
20308
20319
  "right-aligned-buttons": "",
20309
20320
  "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
@@ -20384,7 +20395,7 @@ var init_ButtonGroup = __esm({
20384
20395
  {
20385
20396
  variant: "ghost",
20386
20397
  onClick: () => {
20387
- log6.debug("Filter clicked", { field: filter.field });
20398
+ log7.debug("Filter clicked", { field: filter.field });
20388
20399
  },
20389
20400
  children: filter.label
20390
20401
  },
@@ -28046,9 +28057,9 @@ function debug(...args) {
28046
28057
  const [first, ...rest] = args;
28047
28058
  const message = typeof first === "string" ? first : "<debug>";
28048
28059
  if (rest.length === 0 && typeof first === "string") {
28049
- log7.debug(message);
28060
+ log8.debug(message);
28050
28061
  } else {
28051
- log7.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
28062
+ log8.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
28052
28063
  }
28053
28064
  }
28054
28065
  function debugGroup(label) {
@@ -28076,11 +28087,11 @@ function toLogMetaValue(v) {
28076
28087
  }
28077
28088
  return String(v);
28078
28089
  }
28079
- var NAMESPACE, log7;
28090
+ var NAMESPACE, log8;
28080
28091
  var init_debug = __esm({
28081
28092
  "lib/debug.ts"() {
28082
28093
  NAMESPACE = "almadar:ui:debug";
28083
- log7 = createLogger(NAMESPACE);
28094
+ log8 = createLogger(NAMESPACE);
28084
28095
  createLogger("almadar:ui:debug:input");
28085
28096
  createLogger("almadar:ui:debug:collision");
28086
28097
  createLogger("almadar:ui:debug:physics");
@@ -43962,11 +43973,11 @@ var init_Canvas3DErrorBoundary = __esm({
43962
43973
  "components/game/molecules/three/components/Canvas3DErrorBoundary.css"() {
43963
43974
  }
43964
43975
  });
43965
- var log8, Canvas3DErrorBoundary;
43976
+ var log9, Canvas3DErrorBoundary;
43966
43977
  var init_Canvas3DErrorBoundary2 = __esm({
43967
43978
  "components/game/molecules/three/components/Canvas3DErrorBoundary.tsx"() {
43968
43979
  init_Canvas3DErrorBoundary();
43969
- log8 = createLogger("almadar:ui:game:canvas3d:error-boundary");
43980
+ log9 = createLogger("almadar:ui:game:canvas3d:error-boundary");
43970
43981
  Canvas3DErrorBoundary = class extends Component {
43971
43982
  constructor(props) {
43972
43983
  super(props);
@@ -43994,8 +44005,8 @@ var init_Canvas3DErrorBoundary2 = __esm({
43994
44005
  componentDidCatch(error, errorInfo) {
43995
44006
  this.setState({ errorInfo });
43996
44007
  this.props.onError?.(error, errorInfo);
43997
- log8.error("Error caught", { error });
43998
- log8.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
44008
+ log9.error("Error caught", { error });
44009
+ log9.error("Component stack", { componentStack: errorInfo.componentStack ?? "<none>" });
43999
44010
  }
44000
44011
  render() {
44001
44012
  if (this.state.hasError) {
@@ -44058,7 +44069,7 @@ function useGLTFModel(url, resourceBasePath) {
44058
44069
  setState({ model: null, isLoading: false, error: null });
44059
44070
  return;
44060
44071
  }
44061
- log9.debug("Loading", { url });
44072
+ log10.debug("Loading", { url });
44062
44073
  setState((prev) => ({ ...prev, isLoading: true, error: null }));
44063
44074
  const assetRoot = resourceBasePath || detectAssetRoot2(url);
44064
44075
  const loader = new GLTFLoader$1();
@@ -44066,7 +44077,7 @@ function useGLTFModel(url, resourceBasePath) {
44066
44077
  loader.load(
44067
44078
  url,
44068
44079
  (gltf) => {
44069
- log9.debug("Loaded", { url });
44080
+ log10.debug("Loaded", { url });
44070
44081
  setState({
44071
44082
  model: gltf.scene,
44072
44083
  isLoading: false,
@@ -44075,7 +44086,7 @@ function useGLTFModel(url, resourceBasePath) {
44075
44086
  },
44076
44087
  void 0,
44077
44088
  (err) => {
44078
- log9.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
44089
+ log10.warn("Failed", { url, error: err instanceof Error ? err : String(err) });
44079
44090
  setState({
44080
44091
  model: null,
44081
44092
  isLoading: false,
@@ -44191,11 +44202,11 @@ function ModelLoader({
44191
44202
  }
44192
44203
  );
44193
44204
  }
44194
- var log9;
44205
+ var log10;
44195
44206
  var init_ModelLoader = __esm({
44196
44207
  "components/game/molecules/three/components/ModelLoader.tsx"() {
44197
44208
  "use client";
44198
- log9 = createLogger("almadar:ui:game:model-loader");
44209
+ log10 = createLogger("almadar:ui:game:model-loader");
44199
44210
  }
44200
44211
  });
44201
44212
 
@@ -48500,7 +48511,7 @@ function getAllEvents(traits2) {
48500
48511
  function EventDispatcherTab({ traits: traits2, schema }) {
48501
48512
  const eventBus = useEventBus();
48502
48513
  const { t } = useTranslate();
48503
- const [log15, setLog] = React90.useState([]);
48514
+ const [log16, setLog] = React90.useState([]);
48504
48515
  const prevStatesRef = React90.useRef(/* @__PURE__ */ new Map());
48505
48516
  React90.useEffect(() => {
48506
48517
  for (const trait of traits2) {
@@ -48564,9 +48575,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
48564
48575
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.otherEvents") }),
48565
48576
  /* @__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)) })
48566
48577
  ] }),
48567
- log15.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
48578
+ log16.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
48568
48579
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.recentTransitions") }),
48569
- /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log15.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
48580
+ /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log16.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
48570
48581
  /* @__PURE__ */ jsx("span", { className: "text-purple-400", children: entry.traitName }),
48571
48582
  " ",
48572
48583
  /* @__PURE__ */ jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -53431,7 +53442,7 @@ function isPatternConfig(value) {
53431
53442
  if (value instanceof Date) return false;
53432
53443
  if (typeof value === "function") return false;
53433
53444
  const record = value;
53434
- return "type" in record && typeof record.type === "string";
53445
+ return "type" in record && typeof record.type === "string" && isKnownPattern(record.type);
53435
53446
  }
53436
53447
  function isPlainConfigObject(value) {
53437
53448
  if (React90__default.isValidElement(value)) return false;
@@ -57343,7 +57354,7 @@ function convertObjectProps(props) {
57343
57354
  function convertFnFormLambdasInProps(props) {
57344
57355
  return convertObjectProps(props);
57345
57356
  }
57346
- var log10 = createLogger("almadar:ui:effects:client-handlers");
57357
+ var log11 = createLogger("almadar:ui:effects:client-handlers");
57347
57358
  function createClientEffectHandlers(options) {
57348
57359
  const { eventBus, slotSetter, navigate, notify, callService, liveEntity } = options;
57349
57360
  return {
@@ -57352,11 +57363,11 @@ function createClientEffectHandlers(options) {
57352
57363
  eventBus.emit(prefixedEvent, payload);
57353
57364
  },
57354
57365
  persist: async () => {
57355
- log10.warn("persist is server-side only, ignored on client");
57366
+ log11.warn("persist is server-side only, ignored on client");
57356
57367
  },
57357
57368
  set: (_entityId, field, value) => {
57358
57369
  if (!liveEntity) {
57359
- log10.warn("set is server-side only, ignored on client (no live entity)");
57370
+ log11.warn("set is server-side only, ignored on client (no live entity)");
57360
57371
  return;
57361
57372
  }
57362
57373
  liveEntity[field] = value;
@@ -57388,10 +57399,10 @@ function createClientEffectHandlers(options) {
57388
57399
  slotSetter.addPattern(slot, pattern, props);
57389
57400
  },
57390
57401
  navigate: navigate ?? ((path) => {
57391
- log10.warn("No navigate handler, ignoring", { path });
57402
+ log11.warn("No navigate handler, ignoring", { path });
57392
57403
  }),
57393
57404
  notify: notify ?? ((msg, type) => {
57394
- log10.debug("notify", { type, message: msg });
57405
+ log11.debug("notify", { type, message: msg });
57395
57406
  })
57396
57407
  };
57397
57408
  }
@@ -57623,7 +57634,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
57623
57634
  };
57624
57635
  }, [traitBindings]);
57625
57636
  const executeTransitionEffects = useCallback(async (params) => {
57626
- const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log15 } = params;
57637
+ const { binding, previousState, newState, payload, flushEvent, syncOnly, log: log16 } = params;
57627
57638
  const traitName = binding.trait.name;
57628
57639
  const linkedEntity = binding.linkedEntity || "";
57629
57640
  const entityId = payload?.entityId;
@@ -57711,7 +57722,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
57711
57722
  ...handlers,
57712
57723
  set: async (targetId, field, value) => {
57713
57724
  if (baseSet) await baseSet(targetId, field, value);
57714
- log15.debug("set:write", {
57725
+ log16.debug("set:write", {
57715
57726
  traitName,
57716
57727
  field,
57717
57728
  value: JSON.stringify(value),
@@ -57751,7 +57762,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
57751
57762
  const executor = new EffectExecutor({ handlers: trackingHandlers, bindings: bindingCtx, context: effectContext });
57752
57763
  try {
57753
57764
  await executor.executeAll(effects);
57754
- log15.debug("effects:executed", () => ({
57765
+ log16.debug("effects:executed", () => ({
57755
57766
  traitName,
57756
57767
  transition: `${previousState}->${newState}`,
57757
57768
  event: flushEvent,
@@ -57761,7 +57772,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
57761
57772
  slotsTouched: Array.from(pendingSlots.keys()).join(",")
57762
57773
  }));
57763
57774
  for (const [slot, patterns] of pendingSlots) {
57764
- log15.debug("flush:slot", {
57775
+ log16.debug("flush:slot", {
57765
57776
  traitName,
57766
57777
  slot,
57767
57778
  patternCount: patterns.length,
@@ -57776,7 +57787,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
57776
57787
  });
57777
57788
  }
57778
57789
  } catch (error) {
57779
- log15.error("effects:error", {
57790
+ log16.error("effects:error", {
57780
57791
  traitName,
57781
57792
  transition: `${previousState}->${newState}`,
57782
57793
  event: flushEvent,
@@ -58768,7 +58779,7 @@ OrbitalThemeProvider.displayName = "OrbitalThemeProvider";
58768
58779
  init_navigation();
58769
58780
  init_verificationRegistry();
58770
58781
  var PERF_NAMESPACE = "almadar:perf:canvas";
58771
- var log12 = createLogger(PERF_NAMESPACE);
58782
+ var log13 = createLogger(PERF_NAMESPACE);
58772
58783
  var RING_SIZE = 50;
58773
58784
  var ring = [];
58774
58785
  var writeIdx = 0;
@@ -58819,7 +58830,7 @@ function perfEnd(name, startToken, detail) {
58819
58830
  }
58820
58831
  }
58821
58832
  push({ name, durationMs, ts: endTs, detail });
58822
- log12.debug(name, () => ({ durationMs, ...detail ?? {} }));
58833
+ log13.debug(name, () => ({ durationMs, ...detail ?? {} }));
58823
58834
  }
58824
58835
  var profilerOnRender = (id, phase, actualDuration, baseDuration, _startTime, commitTime) => {
58825
58836
  if (!isEnabled()) return;
@@ -58829,7 +58840,7 @@ var profilerOnRender = (id, phase, actualDuration, baseDuration, _startTime, com
58829
58840
  ts: commitTime,
58830
58841
  detail: { baseDuration }
58831
58842
  });
58832
- log12.debug(`profiler:${id}:${phase}`, () => ({ actualDuration, baseDuration }));
58843
+ log13.debug(`profiler:${id}:${phase}`, () => ({ actualDuration, baseDuration }));
58833
58844
  };
58834
58845
 
58835
58846
  // runtime/prepareSchemaForPreview.ts
@@ -59472,7 +59483,7 @@ init_useEventBus();
59472
59483
  // components/avl/molecules/useCanvasDnd.tsx
59473
59484
  init_useEventBus();
59474
59485
  init_useAlmadarDndCollision();
59475
- var log13 = createLogger("almadar:ui:canvas-dnd");
59486
+ var log14 = createLogger("almadar:ui:canvas-dnd");
59476
59487
  function useCanvasDraggable({
59477
59488
  id,
59478
59489
  payload,
@@ -59511,7 +59522,7 @@ function defaultEmit(eventBus, drop) {
59511
59522
  if (payload.kind === "pattern") {
59512
59523
  const patternType = payload.data.type;
59513
59524
  if (typeof patternType !== "string") {
59514
- log13.warn("default-emit:pattern:missing-type");
59525
+ log14.warn("default-emit:pattern:missing-type");
59515
59526
  return;
59516
59527
  }
59517
59528
  const out = { patternType, containerNode: target.containerNode };
@@ -59520,23 +59531,23 @@ function defaultEmit(eventBus, drop) {
59520
59531
  out.index = resolved.index;
59521
59532
  }
59522
59533
  eventBus.emit("UI:PATTERN_DROP", out);
59523
- log13.info("default-emit:pattern", { patternType, level: target.level });
59534
+ log14.info("default-emit:pattern", { patternType, level: target.level });
59524
59535
  return;
59525
59536
  }
59526
59537
  if (payload.kind === "behavior") {
59527
59538
  const behaviorName = payload.data.name;
59528
59539
  if (typeof behaviorName !== "string") {
59529
- log13.warn("default-emit:behavior:missing-name");
59540
+ log14.warn("default-emit:behavior:missing-name");
59530
59541
  return;
59531
59542
  }
59532
59543
  eventBus.emit("UI:BEHAVIOR_DROP", {
59533
59544
  behaviorName,
59534
59545
  containerNode: target.containerNode
59535
59546
  });
59536
- log13.info("default-emit:behavior", { behaviorName, level: target.level });
59547
+ log14.info("default-emit:behavior", { behaviorName, level: target.level });
59537
59548
  return;
59538
59549
  }
59539
- log13.debug("default-emit:unhandled-kind", { kind: payload.kind });
59550
+ log14.debug("default-emit:unhandled-kind", { kind: payload.kind });
59540
59551
  }
59541
59552
  function CanvasDndProvider({
59542
59553
  children,
@@ -59552,9 +59563,9 @@ function CanvasDndProvider({
59552
59563
  if (payload) {
59553
59564
  setActivePayload(payload);
59554
59565
  eventBus.emit("UI:DRAG_START", { kind: payload.kind, data: payload.data });
59555
- log13.info("dragStart", { id: e.active.id, kind: payload.kind });
59566
+ log14.info("dragStart", { id: e.active.id, kind: payload.kind });
59556
59567
  } else {
59557
- log13.warn("dragStart:missing-payload", { id: e.active.id });
59568
+ log14.warn("dragStart:missing-payload", { id: e.active.id });
59558
59569
  }
59559
59570
  }, [eventBus]);
59560
59571
  const handleDragEnd = React90__default.useCallback((e) => {
@@ -59564,7 +59575,7 @@ function CanvasDndProvider({
59564
59575
  const overData = e.over?.data.current;
59565
59576
  const target = overData?.target;
59566
59577
  const accepts = overData?.accepts;
59567
- log13.info("dragEnd", {
59578
+ log14.info("dragEnd", {
59568
59579
  activeId: e.active.id,
59569
59580
  overId: e.over?.id,
59570
59581
  hasPayload: !!payload,
@@ -59576,7 +59587,7 @@ function CanvasDndProvider({
59576
59587
  }
59577
59588
  if (!payload || !target) return;
59578
59589
  if (accepts && !accepts.includes(payload.kind)) {
59579
- log13.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
59590
+ log14.debug("dragEnd:rejected:kind", { kind: payload.kind, accepts: [...accepts] });
59580
59591
  return;
59581
59592
  }
59582
59593
  const activator = e.activatorEvent;
@@ -59588,7 +59599,7 @@ function CanvasDndProvider({
59588
59599
  }, [eventBus, onDrop]);
59589
59600
  const handleDragCancel = React90__default.useCallback(() => {
59590
59601
  setActivePayload(null);
59591
- log13.info("dragCancel");
59602
+ log14.info("dragCancel");
59592
59603
  }, []);
59593
59604
  return /* @__PURE__ */ jsxs(
59594
59605
  DndContext,
@@ -61403,7 +61414,7 @@ init_AvlTransitionLane();
61403
61414
  init_AvlSwimLane();
61404
61415
  init_types();
61405
61416
  init_avl_elk_layout();
61406
- var log14 = createLogger("almadar:ui:avl:trait-scene");
61417
+ var log15 = createLogger("almadar:ui:avl:trait-scene");
61407
61418
  var SWIM_GUTTER2 = 120;
61408
61419
  var CENTER_W2 = 360;
61409
61420
  var AvlTraitScene = ({
@@ -61416,7 +61427,7 @@ var AvlTraitScene = ({
61416
61427
  const dataKey = useMemo(() => JSON.stringify(data), [data]);
61417
61428
  useEffect(() => {
61418
61429
  computeTraitLayout(data).then(setLayout).catch((error) => {
61419
- log14.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
61430
+ log15.error("computeTraitLayout failed", { error: error instanceof Error ? error : String(error) });
61420
61431
  });
61421
61432
  }, [dataKey]);
61422
61433
  if (!layout) {
@@ -7186,6 +7186,9 @@ var init_Skeleton = __esm({
7186
7186
  Skeleton.displayName = "Skeleton";
7187
7187
  }
7188
7188
  });
7189
+ function isKnownPattern(type) {
7190
+ return type in componentMapping;
7191
+ }
7189
7192
  function getKnownPatterns() {
7190
7193
  return Object.keys(componentMapping);
7191
7194
  }
@@ -7281,6 +7284,7 @@ var init_slot_definitions = __esm({
7281
7284
  // renderer/index.ts
7282
7285
  var init_renderer = __esm({
7283
7286
  "renderer/index.ts"() {
7287
+ init_pattern_resolver();
7284
7288
  init_slot_definitions();
7285
7289
  }
7286
7290
  });
@@ -52512,7 +52516,7 @@ function isPatternConfig(value) {
52512
52516
  if (value instanceof Date) return false;
52513
52517
  if (typeof value === "function") return false;
52514
52518
  const record = value;
52515
- return "type" in record && typeof record.type === "string";
52519
+ return "type" in record && typeof record.type === "string" && isKnownPattern(record.type);
52516
52520
  }
52517
52521
  function isPlainConfigObject(value) {
52518
52522
  if (React76__namespace.default.isValidElement(value)) return false;
@@ -7140,6 +7140,9 @@ var init_Skeleton = __esm({
7140
7140
  Skeleton.displayName = "Skeleton";
7141
7141
  }
7142
7142
  });
7143
+ function isKnownPattern(type) {
7144
+ return type in componentMapping;
7145
+ }
7143
7146
  function getKnownPatterns() {
7144
7147
  return Object.keys(componentMapping);
7145
7148
  }
@@ -7235,6 +7238,7 @@ var init_slot_definitions = __esm({
7235
7238
  // renderer/index.ts
7236
7239
  var init_renderer = __esm({
7237
7240
  "renderer/index.ts"() {
7241
+ init_pattern_resolver();
7238
7242
  init_slot_definitions();
7239
7243
  }
7240
7244
  });
@@ -52466,7 +52470,7 @@ function isPatternConfig(value) {
52466
52470
  if (value instanceof Date) return false;
52467
52471
  if (typeof value === "function") return false;
52468
52472
  const record = value;
52469
- return "type" in record && typeof record.type === "string";
52473
+ return "type" in record && typeof record.type === "string" && isKnownPattern(record.type);
52470
52474
  }
52471
52475
  function isPlainConfigObject(value) {
52472
52476
  if (React76__default.isValidElement(value)) return false;