@almadar/ui 4.44.1 → 4.46.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.
@@ -1076,7 +1076,7 @@ var init_useEventBus = __esm({
1076
1076
  try {
1077
1077
  handler(event);
1078
1078
  } catch (error) {
1079
- console.error(`[EventBus] Error in listener for '${type}':`, error);
1079
+ log.error("Error in listener", { type, error: error instanceof Error ? error : String(error) });
1080
1080
  }
1081
1081
  });
1082
1082
  }
@@ -1084,7 +1084,7 @@ var init_useEventBus = __esm({
1084
1084
  try {
1085
1085
  handler(event);
1086
1086
  } catch (error) {
1087
- console.error(`[EventBus] Error in onAny listener for '${type}':`, error);
1087
+ log.error("Error in onAny listener", { type, error: error instanceof Error ? error : String(error) });
1088
1088
  }
1089
1089
  });
1090
1090
  },
@@ -3137,6 +3137,7 @@ var BUILT_IN_THEMES, ThemeContext;
3137
3137
  var init_ThemeContext = __esm({
3138
3138
  "context/ThemeContext.tsx"() {
3139
3139
  "use client";
3140
+ logger.createLogger("almadar:ui:theme");
3140
3141
  BUILT_IN_THEMES = [
3141
3142
  {
3142
3143
  name: "wireframe",
@@ -4472,8 +4473,8 @@ var init_SectionHeader = __esm({
4472
4473
  }
4473
4474
  });
4474
4475
  var sizeClasses4; exports.MarketingStatCard = void 0;
4475
- var init_StatCard = __esm({
4476
- "components/atoms/StatCard.tsx"() {
4476
+ var init_MarketingStatCard = __esm({
4477
+ "components/atoms/MarketingStatCard.tsx"() {
4477
4478
  init_cn();
4478
4479
  init_Stack();
4479
4480
  init_Typography();
@@ -8339,7 +8340,7 @@ function ActionButton({
8339
8340
  disabled: isDisabled,
8340
8341
  onClick,
8341
8342
  className: cn(
8342
- "relative inline-flex items-center gap-1.5 rounded-md border font-medium text-[var(--color-foreground)] overflow-hidden transition-colors duration-150",
8343
+ "relative inline-flex items-center gap-1.5 rounded-md border font-medium overflow-hidden transition-colors duration-150",
8343
8344
  sizes.button,
8344
8345
  variantStyles7[variant],
8345
8346
  isDisabled && "opacity-60 cursor-not-allowed",
@@ -8349,7 +8350,7 @@ function ActionButton({
8349
8350
  onCooldown && /* @__PURE__ */ jsxRuntime.jsx(
8350
8351
  "div",
8351
8352
  {
8352
- className: "absolute inset-0 bg-black/60 pointer-events-none",
8353
+ className: "absolute inset-0 bg-foreground/40 pointer-events-none",
8353
8354
  style: {
8354
8355
  clipPath: `conic-gradient(from 0deg, transparent ${360 - cooldownDeg}deg, black ${360 - cooldownDeg}deg)`,
8355
8356
  WebkitClipPath: `conic-gradient(from 0deg, transparent ${360 - cooldownDeg}deg, black ${360 - cooldownDeg}deg)`,
@@ -8357,13 +8358,16 @@ function ActionButton({
8357
8358
  }
8358
8359
  }
8359
8360
  ),
8360
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
8361
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: typeof icon === "string" ? (() => {
8362
+ const I = resolveIcon(icon);
8363
+ return I ? /* @__PURE__ */ jsxRuntime.jsx(I, { className: "w-4 h-4" }) : null;
8364
+ })() : icon }),
8361
8365
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative z-10", children: label }),
8362
8366
  hotkey && /* @__PURE__ */ jsxRuntime.jsx(
8363
8367
  "span",
8364
8368
  {
8365
8369
  className: cn(
8366
- "absolute top-0.5 right-0.5 bg-black/50 text-gray-300 rounded font-mono leading-tight",
8370
+ "absolute top-0.5 right-0.5 bg-foreground/30 text-primary-foreground rounded font-mono leading-tight",
8367
8371
  sizes.hotkey
8368
8372
  ),
8369
8373
  children: hotkey
@@ -8377,15 +8381,16 @@ var sizeMap, variantStyles7;
8377
8381
  var init_ActionButton = __esm({
8378
8382
  "components/atoms/game/ActionButton.tsx"() {
8379
8383
  init_cn();
8384
+ init_Icon();
8380
8385
  sizeMap = {
8381
8386
  sm: { button: "px-3 py-1.5 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
8382
8387
  md: { button: "px-4 py-2 text-sm", hotkey: "text-[10px] px-1.5", icon: "text-sm" },
8383
8388
  lg: { button: "px-5 py-2.5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
8384
8389
  };
8385
8390
  variantStyles7 = {
8386
- primary: "bg-blue-600 hover:bg-blue-500 border-blue-400/40",
8387
- secondary: "bg-gray-700 hover:bg-gray-600 border-gray-500/40",
8388
- danger: "bg-red-700 hover:bg-red-600 border-red-400/40"
8391
+ primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
8392
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-hover border-border",
8393
+ danger: "bg-error text-error-foreground hover:bg-error/90 border-error"
8389
8394
  };
8390
8395
  ActionButton.displayName = "ActionButton";
8391
8396
  }
@@ -8454,12 +8459,15 @@ function ControlButton({
8454
8459
  sizeMap2[size] ?? sizeMap2.md,
8455
8460
  shapeMap[shape] ?? shapeMap.circle,
8456
8461
  variantMap[variant] ?? variantMap.secondary,
8457
- actualPressed && "scale-95 brightness-110 border-white",
8462
+ actualPressed && "scale-95 brightness-110 border-foreground",
8458
8463
  disabled && "opacity-50 cursor-not-allowed",
8459
8464
  className
8460
8465
  ),
8461
8466
  children: [
8462
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl", children: icon }),
8467
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl", children: typeof icon === "string" ? (() => {
8468
+ const I = resolveIcon(icon);
8469
+ return I ? /* @__PURE__ */ jsxRuntime.jsx(I, { className: "w-6 h-6" }) : null;
8470
+ })() : icon }),
8463
8471
  label && !icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
8464
8472
  ]
8465
8473
  }
@@ -8471,6 +8479,7 @@ var init_ControlButton = __esm({
8471
8479
  "use client";
8472
8480
  init_cn();
8473
8481
  init_useEventBus();
8482
+ init_Icon();
8474
8483
  sizeMap2 = {
8475
8484
  sm: "w-10 h-10 text-sm",
8476
8485
  md: "w-14 h-14 text-base",
@@ -8483,9 +8492,9 @@ var init_ControlButton = __esm({
8483
8492
  square: "rounded-md"
8484
8493
  };
8485
8494
  variantMap = {
8486
- primary: "bg-blue-600 text-[var(--color-foreground)] border-blue-400 hover:bg-blue-500",
8487
- secondary: "bg-[var(--color-surface,#374151)] text-[var(--color-foreground)] border-gray-500 hover:bg-gray-600",
8488
- ghost: "bg-transparent text-[var(--color-foreground)] border-white/30 hover:bg-white/10"
8495
+ primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
8496
+ secondary: "bg-secondary text-secondary-foreground border-border hover:bg-secondary-hover",
8497
+ ghost: "bg-transparent text-foreground border-border hover:bg-muted"
8489
8498
  };
8490
8499
  ControlButton.displayName = "ControlButton";
8491
8500
  }
@@ -8951,7 +8960,7 @@ function getTraitSnapshots() {
8951
8960
  try {
8952
8961
  snapshots.push(getter());
8953
8962
  } catch (err) {
8954
- log2.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
8963
+ log3.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
8955
8964
  }
8956
8965
  }
8957
8966
  return snapshots;
@@ -9014,10 +9023,10 @@ function updateAssetStatus(url, status) {
9014
9023
  window.__orbitalVerification.assetStatus[url] = status;
9015
9024
  }
9016
9025
  }
9017
- var log2;
9026
+ var log3;
9018
9027
  var init_verificationRegistry = __esm({
9019
9028
  "lib/verificationRegistry.ts"() {
9020
- log2 = logger.createLogger("almadar:bridge");
9029
+ log3 = logger.createLogger("almadar:bridge");
9021
9030
  exposeOnWindow();
9022
9031
  }
9023
9032
  });
@@ -11045,7 +11054,7 @@ var init_avl_elk_layout = __esm({
11045
11054
  elk = new ELK__default.default();
11046
11055
  }
11047
11056
  });
11048
- var SWIM_GUTTER, CENTER_W; exports.BehaviorView = void 0;
11057
+ var log4, SWIM_GUTTER, CENTER_W; exports.BehaviorView = void 0;
11049
11058
  var init_BehaviorView = __esm({
11050
11059
  "components/molecules/avl/BehaviorView.tsx"() {
11051
11060
  "use client";
@@ -11054,6 +11063,7 @@ var init_BehaviorView = __esm({
11054
11063
  init_AvlSwimLane();
11055
11064
  init_types();
11056
11065
  init_avl_elk_layout();
11066
+ log4 = logger.createLogger("almadar:ui:avl:behavior-view");
11057
11067
  SWIM_GUTTER = 120;
11058
11068
  CENTER_W = 360;
11059
11069
  exports.BehaviorView = ({ data }) => {
@@ -11063,7 +11073,7 @@ var init_BehaviorView = __esm({
11063
11073
  const dataKey = React131.useMemo(() => JSON.stringify(traitData), [traitData]);
11064
11074
  React131.useEffect(() => {
11065
11075
  if (!traitData) return;
11066
- computeTraitLayout(traitData).then(setLayout).catch(console.error);
11076
+ computeTraitLayout(traitData).then(setLayout).catch((err) => log4.error("compute-trait-layout-failed", { error: err instanceof Error ? err : String(err) }));
11067
11077
  }, [dataKey]);
11068
11078
  if (!traitData) {
11069
11079
  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: "No trait data" });
@@ -11408,7 +11418,7 @@ function computeFoldRegions(code) {
11408
11418
  }
11409
11419
  return regions.sort((a, b) => a.start - b.start);
11410
11420
  }
11411
- var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS; exports.CodeBlock = void 0;
11421
+ var orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log5, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS; exports.CodeBlock = void 0;
11412
11422
  var init_CodeBlock = __esm({
11413
11423
  "components/molecules/markdown/CodeBlock.tsx"() {
11414
11424
  init_Box();
@@ -11485,6 +11495,7 @@ var init_CodeBlock = __esm({
11485
11495
  "lolo-op-async": { color: syntax.ORB_COLORS.dark.async }
11486
11496
  };
11487
11497
  loloStyle = { ...dark__default.default, ...loloStyleOverrides };
11498
+ log5 = logger.createLogger("almadar:ui:markdown-code");
11488
11499
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
11489
11500
  HIDDEN_LINE_NUMBERS = { display: "none" };
11490
11501
  exports.CodeBlock = React131__namespace.default.memo(
@@ -11683,7 +11694,7 @@ var init_CodeBlock = __esm({
11683
11694
  eventBus.emit("UI:COPY_CODE", { language, success: true });
11684
11695
  setTimeout(() => setCopied(false), 2e3);
11685
11696
  } catch (err) {
11686
- console.error("Failed to copy code:", err);
11697
+ log5.error("Failed to copy code", { error: err instanceof Error ? err : String(err) });
11687
11698
  eventBus.emit("UI:COPY_CODE", { language, success: false });
11688
11699
  }
11689
11700
  };
@@ -15245,13 +15256,14 @@ function useSafeEventBus2() {
15245
15256
  } };
15246
15257
  }
15247
15258
  }
15248
- exports.ButtonGroup = void 0;
15259
+ var log6; exports.ButtonGroup = void 0;
15249
15260
  var init_ButtonGroup = __esm({
15250
15261
  "components/molecules/ButtonGroup.tsx"() {
15251
15262
  "use client";
15252
15263
  init_cn();
15253
15264
  init_atoms();
15254
15265
  init_useEventBus();
15266
+ log6 = logger.createLogger("almadar:ui:button-group");
15255
15267
  exports.ButtonGroup = ({
15256
15268
  children,
15257
15269
  primary,
@@ -15324,7 +15336,7 @@ var init_ButtonGroup = __esm({
15324
15336
  {
15325
15337
  variant: "ghost",
15326
15338
  onClick: () => {
15327
- console.log(`Filter clicked: ${filter.field}`);
15339
+ log6.debug("Filter clicked", { field: filter.field });
15328
15340
  },
15329
15341
  children: filter.label
15330
15342
  },
@@ -18102,8 +18114,8 @@ function ChoiceButton({
18102
18114
  className: cn(
18103
18115
  "w-full text-left px-4 py-2.5 rounded-md border transition-all duration-150",
18104
18116
  "flex items-center gap-2",
18105
- selected ? "bg-yellow-500/20 border-yellow-400 text-yellow-300" : "bg-white/5 border-white/10 text-[var(--color-foreground)] hover:bg-white/10 hover:border-white/30",
18106
- disabled && "opacity-40 cursor-not-allowed hover:bg-white/5 hover:border-white/10",
18117
+ selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
18118
+ disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
18107
18119
  className
18108
18120
  ),
18109
18121
  children: [
@@ -18112,7 +18124,7 @@ function ChoiceButton({
18112
18124
  {
18113
18125
  className: cn(
18114
18126
  "flex-shrink-0 font-mono font-bold text-sm",
18115
- selected ? "text-yellow-400" : "text-gray-500"
18127
+ selected ? "text-accent" : "text-muted-foreground"
18116
18128
  ),
18117
18129
  children: [
18118
18130
  index,
@@ -20316,7 +20328,7 @@ function DataGrid({
20316
20328
  onClick: handleActionClick(action, itemData),
20317
20329
  "data-testid": `action-${action.event}`,
20318
20330
  "data-row-id": String(itemData.id),
20319
- className: "text-error hover:bg-error/10 px-2",
20331
+ className: "text-error hover:text-error hover:bg-error/10 px-2",
20320
20332
  children: [
20321
20333
  action.icon && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: action.icon, size: "xs" }),
20322
20334
  action.label
@@ -21580,31 +21592,56 @@ var init_InputGroup = __esm({
21580
21592
  exports.InputGroup.displayName = "InputGroup";
21581
21593
  }
21582
21594
  });
21583
-
21584
- // lib/debug.ts
21595
+ function gateEnabled(level, ns = NAMESPACE) {
21596
+ return logger.isLogLevelEnabled(level, ns);
21597
+ }
21585
21598
  function isDebugEnabled() {
21586
- if (DEBUG_ENABLED) return true;
21587
- return typeof window !== "undefined" && window.__ALMADAR_DEBUG_VERIFY__ === true;
21599
+ return gateEnabled("DEBUG");
21588
21600
  }
21589
21601
  function debug(...args) {
21590
- if (isDebugEnabled()) {
21591
- console.log("[DEBUG]", ...args);
21602
+ if (!gateEnabled("DEBUG")) return;
21603
+ const [first, ...rest] = args;
21604
+ const message = typeof first === "string" ? first : "<debug>";
21605
+ if (rest.length === 0 && typeof first === "string") {
21606
+ log7.debug(message);
21607
+ } else {
21608
+ log7.debug(message, { args: rest.length > 0 ? formatArgs(rest) : formatArgs([first]) });
21592
21609
  }
21593
21610
  }
21594
21611
  function debugGroup(label) {
21595
- if (isDebugEnabled()) {
21596
- console.group(`[DEBUG] ${label}`);
21597
- }
21612
+ if (gateEnabled("DEBUG")) console.group(`[${NAMESPACE}] ${label}`);
21598
21613
  }
21599
21614
  function debugGroupEnd() {
21600
- if (isDebugEnabled()) {
21601
- console.groupEnd();
21615
+ if (gateEnabled("DEBUG")) console.groupEnd();
21616
+ }
21617
+ function formatArgs(values) {
21618
+ if (values.length === 1) return toLogMetaValue(values[0]);
21619
+ return values.map(toLogMetaValue);
21620
+ }
21621
+ function toLogMetaValue(v) {
21622
+ if (v === null || v === void 0) return v;
21623
+ if (v instanceof Error) return v;
21624
+ const t = typeof v;
21625
+ if (t === "string" || t === "number" || t === "boolean") return v;
21626
+ if (Array.isArray(v)) return v.map(toLogMetaValue);
21627
+ if (t === "object") {
21628
+ const out = {};
21629
+ for (const [k, val] of Object.entries(v)) {
21630
+ out[k] = toLogMetaValue(val);
21631
+ }
21632
+ return out;
21602
21633
  }
21634
+ return String(v);
21603
21635
  }
21604
- var DEBUG_ENABLED;
21636
+ var NAMESPACE, log7;
21605
21637
  var init_debug = __esm({
21606
21638
  "lib/debug.ts"() {
21607
- DEBUG_ENABLED = typeof window !== "undefined" && (localStorage.getItem("debug") === "true" || process.env.NODE_ENV === "development");
21639
+ NAMESPACE = "almadar:ui:debug";
21640
+ log7 = logger.createLogger(NAMESPACE);
21641
+ logger.createLogger("almadar:ui:debug:input");
21642
+ logger.createLogger("almadar:ui:debug:collision");
21643
+ logger.createLogger("almadar:ui:debug:physics");
21644
+ logger.createLogger("almadar:ui:debug:game-state");
21608
21645
  }
21609
21646
  });
21610
21647
  var isRelationsDebugEnabled; exports.RelationSelect = void 0;
@@ -23033,7 +23070,7 @@ function StatBadge({
23033
23070
  const I = resolveIcon(icon);
23034
23071
  return I ? /* @__PURE__ */ jsxRuntime.jsx(I, { className: "w-4 h-4" }) : icon;
23035
23072
  })() : icon }),
23036
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-400 font-medium", children: label }),
23073
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-medium", children: label }),
23037
23074
  format === "hearts" && max && /* @__PURE__ */ jsxRuntime.jsx(
23038
23075
  HealthBar,
23039
23076
  {
@@ -23060,7 +23097,7 @@ function StatBadge({
23060
23097
  animated: true
23061
23098
  }
23062
23099
  ),
23063
- format === "text" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold text-[var(--color-foreground)]", children: value })
23100
+ format === "text" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold text-foreground", children: value })
23064
23101
  ]
23065
23102
  }
23066
23103
  );
@@ -23078,11 +23115,11 @@ var init_StatBadge = __esm({
23078
23115
  lg: "text-base px-4 py-2"
23079
23116
  };
23080
23117
  variantMap2 = {
23081
- default: "bg-[var(--color-card)]/80 border-gray-700",
23082
- primary: "bg-blue-900/80 border-blue-700",
23083
- success: "bg-green-900/80 border-green-700",
23084
- warning: "bg-yellow-900/80 border-yellow-700",
23085
- danger: "bg-red-900/80 border-red-700"
23118
+ default: "bg-card/80 border-border text-foreground",
23119
+ primary: "bg-primary/15 border-primary/40 text-foreground",
23120
+ success: "bg-success/15 border-success/40 text-foreground",
23121
+ warning: "bg-warning/15 border-warning/40 text-foreground",
23122
+ danger: "bg-error/15 border-error/40 text-foreground"
23086
23123
  };
23087
23124
  StatBadge.displayName = "StatBadge";
23088
23125
  }
@@ -35991,9 +36028,45 @@ var init_List = __esm({
35991
36028
  exports.List.displayName = "List";
35992
36029
  }
35993
36030
  });
35994
- var DefaultEmptyDetail, MasterDetail;
36031
+ function MasterDetail({
36032
+ entity,
36033
+ masterFields,
36034
+ detailFields: _detailFields,
36035
+ // Captured but not used here - detail handled separately
36036
+ loading: externalLoading,
36037
+ isLoading: externalIsLoading,
36038
+ error: externalError,
36039
+ className,
36040
+ ...rest
36041
+ }) {
36042
+ const loading = externalLoading ?? false;
36043
+ const isLoading = externalIsLoading ?? false;
36044
+ const error = externalError ?? null;
36045
+ return /* @__PURE__ */ jsxRuntime.jsx(
36046
+ DataTable,
36047
+ {
36048
+ fields: masterFields,
36049
+ columns: masterFields,
36050
+ entity,
36051
+ isLoading: loading || isLoading,
36052
+ error,
36053
+ className,
36054
+ emptyTitle: "No items found",
36055
+ emptyDescription: "Create your first item to get started.",
36056
+ ...rest
36057
+ }
36058
+ );
36059
+ }
35995
36060
  var init_MasterDetail = __esm({
35996
- "components/organisms/layout/MasterDetail.tsx"() {
36061
+ "components/organisms/MasterDetail.tsx"() {
36062
+ "use client";
36063
+ init_DataTable();
36064
+ MasterDetail.displayName = "MasterDetail";
36065
+ }
36066
+ });
36067
+ var DefaultEmptyDetail; exports.MasterDetailLayout = void 0;
36068
+ var init_MasterDetailLayout = __esm({
36069
+ "components/organisms/layout/MasterDetailLayout.tsx"() {
35997
36070
  init_cn();
35998
36071
  init_Typography();
35999
36072
  DefaultEmptyDetail = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-full border-2 border-dashed border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -36004,7 +36077,7 @@ var init_MasterDetail = __esm({
36004
36077
  children: "Select an item to view details"
36005
36078
  }
36006
36079
  ) });
36007
- MasterDetail = ({
36080
+ exports.MasterDetailLayout = ({
36008
36081
  master,
36009
36082
  detail,
36010
36083
  emptyDetail,
@@ -36039,7 +36112,7 @@ var init_MasterDetail = __esm({
36039
36112
  }
36040
36113
  );
36041
36114
  };
36042
- MasterDetail.displayName = "MasterDetail";
36115
+ exports.MasterDetailLayout.displayName = "MasterDetailLayout";
36043
36116
  }
36044
36117
  });
36045
36118
  var COLUMN_CLASSES, ASPECT_CLASSES; exports.MediaGallery = void 0;
@@ -38576,7 +38649,7 @@ function getAllEvents(traits2) {
38576
38649
  }
38577
38650
  function EventDispatcherTab({ traits: traits2, schema }) {
38578
38651
  const eventBus = useEventBus();
38579
- const [log3, setLog] = React131__namespace.useState([]);
38652
+ const [log18, setLog] = React131__namespace.useState([]);
38580
38653
  const prevStatesRef = React131__namespace.useRef(/* @__PURE__ */ new Map());
38581
38654
  React131__namespace.useEffect(() => {
38582
38655
  for (const trait of traits2) {
@@ -38640,9 +38713,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
38640
38713
  /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: "Other Events (not available from current state)" }),
38641
38714
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
38642
38715
  ] }),
38643
- log3.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
38716
+ log18.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
38644
38717
  /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: "Recent Transitions" }),
38645
- /* @__PURE__ */ jsxRuntime.jsx(exports.Stack, { gap: "xs", children: log3.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "small", className: "font-mono text-xs", children: [
38718
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Stack, { gap: "xs", children: log18.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "small", className: "font-mono text-xs", children: [
38646
38719
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-400", children: entry.traitName }),
38647
38720
  " ",
38648
38721
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -40853,7 +40926,7 @@ var init_Sprite = __esm({
40853
40926
  }
40854
40927
  });
40855
40928
  exports.StatCard = void 0;
40856
- var init_StatCard2 = __esm({
40929
+ var init_StatCard = __esm({
40857
40930
  "components/organisms/StatCard.tsx"() {
40858
40931
  "use client";
40859
40932
  init_cn();
@@ -43213,6 +43286,7 @@ var init_component_registry_generated = __esm({
43213
43286
  init_LoadingState();
43214
43287
  init_MarkdownContent();
43215
43288
  init_MasterDetail();
43289
+ init_MasterDetailLayout();
43216
43290
  init_MatrixQuestion();
43217
43291
  init_MediaGallery();
43218
43292
  init_Meter();
@@ -43280,7 +43354,7 @@ var init_component_registry_generated = __esm({
43280
43354
  init_Stack();
43281
43355
  init_StarRating();
43282
43356
  init_StatBadge();
43283
- init_StatCard2();
43357
+ init_StatCard();
43284
43358
  init_StatDisplay();
43285
43359
  init_StateArchitectBoard();
43286
43360
  init_StateIndicator();
@@ -43507,6 +43581,7 @@ var init_component_registry_generated = __esm({
43507
43581
  "MapViewPattern": MapViewPattern,
43508
43582
  "MarkdownContent": exports.MarkdownContent,
43509
43583
  "MasterDetail": MasterDetail,
43584
+ "MasterDetailLayout": exports.MasterDetailLayout,
43510
43585
  "MatrixQuestion": exports.MatrixQuestion,
43511
43586
  "MediaGallery": exports.MediaGallery,
43512
43587
  "Menu": MenuPattern,
@@ -44606,7 +44681,7 @@ var init_atoms = __esm({
44606
44681
  init_ConfettiEffect();
44607
44682
  init_TypewriterText();
44608
44683
  init_SectionHeader();
44609
- init_StatCard();
44684
+ init_MarketingStatCard();
44610
44685
  init_ContentSection();
44611
44686
  init_PatternTile();
44612
44687
  init_AnimatedReveal();
@@ -44623,7 +44698,7 @@ init_molecules();
44623
44698
  // components/organisms/index.ts
44624
44699
  init_types3();
44625
44700
  init_DataTable();
44626
- init_StatCard2();
44701
+ init_StatCard();
44627
44702
  init_PageHeader();
44628
44703
  init_DetailPanel();
44629
44704
 
@@ -44761,41 +44836,7 @@ init_Split();
44761
44836
  init_Table();
44762
44837
  init_List();
44763
44838
  init_CardGrid();
44764
-
44765
- // components/organisms/MasterDetail.tsx
44766
- init_DataTable();
44767
- function MasterDetail2({
44768
- entity,
44769
- masterFields,
44770
- detailFields: _detailFields,
44771
- // Captured but not used here - detail handled separately
44772
- loading: externalLoading,
44773
- isLoading: externalIsLoading,
44774
- error: externalError,
44775
- className,
44776
- ...rest
44777
- }) {
44778
- const loading = externalLoading ?? false;
44779
- const isLoading = externalIsLoading ?? false;
44780
- const error = externalError ?? null;
44781
- return /* @__PURE__ */ jsxRuntime.jsx(
44782
- DataTable,
44783
- {
44784
- fields: masterFields,
44785
- columns: masterFields,
44786
- entity,
44787
- isLoading: loading || isLoading,
44788
- error,
44789
- className,
44790
- emptyTitle: "No items found",
44791
- emptyDescription: "Create your first item to get started.",
44792
- ...rest
44793
- }
44794
- );
44795
- }
44796
- MasterDetail2.displayName = "MasterDetail";
44797
-
44798
- // components/organisms/index.ts
44839
+ init_MasterDetail();
44799
44840
  init_ConfirmDialog();
44800
44841
  init_WizardContainer();
44801
44842
  init_OrbitalVisualization();
@@ -44813,6 +44854,7 @@ init_types2();
44813
44854
 
44814
44855
  // components/organisms/layout/index.ts
44815
44856
  init_SplitPane();
44857
+ init_MasterDetailLayout();
44816
44858
  init_DashboardGrid();
44817
44859
  init_TabbedContainer();
44818
44860
 
@@ -45942,6 +45984,7 @@ init_AboutPageTemplate();
45942
45984
 
45943
45985
  // components/index.ts
45944
45986
  init_cn();
45987
+ var log8 = logger.createLogger("almadar:ui:orbital-history");
45945
45988
  function useOrbitalHistory(options) {
45946
45989
  const { appId, authToken, userId, onHistoryChange, onRevertSuccess } = options;
45947
45990
  const getHeaders = React131.useCallback(() => {
@@ -46003,7 +46046,7 @@ function useOrbitalHistory(options) {
46003
46046
  setCurrentVersion(mergedTimeline[0].version);
46004
46047
  }
46005
46048
  } catch (err) {
46006
- console.error("[useOrbitalHistory] Failed to load history:", err);
46049
+ log8.error("Failed to load history", { error: err instanceof Error ? err : String(err) });
46007
46050
  setError(err instanceof Error ? err.message : "Failed to load history");
46008
46051
  } finally {
46009
46052
  setIsLoading(false);
@@ -46036,7 +46079,7 @@ function useOrbitalHistory(options) {
46036
46079
  error: data.error || "Unknown error during revert"
46037
46080
  };
46038
46081
  } catch (err) {
46039
- console.error("[useOrbitalHistory] Failed to revert:", err);
46082
+ log8.error("Failed to revert", { error: err instanceof Error ? err : String(err) });
46040
46083
  return {
46041
46084
  success: false,
46042
46085
  error: err instanceof Error ? err.message : "Failed to revert"
@@ -46060,6 +46103,7 @@ function useOrbitalHistory(options) {
46060
46103
  refresh
46061
46104
  };
46062
46105
  }
46106
+ var log9 = logger.createLogger("almadar:ui:filesystem");
46063
46107
  function useFileSystem() {
46064
46108
  const [status, setStatus] = React131.useState("idle");
46065
46109
  const [error, setError] = React131.useState(null);
@@ -46074,7 +46118,7 @@ function useFileSystem() {
46074
46118
  setError(null);
46075
46119
  setIsLoading(true);
46076
46120
  try {
46077
- console.log("[useFileSystem] Booting WebContainer...");
46121
+ log9.debug("Booting WebContainer");
46078
46122
  await new Promise((resolve) => setTimeout(resolve, 100));
46079
46123
  setStatus("ready");
46080
46124
  } catch (err) {
@@ -46137,7 +46181,7 @@ function useFileSystem() {
46137
46181
  setFiles(newTree);
46138
46182
  setStatus("running");
46139
46183
  } catch (err) {
46140
- console.error("[useFileSystem] Failed to mount files:", err);
46184
+ log9.error("Failed to mount files", { error: err instanceof Error ? err : String(err) });
46141
46185
  } finally {
46142
46186
  setIsLoading(false);
46143
46187
  }
@@ -46178,7 +46222,7 @@ function useFileSystem() {
46178
46222
  const path = contentArg !== void 0 ? pathOrContent : selectedPath;
46179
46223
  const content = contentArg !== void 0 ? contentArg : pathOrContent;
46180
46224
  if (!path) {
46181
- console.warn("[useFileSystem] updateContent called without path and no file selected");
46225
+ log9.warn("updateContent called without path and no file selected");
46182
46226
  return;
46183
46227
  }
46184
46228
  setFileContents((prev) => {
@@ -46194,14 +46238,14 @@ function useFileSystem() {
46194
46238
  setSelectedFile((prev) => prev ? { ...prev, content, isDirty: true } : null);
46195
46239
  }, []);
46196
46240
  const refreshTree = React131.useCallback(async () => {
46197
- console.log("[useFileSystem] Refreshing tree");
46241
+ log9.debug("Refreshing tree");
46198
46242
  }, []);
46199
46243
  const runCommand = React131.useCallback(async (command) => {
46200
- console.log("[useFileSystem] Running command:", command);
46244
+ log9.debug("Running command", { command });
46201
46245
  return { exitCode: 0, output: "" };
46202
46246
  }, []);
46203
46247
  const startDevServer = React131.useCallback(async () => {
46204
- console.log("[useFileSystem] Starting dev server");
46248
+ log9.debug("Starting dev server");
46205
46249
  setPreviewUrl("http://localhost:5173");
46206
46250
  }, []);
46207
46251
  return {
@@ -46224,6 +46268,7 @@ function useFileSystem() {
46224
46268
  startDevServer
46225
46269
  };
46226
46270
  }
46271
+ var log10 = logger.createLogger("almadar:ui:extensions");
46227
46272
  var defaultManifest = {
46228
46273
  languages: {
46229
46274
  typescript: { extensions: [".ts", ".tsx"], icon: "ts", color: "#3178c6" },
@@ -46242,7 +46287,7 @@ function useExtensions(options) {
46242
46287
  const [isLoading, setIsLoading] = React131.useState(false);
46243
46288
  const [error, setError] = React131.useState(null);
46244
46289
  const loadExtension = React131.useCallback(async (extensionId) => {
46245
- console.log("[useExtensions] Loading extension:", extensionId);
46290
+ log10.debug("Loading extension", { extensionId });
46246
46291
  }, []);
46247
46292
  const loadExtensions = React131.useCallback(async () => {
46248
46293
  setIsLoading(true);
@@ -46314,6 +46359,7 @@ function useExtensions(options) {
46314
46359
  getExtensionForFile
46315
46360
  };
46316
46361
  }
46362
+ var log11 = logger.createLogger("almadar:ui:file-editor");
46317
46363
  function useFileEditor(options) {
46318
46364
  const { extensions, fileSystem, onSchemaUpdate } = options;
46319
46365
  const [openFiles, setOpenFiles] = React131.useState([]);
@@ -46338,7 +46384,7 @@ function useFileEditor(options) {
46338
46384
  setOpenFiles((prev) => [...prev, newFile]);
46339
46385
  setActiveFilePath(path);
46340
46386
  } catch (err) {
46341
- console.error("[useFileEditor] Failed to open file:", err);
46387
+ log11.error("Failed to open file", { error: err instanceof Error ? err : String(err) });
46342
46388
  }
46343
46389
  }, [openFiles, fileSystem, extensions]);
46344
46390
  const closeFile = React131.useCallback((path) => {
@@ -46399,7 +46445,7 @@ function useFileEditor(options) {
46399
46445
  }
46400
46446
  }
46401
46447
  } catch (err) {
46402
- console.error("[useFileEditor] Failed to save file:", err);
46448
+ log11.error("Failed to save file", { error: err instanceof Error ? err : String(err) });
46403
46449
  } finally {
46404
46450
  setIsSaving(false);
46405
46451
  }
@@ -46428,6 +46474,7 @@ function useFileEditor(options) {
46428
46474
  saveAllFiles
46429
46475
  };
46430
46476
  }
46477
+ var log12 = logger.createLogger("almadar:ui:compile");
46431
46478
  function useCompile() {
46432
46479
  const [isCompiling, setIsCompiling] = React131.useState(false);
46433
46480
  const [stage, setStage] = React131.useState("idle");
@@ -46438,7 +46485,7 @@ function useCompile() {
46438
46485
  setStage("compiling");
46439
46486
  setError(null);
46440
46487
  try {
46441
- console.log("[useCompile] Compiling schema:", schema.name);
46488
+ log12.debug("Compiling schema", { name: schema.name });
46442
46489
  const result = {
46443
46490
  success: true,
46444
46491
  files: []
@@ -46464,6 +46511,7 @@ function useCompile() {
46464
46511
  compileSchema
46465
46512
  };
46466
46513
  }
46514
+ var log13 = logger.createLogger("almadar:ui:preview");
46467
46515
  function usePreview(options) {
46468
46516
  const [previewUrl, setPreviewUrl] = React131.useState(null);
46469
46517
  const [isLoading, setIsLoading] = React131.useState(!!options?.appId);
@@ -46497,17 +46545,17 @@ function usePreview(options) {
46497
46545
  setIsLoading(false);
46498
46546
  return;
46499
46547
  }
46500
- console.log("[usePreview] Setting up preview for app:", appId);
46548
+ log13.debug("Setting up preview for app", { appId });
46501
46549
  setPreviewUrl(`/api/orbitals/${appId}`);
46502
46550
  setIsLoading(false);
46503
46551
  }, [options?.appId]);
46504
46552
  const startPreview = React131.useCallback(async () => {
46505
- console.log("[usePreview] startPreview called");
46553
+ log13.debug("startPreview called");
46506
46554
  }, []);
46507
46555
  const stopPreview = React131.useCallback(async () => {
46508
46556
  setIsLoading(true);
46509
46557
  try {
46510
- console.log("[usePreview] Stopping preview server...");
46558
+ log13.debug("Stopping preview server");
46511
46559
  setPreviewUrl(null);
46512
46560
  setApp(null);
46513
46561
  } finally {
@@ -46516,15 +46564,15 @@ function usePreview(options) {
46516
46564
  }, []);
46517
46565
  const refresh = React131.useCallback(async () => {
46518
46566
  if (!previewUrl) return;
46519
- console.log("[usePreview] Refreshing preview...");
46567
+ log13.debug("Refreshing preview");
46520
46568
  setPreviewUrl(`${previewUrl.split("?")[0]}?t=${Date.now()}`);
46521
46569
  }, [previewUrl]);
46522
46570
  const handleRefresh = React131.useCallback(async () => {
46523
- console.log("[usePreview] Handle refresh...");
46571
+ log13.debug("Handle refresh");
46524
46572
  await refresh();
46525
46573
  }, [refresh]);
46526
46574
  const handleReset = React131.useCallback(async () => {
46527
- console.log("[usePreview] Resetting preview...");
46575
+ log13.debug("Resetting preview");
46528
46576
  setError(null);
46529
46577
  setLoadError(null);
46530
46578
  setErrorToast(null);
@@ -46558,6 +46606,7 @@ function usePreview(options) {
46558
46606
  dismissErrorToast
46559
46607
  };
46560
46608
  }
46609
+ var log14 = logger.createLogger("almadar:ui:agent-chat");
46561
46610
  function useAgentChat(options) {
46562
46611
  const [messages, setMessages] = React131.useState([]);
46563
46612
  const [status, setStatus] = React131.useState("idle");
@@ -46580,7 +46629,7 @@ function useAgentChat(options) {
46580
46629
  timestamp: Date.now()
46581
46630
  };
46582
46631
  setMessages((prev) => [...prev, userMessage]);
46583
- console.log("[useAgentChat] Sending message:", content);
46632
+ log14.debug("Sending message", { content });
46584
46633
  const assistantMessage = {
46585
46634
  id: (Date.now() + 1).toString(),
46586
46635
  role: "assistant",
@@ -46603,7 +46652,7 @@ function useAgentChat(options) {
46603
46652
  setError(null);
46604
46653
  const skillName = Array.isArray(skill) ? skill[0] : skill;
46605
46654
  try {
46606
- console.log("[useAgentChat] Starting generation:", skillName, prompt, genOptions);
46655
+ log14.debug("Starting generation", () => ({ skillName, prompt, genOptions: JSON.stringify(genOptions) }));
46607
46656
  await new Promise((resolve) => setTimeout(resolve, 100));
46608
46657
  setStatus("complete");
46609
46658
  options?.onComplete?.();
@@ -46615,10 +46664,10 @@ function useAgentChat(options) {
46615
46664
  }
46616
46665
  }, [options]);
46617
46666
  const continueConversation = React131.useCallback(async (message) => {
46618
- console.log("[useAgentChat] Continue conversation", message);
46667
+ log14.debug("Continue conversation", { message: Array.isArray(message) ? message : [message] });
46619
46668
  }, []);
46620
46669
  const resumeWithDecision = React131.useCallback(async (decisions) => {
46621
- console.log("[useAgentChat] Resume with decision:", decisions);
46670
+ log14.debug("Resume with decision", () => ({ decisions: JSON.stringify(decisions), count: decisions.length }));
46622
46671
  setInterrupt(null);
46623
46672
  }, []);
46624
46673
  const cancel = React131.useCallback(() => {
@@ -46655,6 +46704,7 @@ function useAgentChat(options) {
46655
46704
  clearHistory
46656
46705
  };
46657
46706
  }
46707
+ var log15 = logger.createLogger("almadar:ui:validation");
46658
46708
  function useValidation() {
46659
46709
  const [result, setResult] = React131.useState(null);
46660
46710
  const [isValidating, setIsValidating] = React131.useState(false);
@@ -46668,7 +46718,7 @@ function useValidation() {
46668
46718
  setStage("validating");
46669
46719
  setProgressMessage("Validating schema...");
46670
46720
  try {
46671
- console.log("[useValidation] Validating app:", appId);
46721
+ log15.debug("Validating app", { appId });
46672
46722
  const validationResult = {
46673
46723
  valid: true,
46674
46724
  errors: [],
@@ -46721,6 +46771,7 @@ function useValidation() {
46721
46771
  reset
46722
46772
  };
46723
46773
  }
46774
+ var log16 = logger.createLogger("almadar:ui:deep-agent");
46724
46775
  function useDeepAgentGeneration() {
46725
46776
  const [requests, setRequests] = React131.useState([]);
46726
46777
  const [currentRequest, setCurrentRequest] = React131.useState(null);
@@ -46744,7 +46795,7 @@ function useDeepAgentGeneration() {
46744
46795
  setCurrentRequest(request);
46745
46796
  setRequests((prev) => [...prev, request]);
46746
46797
  try {
46747
- console.log("[useDeepAgentGeneration] Generating from prompt:", prompt);
46798
+ log16.debug("Generating from prompt", { prompt });
46748
46799
  await new Promise((resolve) => setTimeout(resolve, 100));
46749
46800
  request.status = "completed";
46750
46801
  setCurrentRequest(request);
@@ -46764,7 +46815,7 @@ function useDeepAgentGeneration() {
46764
46815
  }
46765
46816
  }, []);
46766
46817
  const startGeneration = React131.useCallback(async (skill, prompt, _options) => {
46767
- console.log("[useDeepAgentGeneration] Starting generation with skill:", skill);
46818
+ log16.debug("Starting generation with skill", { skill });
46768
46819
  await generate(prompt);
46769
46820
  }, [generate]);
46770
46821
  const cancelGeneration = React131.useCallback(() => {
@@ -46786,7 +46837,7 @@ function useDeepAgentGeneration() {
46786
46837
  setIsComplete(false);
46787
46838
  }, []);
46788
46839
  const submitInterruptDecisions = React131.useCallback((decisions) => {
46789
- console.log("[useDeepAgentGeneration] Submitting interrupt decisions:", decisions);
46840
+ log16.debug("Submitting interrupt decisions", () => ({ decisions: JSON.stringify(decisions), count: decisions.length }));
46790
46841
  setInterrupt(null);
46791
46842
  }, []);
46792
46843
  return {
@@ -46808,7 +46859,7 @@ function useDeepAgentGeneration() {
46808
46859
 
46809
46860
  // hooks/index.ts
46810
46861
  init_useEventBus();
46811
- var slotLog2 = logger.createLogger("almadar:ui:useUISlots");
46862
+ var log17 = logger.createLogger("almadar:ui:ui-slots");
46812
46863
  var DEFAULT_SOURCE_KEY = "__default__";
46813
46864
  var MULTI_SOURCE_STACK_TRAIT = "__multi_source_stack__";
46814
46865
  var ALL_SLOTS2 = [
@@ -46890,7 +46941,7 @@ function useUISlotManager() {
46890
46941
  try {
46891
46942
  callback(slot, content);
46892
46943
  } catch (error) {
46893
- console.error("[UISlots] Subscriber error:", error);
46944
+ log17.error("Subscriber error", { error: error instanceof Error ? error : String(error) });
46894
46945
  }
46895
46946
  });
46896
46947
  }, []);
@@ -46902,7 +46953,7 @@ function useUISlotManager() {
46902
46953
  try {
46903
46954
  callback(content);
46904
46955
  } catch (error) {
46905
- console.error(`[UISlots] Trait subscriber error (${traitName}):`, error);
46956
+ log17.error("Trait subscriber error", { traitName, error: error instanceof Error ? error : String(error) });
46906
46957
  }
46907
46958
  });
46908
46959
  },
@@ -46953,9 +47004,12 @@ function useUISlotManager() {
46953
47004
  const slotSources = prev[config.target] ?? {};
46954
47005
  const existing = slotSources[sourceKey];
46955
47006
  if (existing && existing.priority > content.priority) {
46956
- console.warn(
46957
- `[UISlots] Slot "${config.target}" source "${sourceKey}" already has higher priority content (${existing.priority} > ${content.priority})`
46958
- );
47007
+ log17.warn("Slot already has higher priority content", {
47008
+ slot: config.target,
47009
+ sourceKey,
47010
+ existingPriority: existing.priority,
47011
+ newPriority: content.priority
47012
+ });
46959
47013
  return prev;
46960
47014
  }
46961
47015
  const nextSources = {
@@ -46967,7 +47021,7 @@ function useUISlotManager() {
46967
47021
  indexTraitRender(content.sourceTrait, content);
46968
47022
  notifyTraitSubscribers(content.sourceTrait, content);
46969
47023
  }
46970
- slotLog2.info("slot:written", {
47024
+ log17.info("slot:written", {
46971
47025
  slot: config.target,
46972
47026
  sourceKey,
46973
47027
  sourceTrait: content.sourceTrait,
@@ -47012,7 +47066,7 @@ function useUISlotManager() {
47012
47066
  setSources((prev) => {
47013
47067
  const slotSources = prev[slot];
47014
47068
  if (!slotSources || !(sourceKey in slotSources)) {
47015
- slotLog2.debug("slot:clear-noop", { slot, sourceTrait, reason: !slotSources ? "no-slot" : "no-source" });
47069
+ log17.debug("slot:clear-noop", { slot, sourceTrait, reason: !slotSources ? "no-slot" : "no-source" });
47016
47070
  return prev;
47017
47071
  }
47018
47072
  const content = slotSources[sourceKey];
@@ -47028,7 +47082,7 @@ function useUISlotManager() {
47028
47082
  }
47029
47083
  const nextSources = { ...slotSources };
47030
47084
  delete nextSources[sourceKey];
47031
- slotLog2.info("slot:cleared", { slot, sourceTrait, lastPatternType: content.pattern });
47085
+ log17.info("slot:cleared", { slot, sourceTrait, lastPatternType: content.pattern });
47032
47086
  notifySubscribers(slot, aggregateSlot(nextSources));
47033
47087
  return { ...prev, [slot]: nextSources };
47034
47088
  });
@@ -47605,7 +47659,7 @@ exports.InventoryPanel = InventoryPanel;
47605
47659
  exports.IsometricCanvas = IsometricCanvas;
47606
47660
  exports.ItemSlot = ItemSlot;
47607
47661
  exports.MapView = MapView;
47608
- exports.MasterDetail = MasterDetail2;
47662
+ exports.MasterDetail = MasterDetail;
47609
47663
  exports.MiniMap = MiniMap;
47610
47664
  exports.NegotiatorBoard = NegotiatorBoard;
47611
47665
  exports.NotifyListener = NotifyListener;