@almadar/ui 6.10.0 → 6.12.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.
Files changed (35) hide show
  1. package/dist/{EntityBindingContext-Y4zXyNJZ.d.cts → EntityBindingContext-D5lRu6p1.d.cts} +11 -0
  2. package/dist/{EntityBindingContext-Y4zXyNJZ.d.ts → EntityBindingContext-D5lRu6p1.d.ts} +11 -0
  3. package/dist/{GameAudioProvider-Dk_Y3LN3.d.cts → GameAudioProvider-D8GynTNq.d.cts} +1 -1
  4. package/dist/{GameAudioProvider-Ctceau1s.d.ts → GameAudioProvider-Dozqx4sL.d.ts} +1 -1
  5. package/dist/avl/index.cjs +250 -106
  6. package/dist/avl/index.js +209 -65
  7. package/dist/{avl-schema-parser-DncJLEn9.d.ts → avl-schema-parser-DX-aVCCm.d.ts} +1 -1
  8. package/dist/{avl-schema-parser-FQ1474v8.d.cts → avl-schema-parser-PVu8rgsy.d.cts} +1 -1
  9. package/dist/{cn-C7fvp9gH.d.ts → cn-Do5gsPBm.d.cts} +2 -100
  10. package/dist/{cn-DnLYahyL.d.cts → cn-Do5gsPBm.d.ts} +2 -100
  11. package/dist/components/index.cjs +103 -68
  12. package/dist/components/index.d.cts +44 -20
  13. package/dist/components/index.d.ts +44 -20
  14. package/dist/components/index.js +64 -29
  15. package/dist/lib/drawable/three/index.d.cts +3 -4
  16. package/dist/lib/drawable/three/index.d.ts +3 -4
  17. package/dist/lib/index.cjs +7 -23
  18. package/dist/lib/index.d.cts +6 -28
  19. package/dist/lib/index.d.ts +6 -28
  20. package/dist/lib/index.js +5 -23
  21. package/dist/{paintDispatch-B5ObLnUv.d.ts → paintDispatch-CK5uwYEq.d.cts} +50 -3
  22. package/dist/{paintDispatch-D3R8NNmV.d.cts → paintDispatch-CK5uwYEq.d.ts} +50 -3
  23. package/dist/providers/index.cjs +129 -78
  24. package/dist/providers/index.d.cts +5 -3
  25. package/dist/providers/index.d.ts +5 -3
  26. package/dist/providers/index.js +90 -39
  27. package/dist/runtime/index.cjs +249 -105
  28. package/dist/runtime/index.d.cts +27 -5
  29. package/dist/runtime/index.d.ts +27 -5
  30. package/dist/runtime/index.js +208 -64
  31. package/dist/verificationRegistry-BLsjb1oU.d.cts +110 -0
  32. package/dist/verificationRegistry-D8bHWD8Q.d.ts +110 -0
  33. package/package.json +7 -7
  34. package/dist/types-B3nHgnMG.d.cts +0 -51
  35. package/dist/types-B3nHgnMG.d.ts +0 -51
@@ -3,19 +3,19 @@ import React__default, { ReactNode, ErrorInfo } from 'react';
3
3
  import { Asset, EventKey, EventPayload, EventEmit, AssetUrl, FieldValue, EntityRow, EntityRole, AnimationName, SpriteDirection, AnimationDef, ScenePos, Camera, SoundEntry, EntityWith, TraitConfigValue, EventListen, JsonValue, AssetCatalog, JsonObject, EventPayloadValue, DeclaredTraitConfig, TraitConfig, ControlValue, OrbitalSchema, Trait, OrbitalEntity, FormSubmitPayload, UISlot, EditFocus, TraceSubagent, TraceActivity, TraceChatMessage } from '@almadar/core';
4
4
  export { AnimationDef, AnimationName, AudioManifest, BusEvent, BusEventListener, BusEventSource, BusEventListener as EventListener, SoundEntry, SpriteDirection, UISlot, Unsubscribe } from '@almadar/core';
5
5
  import { LucideIcon } from 'lucide-react';
6
- import { C as ColorToken, U as UiError, P as Point, L as LinkAction, I as ImageSource } from '../types-B3nHgnMG.js';
7
- export { R as Rect } from '../types-B3nHgnMG.js';
6
+ import { C as ColorToken, U as UiError, D as DrawableNode, P as Point, a as Projector, F as FxOverlayItem, M as MeshShapeKind, b as MeshMaterial, c as DrawGroupProps, d as DrawTextProps, e as DrawMeshProps, L as LinkAction, I as ImageSource } from '../paintDispatch-CK5uwYEq.js';
7
+ export { f as FxOverlayKind, R as Rect } from '../paintDispatch-CK5uwYEq.js';
8
8
  import { SExpr } from '@almadar/evaluator';
9
- import { U as UnitAnimationState, F as FacingDirection, S as SpriteSheetUrls, g as SpriteFrameDims, R as ResolvedFrame, h as CanvasLighting, i as CanvasPost, a as IsometricUnit, j as CameraState, k as FieldInfo, l as OrbitalTraitInfo, m as OrbitalPageInfo, T as TraitLevelData, E as ExternalLink } from '../avl-schema-parser-DncJLEn9.js';
10
- export { B as BoardTile, G as GameAction, n as GamePhase, o as GameState, p as GameUnit, b as IsometricFeature, I as IsometricTile, P as Position, q as UnitTrait, r as calculateAttackTargets, s as calculateValidMoves, t as createInitialGameState } from '../avl-schema-parser-DncJLEn9.js';
11
- import { D as DrawableNode, P as Projector, F as FxOverlayItem, M as MeshShapeKind, a as MeshMaterial, b as DrawGroupProps, c as DrawTextProps, d as DrawMeshProps } from '../paintDispatch-B5ObLnUv.js';
12
- export { e as FxOverlayKind } from '../paintDispatch-B5ObLnUv.js';
13
- export { G as GameAudioContext, a as GameAudioContextValue, e as GameAudioControls, b as GameAudioProvider, c as GameAudioProviderProps, U as UseGameAudioOptions, f as useGameAudio, u as useGameAudioContext } from '../GameAudioProvider-Ctceau1s.js';
14
- import { i as EditorMotion, j as EditorOperator, C as ContentSegment, L as LessonSegment, a5 as InteractiveOrbitalType, c as DomLayoutData, e as DomStateNode, V as VisualizerConfig, f as DomTransitionLabel } from '../cn-C7fvp9gH.js';
15
- export { a6 as BloomLevel, a7 as BloomQuizBlock, a8 as BloomQuizBlockProps, a9 as MixedSegment, u as cn, Q as parseLessonSegments, aa as parseMarkdownWithCodeBlocks } from '../cn-C7fvp9gH.js';
9
+ import { U as UnitAnimationState, F as FacingDirection, S as SpriteSheetUrls, g as SpriteFrameDims, R as ResolvedFrame, h as CanvasLighting, i as CanvasPost, a as IsometricUnit, j as CameraState, k as FieldInfo, l as OrbitalTraitInfo, m as OrbitalPageInfo, T as TraitLevelData, E as ExternalLink } from '../avl-schema-parser-DX-aVCCm.js';
10
+ export { B as BoardTile, G as GameAction, n as GamePhase, o as GameState, p as GameUnit, b as IsometricFeature, I as IsometricTile, P as Position, q as UnitTrait, r as calculateAttackTargets, s as calculateValidMoves, t as createInitialGameState } from '../avl-schema-parser-DX-aVCCm.js';
11
+ export { G as GameAudioContext, a as GameAudioContextValue, e as GameAudioControls, b as GameAudioProvider, c as GameAudioProviderProps, U as UseGameAudioOptions, f as useGameAudio, u as useGameAudioContext } from '../GameAudioProvider-Dozqx4sL.js';
12
+ import { i as EditorMotion, j as EditorOperator, C as ContentSegment, L as LessonSegment, F as InteractiveOrbitalType, c as DomLayoutData, e as DomStateNode, V as VisualizerConfig, f as DomTransitionLabel } from '../cn-Do5gsPBm.js';
13
+ export { G as BloomLevel, H as BloomQuizBlock, J as BloomQuizBlockProps, M as MixedSegment, o as cn, x as parseLessonSegments, K as parseMarkdownWithCodeBlocks } from '../cn-Do5gsPBm.js';
14
+ import { LanguageCode } from '@almadar/core/i18n';
16
15
  import { EmojiPickPayload, SelectionChangePayload, ItemActionPayload } from '@almadar/core/patterns';
17
16
  import { b as SlotContent, d as SlotPropValue } from '../useUISlots-GNwGLlW2.js';
18
17
  export { D as DEFAULT_SLOTS, S as SlotAnimation, a as SlotChangeCallback, c as SlotRenderConfig, U as UISlotManager, u as useUISlotManager } from '../useUISlots-GNwGLlW2.js';
18
+ import '../verificationRegistry-D8bHWD8Q.js';
19
19
  export { ALMADAR_DND_MIME, AuthContextValue, AuthUser, CanvasGestureCallbacks, CanvasGestureHandlers, CompileResult, CompileStage, DragReorderResult, DraggablePayload, Extension, ExtensionManifest, FileSystemFile, FileSystemStatus, GitHubRepo, GitHubStatus, HistoryChangeSummary, HistoryTimelineItem, I18nContextValue, I18nProvider, InfiniteScrollOptions, InfiniteScrollResult, LongPressHandlers, LongPressOptions, OpenFile, Positioned, PullToRefreshOptions, PullToRefreshResult, QuerySingletonEntity, QuerySingletonResult, QuerySingletonState, QueryState, RenderInterpolationHandle, RenderInterpolationOptions, RevertResult, SelectedFile, SharedEntityStore, SharedEntityStoreContext, SharedEntitySubscriber, SharedEntityWriter, SwipeGestureOptions, SwipeGestureResult, SwipeHandlers, TapRevealOptions, TapRevealResult, TraitListenSpec, TranslateFunction, UseCanvasGesturesOptions, UseCompileResult, UseDraggableOptions, UseDraggableResult, UseDropZoneOptions, UseDropZoneResult, UseExtensionsOptions, UseExtensionsResult, UseFileEditorOptions, UseFileEditorResult, UseFileSystemResult, UseOrbitalHistoryOptions, UseOrbitalHistoryResult, createSharedEntityStore, createTranslate, parseQueryBinding, runTickFrame, useAgentChat, useAuthContext, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInfiniteScroll, useLongPress, useMediaQuery, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate, useUIEvents, useValidation } from '../hooks/index.js';
20
20
  export { E as EditorKeyEvent, a as KeyCaptureEntry, K as KeyCaptureTable, U as UseKeyboardRouterOptions, k as keyChord, m as mergeCaptureTables, u as useEmitEvent, b as useEventBus, c as useEventListener, d as useKeyboardRouter } from '../useKeyboardRouter-B1pIi9jo.js';
21
21
  export { E as EventBusContextType } from '../event-bus-types-Bl78kokd.js';
@@ -5648,6 +5648,15 @@ interface CodeBlockProps {
5648
5648
  wordWrap?: boolean;
5649
5649
  /** Multiple files shown as tabs */
5650
5650
  files?: readonly CodeViewerFile[];
5651
+ /**
5652
+ * Show the program in these natural languages as tabs, translating on the
5653
+ * fly. Only meaningful for `language` 'lolo' / 'orb'; ignored otherwise.
5654
+ *
5655
+ * Fewer than two entries renders exactly as without the prop. `editable`
5656
+ * wins: editing a translation is not a thing, so the English source is
5657
+ * shown and this is ignored.
5658
+ */
5659
+ naturalLanguages?: readonly LanguageCode[];
5651
5660
  /** Action badges in the toolbar */
5652
5661
  actions?: readonly CodeViewerAction[];
5653
5662
  /** Loading state */
@@ -8331,6 +8340,8 @@ interface SwipeAction {
8331
8340
  icon?: IconInput;
8332
8341
  variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
8333
8342
  event: EventKey;
8343
+ /** Payload included with the `event` emit
8344
+ * @payloadFor event */
8334
8345
  eventPayload?: EventPayload;
8335
8346
  }
8336
8347
  interface SwipeableRowProps {
@@ -8338,7 +8349,7 @@ interface SwipeableRowProps {
8338
8349
  rightActions?: SwipeAction[];
8339
8350
  threshold?: number;
8340
8351
  children: React__default.ReactNode;
8341
- itemData?: EventPayload;
8352
+ itemData?: EntityRow;
8342
8353
  className?: string;
8343
8354
  }
8344
8355
  declare const SwipeableRow: React__default.FC<SwipeableRowProps>;
@@ -10422,17 +10433,30 @@ declare const WizardContainer: React__default.FC<WizardContainerProps>;
10422
10433
  * - 4f (61+): Multi-lobe - Violet
10423
10434
  */
10424
10435
 
10425
- interface OrbitalVisualizationProps {
10426
- /** Full KFlow schema object */
10427
- schema?: {
10428
- dataEntities?: JsonValue[];
10429
- ui?: {
10430
- pages?: {
10431
- sections?: JsonValue[];
10432
- }[];
10433
- };
10434
- traits?: JsonValue[];
10436
+ /** One page's contribution to {@link OrbitalVisualizationSchemaSummary} — only
10437
+ * a section COUNT feeds the complexity score (`calculateComplexity`); no
10438
+ * per-section field is ever read, so a count is the honest declared shape. */
10439
+ interface OrbitalVisualizationPageSummary {
10440
+ /** Section count for this page. */
10441
+ sections?: number;
10442
+ }
10443
+ /** A complexity-scoring SUMMARY of a KFlow schema — counts only, never the
10444
+ * full entity/trait/section objects (`calculateComplexity` reads nothing
10445
+ * but `.length`/count fields). The caller computes these counts from
10446
+ * whatever full schema it holds; this component never needs the rows. */
10447
+ interface OrbitalVisualizationSchemaSummary {
10448
+ /** Data-entity count. */
10449
+ dataEntities?: number;
10450
+ ui?: {
10451
+ pages?: OrbitalVisualizationPageSummary[];
10435
10452
  };
10453
+ /** Trait count. */
10454
+ traits?: number;
10455
+ }
10456
+ interface OrbitalVisualizationProps {
10457
+ /** Complexity-scoring summary of a KFlow schema (counts only — see
10458
+ * {@link OrbitalVisualizationSchemaSummary}). */
10459
+ schema?: OrbitalVisualizationSchemaSummary;
10436
10460
  /** Direct complexity override (1-100+) */
10437
10461
  complexity?: number;
10438
10462
  /** Size of the visualization */
@@ -12,14 +12,15 @@ import { useTranslate } from '@almadar/ui/hooks';
12
12
  import { useUISlots, useTheme } from '@almadar/ui/context';
13
13
  import { evaluate, createMinimalContext } from '@almadar/evaluator';
14
14
  import { createContextFromBindings, interpolateValue } from '@almadar/runtime';
15
- import { UI_SLOTS, mergeEntityFrame, isFileValue, isInlineTrait, isSecretConfigType, isRenderBindingMarker } from '@almadar/core';
15
+ import { UI_SLOTS, getNestedValue, mergeEntityFrame, isFileValue, isInlineTrait, isSecretConfigType, isRenderBindingMarker } from '@almadar/core';
16
16
  import { createPortal } from 'react-dom';
17
17
  import { wrapCallbackForEvent, perfStart, perfEnd } from '@almadar/runtime/ui';
18
18
  import { Link, Outlet, useLocation } from 'react-router-dom';
19
19
  import ELK from 'elkjs/lib/elk.bundled.js';
20
20
  import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light.js';
21
21
  import dark from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js';
22
- import { orbLanguage, loloLanguage, ORB_COLORS } from '@almadar/syntax';
22
+ import { orbLanguage, loloLanguage, ORB_COLORS, translateLolo, translateOrb } from '@almadar/syntax';
23
+ import { coreTables } from '@almadar/core/i18n';
23
24
  import langJson from 'react-syntax-highlighter/dist/esm/languages/prism/json.js';
24
25
  import langJavascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript.js';
25
26
  import langTypescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript.js';
@@ -14039,6 +14040,15 @@ function buildLineProps(errorLines, extraClassName) {
14039
14040
  };
14040
14041
  };
14041
14042
  }
14043
+ function translateProgram(source, language, lang) {
14044
+ if (lang === "en") return source;
14045
+ if (language === "lolo") return translateLolo(source, lang);
14046
+ if (language === "orb") {
14047
+ const translated = translateOrb(source, lang);
14048
+ return typeof translated === "string" ? translated : source;
14049
+ }
14050
+ return source;
14051
+ }
14042
14052
  var dynamicallyLoaded, codeLanguageLoader, orbStyleOverrides, orbStyle, loloStyleOverrides, loloStyle, log5, CODE_LANGUAGES, CODE_LANGUAGE_SET, DIFF_STYLES, DIFF_STYLE_FALLBACK, LINE_PROPS_FN, HIDDEN_LINE_NUMBERS, HIGHLIGHT_CAPACITY_BYTES, MONO_FONT_FAMILY, VIEWER_LINE_NUMBER_STYLE, CodeBlock;
14043
14053
  var init_CodeBlock = __esm({
14044
14054
  "components/core/molecules/markdown/CodeBlock.tsx"() {
@@ -14304,6 +14314,7 @@ var init_CodeBlock = __esm({
14304
14314
  showLineNumbers = false,
14305
14315
  wordWrap = false,
14306
14316
  files,
14317
+ naturalLanguages,
14307
14318
  actions,
14308
14319
  isLoading = false,
14309
14320
  error,
@@ -14350,7 +14361,48 @@ var init_CodeBlock = __esm({
14350
14361
  "replace"
14351
14362
  ]
14352
14363
  }) => {
14353
- const code = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
14364
+ const englishCode = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
14365
+ const naturalTabs = !editable && naturalLanguages && naturalLanguages.length > 1 ? naturalLanguages : void 0;
14366
+ const [naturalLanguage, setNaturalLanguage] = useState(() => naturalTabs?.[0] ?? "en");
14367
+ const activeNaturalLanguage = naturalTabs?.includes(naturalLanguage) === true ? naturalLanguage : naturalTabs?.[0] ?? "en";
14368
+ const translationCache = useMemo(() => /* @__PURE__ */ new Map(), [englishCode, files]);
14369
+ const translateFor = useCallback(
14370
+ (source, sourceLanguage, cacheKey) => {
14371
+ if (activeNaturalLanguage === "en") return source;
14372
+ const key = `${cacheKey}|${sourceLanguage}|${activeNaturalLanguage}`;
14373
+ const hit = translationCache.get(key);
14374
+ if (hit !== void 0) return hit;
14375
+ const translated = translateProgram(source, sourceLanguage, activeNaturalLanguage);
14376
+ translationCache.set(key, translated);
14377
+ return translated;
14378
+ },
14379
+ [translationCache, activeNaturalLanguage]
14380
+ );
14381
+ const code = translateFor(englishCode, language, "code");
14382
+ const naturalTabItems = naturalTabs?.map((lang) => ({
14383
+ id: `lang-${lang}`,
14384
+ label: coreTables[lang].meta.name,
14385
+ content: null
14386
+ }));
14387
+ const naturalTabStrip = naturalTabs && naturalTabItems ? /* @__PURE__ */ jsx(
14388
+ Box,
14389
+ {
14390
+ className: "border-b border-border",
14391
+ dir: coreTables[activeNaturalLanguage].meta.rtl ? "rtl" : "ltr",
14392
+ "data-testid": "codeblock-language-tabs",
14393
+ children: /* @__PURE__ */ jsx(
14394
+ Tabs,
14395
+ {
14396
+ tabs: naturalTabItems,
14397
+ activeTab: `lang-${activeNaturalLanguage}`,
14398
+ onTabChange: (id) => {
14399
+ const next = naturalTabs.find((lang) => `lang-${lang}` === id);
14400
+ if (next) setNaturalLanguage(next);
14401
+ }
14402
+ }
14403
+ )
14404
+ }
14405
+ ) : null;
14354
14406
  const activeStyle = resolveHighlightStyle(language);
14355
14407
  const overCapacity = code.length > HIGHLIGHT_CAPACITY_BYTES;
14356
14408
  const plainCodeColor = plainCodeColorOf(activeStyle);
@@ -14363,8 +14415,8 @@ var init_CodeBlock = __esm({
14363
14415
  const [wrap, setWrap] = useState(wordWrap);
14364
14416
  const [activeFileIndex, setActiveFileIndex] = useState(0);
14365
14417
  const activeFile = files?.[activeFileIndex];
14366
- const activeCode = activeFile?.code ?? code;
14367
14418
  const activeLanguage = activeFile?.language ?? language;
14419
+ const activeCode = activeFile ? translateFor(activeFile.code, activeLanguage, `file-${activeFileIndex}`) : code;
14368
14420
  const languageReady = useLanguageReady(activeLanguage);
14369
14421
  const viewerStyle = resolveHighlightStyle(activeLanguage);
14370
14422
  const viewerPlainCodeColor = plainCodeColorOf(viewerStyle);
@@ -14849,6 +14901,7 @@ var init_CodeBlock = __esm({
14849
14901
  content: null
14850
14902
  }));
14851
14903
  return /* @__PURE__ */ jsx(Card, { className: cn("overflow-hidden", className), children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
14904
+ naturalTabStrip,
14852
14905
  tabItems && tabItems.length > 1 && /* @__PURE__ */ jsx(Box, { className: "border-b border-border", children: /* @__PURE__ */ jsx(
14853
14906
  Tabs,
14854
14907
  {
@@ -14910,7 +14963,7 @@ var init_CodeBlock = __esm({
14910
14963
  ]
14911
14964
  }
14912
14965
  ),
14913
- /* @__PURE__ */ jsx(Box, { className: "overflow-auto bg-muted/20", style: { maxHeight }, children: diffLines ? /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column" }, className: "font-mono text-xs", children: diffRowElements }) : /* @__PURE__ */ jsx("div", { className: "font-mono text-xs", children: viewerHighlightedElement }) })
14966
+ /* @__PURE__ */ jsx(Box, { className: "overflow-auto bg-muted/20", style: { maxHeight }, dir: "ltr", children: diffLines ? /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column" }, className: "font-mono text-xs", children: diffRowElements }) : /* @__PURE__ */ jsx("div", { className: "font-mono text-xs", children: viewerHighlightedElement }) })
14914
14967
  ] }) });
14915
14968
  }
14916
14969
  const hasHeader = showLanguageBadge || effectiveCopy;
@@ -14937,6 +14990,7 @@ var init_CodeBlock = __esm({
14937
14990
  ]
14938
14991
  }
14939
14992
  ),
14993
+ naturalTabStrip,
14940
14994
  editable ? (
14941
14995
  /* GAP-77 / GAP-82 / GAP-83: editable mode = transparent textarea on
14942
14996
  top of a Prism-highlighted SyntaxHighlighter overlay.
@@ -15088,6 +15142,7 @@ var init_CodeBlock = __esm({
15088
15142
  {
15089
15143
  ref: scrollRef,
15090
15144
  onCopy: handleSelectionCopy,
15145
+ dir: "ltr",
15091
15146
  style: {
15092
15147
  flex: 1,
15093
15148
  minHeight: 0,
@@ -15106,7 +15161,7 @@ var init_CodeBlock = __esm({
15106
15161
  )
15107
15162
  ] });
15108
15163
  },
15109
- (prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.showCopy === next.showCopy && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange && prev.errorLines === next.errorLines && prev.mode === next.mode && prev.title === next.title && prev.diff === next.diff && prev.files === next.files && prev.actions === next.actions && prev.isLoading === next.isLoading && prev.error === next.error && prev.editorId === next.editorId && prev.onEditorFocus === next.onEditorFocus && prev.onEditorBlur === next.onEditorBlur && prev.onMotion === next.onMotion && prev.onOperate === next.onOperate && prev.onInsertText === next.onInsertText && prev.onSetMode === next.onSetMode && prev.motions === next.motions && prev.operators === next.operators
15164
+ (prev, next) => prev.language === next.language && prev.code === next.code && prev.showCopyButton === next.showCopyButton && prev.showCopy === next.showCopy && prev.maxHeight === next.maxHeight && prev.foldable === next.foldable && prev.editable === next.editable && prev.onChange === next.onChange && prev.errorLines === next.errorLines && prev.mode === next.mode && prev.title === next.title && prev.diff === next.diff && prev.files === next.files && prev.naturalLanguages === next.naturalLanguages && prev.actions === next.actions && prev.isLoading === next.isLoading && prev.error === next.error && prev.editorId === next.editorId && prev.onEditorFocus === next.onEditorFocus && prev.onEditorBlur === next.onEditorBlur && prev.onMotion === next.onMotion && prev.onOperate === next.onOperate && prev.onInsertText === next.onInsertText && prev.onSetMode === next.onSetMode && prev.motions === next.motions && prev.operators === next.operators
15110
15165
  );
15111
15166
  CodeBlock.displayName = "CodeBlock";
15112
15167
  }
@@ -18801,26 +18856,6 @@ var init_ButtonGroup = __esm({
18801
18856
  ButtonGroup.displayName = "ButtonGroup";
18802
18857
  }
18803
18858
  });
18804
- function getNestedValue(obj, path) {
18805
- if (obj === null || obj === void 0 || !path) {
18806
- return void 0;
18807
- }
18808
- if (!path.includes(".")) {
18809
- return obj[path];
18810
- }
18811
- const parts = path.split(".");
18812
- let value = obj;
18813
- for (const part of parts) {
18814
- if (value === null || value === void 0) {
18815
- return void 0;
18816
- }
18817
- if (typeof value !== "object" || Array.isArray(value)) {
18818
- return void 0;
18819
- }
18820
- value = value[part];
18821
- }
18822
- return value;
18823
- }
18824
18859
  function resolveImageUrl(value) {
18825
18860
  if (typeof value === "string") {
18826
18861
  return value;
@@ -43009,11 +43044,11 @@ var init_WizardContainer = __esm({
43009
43044
  });
43010
43045
  function calculateComplexity(schema) {
43011
43046
  if (!schema) return 1;
43012
- const entities = schema.dataEntities?.length || 0;
43047
+ const entities = schema.dataEntities || 0;
43013
43048
  const pages = schema.ui?.pages?.length || 0;
43014
- const traits2 = schema.traits?.length || 0;
43049
+ const traits2 = schema.traits || 0;
43015
43050
  const sections = schema.ui?.pages?.reduce(
43016
- (acc, page) => acc + (page.sections?.length || 0),
43051
+ (acc, page) => acc + (page.sections || 0),
43017
43052
  0
43018
43053
  ) || 0;
43019
43054
  return entities * 3 + pages * 2 + traits2 * 2 + sections * 1;
@@ -1,13 +1,12 @@
1
- import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature, A as ApplicationLevelData, O as OrbitalLevelData, T as TraitLevelData, c as TransitionLevelData } from '../../../avl-schema-parser-FQ1474v8.cjs';
2
- export { d as Canvas3DHost, e as Canvas3DHostHandle, f as Canvas3DHostProps, d as GameCanvas3D, U as UnitAnimationState } from '../../../avl-schema-parser-FQ1474v8.cjs';
1
+ import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature, A as ApplicationLevelData, O as OrbitalLevelData, T as TraitLevelData, c as TransitionLevelData } from '../../../avl-schema-parser-PVu8rgsy.cjs';
2
+ export { d as Canvas3DHost, e as Canvas3DHostHandle, f as Canvas3DHostProps, d as GameCanvas3D, U as UnitAnimationState } from '../../../avl-schema-parser-PVu8rgsy.cjs';
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { Component, ReactNode, ErrorInfo } from 'react';
5
5
  import * as THREE from 'three';
6
6
  import { QuadraticBezierCurve3 } from 'three';
7
7
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
8
8
  import { JsonObject, EventEmit, OrbitalSchema } from '@almadar/core';
9
- import '../../../paintDispatch-D3R8NNmV.cjs';
10
- import '../../../types-B3nHgnMG.cjs';
9
+ import '../../../paintDispatch-CK5uwYEq.cjs';
11
10
 
12
11
  /**
13
12
  * Scene3D
@@ -1,13 +1,12 @@
1
- import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature, A as ApplicationLevelData, O as OrbitalLevelData, T as TraitLevelData, c as TransitionLevelData } from '../../../avl-schema-parser-DncJLEn9.js';
2
- export { d as Canvas3DHost, e as Canvas3DHostHandle, f as Canvas3DHostProps, d as GameCanvas3D, U as UnitAnimationState } from '../../../avl-schema-parser-DncJLEn9.js';
1
+ import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature, A as ApplicationLevelData, O as OrbitalLevelData, T as TraitLevelData, c as TransitionLevelData } from '../../../avl-schema-parser-DX-aVCCm.js';
2
+ export { d as Canvas3DHost, e as Canvas3DHostHandle, f as Canvas3DHostProps, d as GameCanvas3D, U as UnitAnimationState } from '../../../avl-schema-parser-DX-aVCCm.js';
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { Component, ReactNode, ErrorInfo } from 'react';
5
5
  import * as THREE from 'three';
6
6
  import { QuadraticBezierCurve3 } from 'three';
7
7
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
8
8
  import { JsonObject, EventEmit, OrbitalSchema } from '@almadar/core';
9
- import '../../../paintDispatch-B5ObLnUv.js';
10
- import '../../../types-B3nHgnMG.js';
9
+ import '../../../paintDispatch-CK5uwYEq.js';
11
10
 
12
11
  /**
13
12
  * Scene3D
@@ -619,8 +619,9 @@ function getTransitionsForTrait(traitName) {
619
619
  return getState().transitions.filter((t) => t.traitName === traitName);
620
620
  }
621
621
  function recordServerResponse(orbitalName, event, response) {
622
+ const { effectResults, ...responseFields } = response;
622
623
  const serverResponse = {
623
- ...response,
624
+ ...responseFields,
624
625
  orbitalName,
625
626
  timestamp: Date.now()
626
627
  };
@@ -630,7 +631,7 @@ function recordServerResponse(orbitalName, event, response) {
630
631
  from: "server",
631
632
  to: "server",
632
633
  event,
633
- effects: [],
634
+ effects: effectResults ?? [],
634
635
  serverResponse,
635
636
  timestamp: Date.now()
636
637
  };
@@ -927,26 +928,6 @@ function sortRows(rows, field, direction = "asc") {
927
928
  const dir = direction === "desc" ? -1 : 1;
928
929
  return [...rows].sort((a, b) => dir * compareCellValues(a?.[field], b?.[field]));
929
930
  }
930
- function getNestedValue(obj, path) {
931
- if (obj === null || obj === void 0 || !path) {
932
- return void 0;
933
- }
934
- if (!path.includes(".")) {
935
- return obj[path];
936
- }
937
- const parts = path.split(".");
938
- let value = obj;
939
- for (const part of parts) {
940
- if (value === null || value === void 0) {
941
- return void 0;
942
- }
943
- if (typeof value !== "object" || Array.isArray(value)) {
944
- return void 0;
945
- }
946
- value = value[part];
947
- }
948
- return value;
949
- }
950
931
  function resolveImageUrl(value) {
951
932
  if (typeof value === "string") {
952
933
  return value;
@@ -2523,6 +2504,10 @@ Object.defineProperty(exports, "perfTimeAsync", {
2523
2504
  enumerable: true,
2524
2505
  get: function () { return ui.perfTimeAsync; }
2525
2506
  });
2507
+ Object.defineProperty(exports, "getNestedValue", {
2508
+ enumerable: true,
2509
+ get: function () { return core.getNestedValue; }
2510
+ });
2526
2511
  exports.ApiError = ApiError;
2527
2512
  exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
2528
2513
  exports.EDITOR_MOTIONS = EDITOR_MOTIONS;
@@ -2584,7 +2569,6 @@ exports.getEventsBySource = getEventsBySource;
2584
2569
  exports.getEventsByType = getEventsByType;
2585
2570
  exports.getGuardEvaluationsForTrait = getGuardEvaluationsForTrait;
2586
2571
  exports.getGuardHistory = getGuardHistory;
2587
- exports.getNestedValue = getNestedValue;
2588
2572
  exports.getRecentEvents = getRecentEvents;
2589
2573
  exports.getRecentGuardEvaluations = getRecentGuardEvaluations;
2590
2574
  exports.getSnapshot = getSnapshot;
@@ -1,12 +1,12 @@
1
- export { A as ApplyOperatorInput, a as ApplyOperatorResult, C as ContentSegment, D as DEFAULT_CONFIG, b as DomEntityBox, c as DomLayoutData, d as DomOutputsBox, e as DomStateNode, f as DomTransitionLabel, g as DomTransitionPath, E as EDITOR_MOTIONS, h as EDITOR_OPERATORS, i as EditorMotion, j as EditorOperator, k as EntityDefinition, I as INDENT_UNIT, L as LessonSegment, R as RenderOptions, S as StateDefinition, l as StateMachineDefinition, T as TraitSnapshotGetter, m as TransitionDefinition, V as VisualizerConfig, n as applyMotion, o as applyOperator, p as bindCanvasCapture, q as bindEventBus, r as bindLastDrawables, s as bindTraitStateGetter, t as clearVerification, u as cn, v as extractOutputsFromTransitions, w as extractStateMachine, x as formatGuard, y as getAllChecks, z as getBridgeHealth, B as getEffectSummary, F as getSnapshot, G as getSummary, H as getTraitSnapshots, J as getTransitions, K as getTransitionsForTrait, M as isEditorMotion, N as isEditorOperator, O as motionRange, P as parseContentSegments, Q as parseLessonSegments, U as parseMarkdownWithCodeBlocks, W as recordServerResponse, X as recordTransition, Y as registerCheck, Z as registerTraitSnapshot, _ as renderStateMachineToDomData, $ as renderStateMachineToSvg, a0 as subscribeToVerification, a1 as updateAssetStatus, a2 as updateBridgeHealth, a3 as updateCheck, a4 as waitForTransition } from '../cn-DnLYahyL.cjs';
2
- import { FieldValue, EntityRow, EventPayload } from '@almadar/core';
3
- export { AssetLoadStatus, BridgeHealth, CheckStatus, EffectTrace, EventLogEntry, OrbitalVerificationAPI, ServerResponseTrace, TraitStateSnapshot, TransitionTrace, VerificationCheck, VerificationSnapshot, VerificationSummary } from '@almadar/core';
1
+ export { A as ApplyOperatorInput, a as ApplyOperatorResult, C as ContentSegment, D as DEFAULT_CONFIG, b as DomEntityBox, c as DomLayoutData, d as DomOutputsBox, e as DomStateNode, f as DomTransitionLabel, g as DomTransitionPath, E as EDITOR_MOTIONS, h as EDITOR_OPERATORS, i as EditorMotion, j as EditorOperator, k as EntityDefinition, I as INDENT_UNIT, L as LessonSegment, R as RenderOptions, S as StateDefinition, l as StateMachineDefinition, T as TransitionDefinition, V as VisualizerConfig, m as applyMotion, n as applyOperator, o as cn, p as extractOutputsFromTransitions, q as extractStateMachine, r as formatGuard, s as getEffectSummary, t as isEditorMotion, u as isEditorOperator, v as motionRange, w as parseContentSegments, x as parseLessonSegments, y as parseMarkdownWithCodeBlocks, z as renderStateMachineToDomData, B as renderStateMachineToSvg } from '../cn-Do5gsPBm.cjs';
2
+ import { FieldValue, EntityRow } from '@almadar/core';
3
+ export { AssetLoadStatus, BridgeHealth, CheckStatus, EffectTrace, EventLogEntry, OrbitalVerificationAPI, ServerResponseTrace, TraitStateSnapshot, TransitionTrace, VerificationCheck, VerificationSnapshot, VerificationSummary, getNestedValue } from '@almadar/core';
4
4
  export { p as profilerOnRender, u as usePerfBuffer } from '../perf-DaVdsbU0.cjs';
5
+ export { T as TraitSnapshotGetter, b as bindCanvasCapture, a as bindEventBus, c as bindLastDrawables, d as bindTraitStateGetter, e as clearVerification, g as getAllChecks, f as getBridgeHealth, h as getSnapshot, i as getSummary, j as getTraitSnapshots, k as getTransitions, l as getTransitionsForTrait, r as recordServerResponse, m as recordTransition, n as registerCheck, o as registerTraitSnapshot, s as subscribeToVerification, u as updateAssetStatus, p as updateBridgeHealth, q as updateCheck, w as waitForTransition } from '../verificationRegistry-BLsjb1oU.cjs';
5
6
  export { PERF_NAMESPACE, PerfEntry, clearPerf, perfEnd, perfGauge, perfStart, perfTime, perfTimeAsync } from '@almadar/runtime/ui';
6
7
  import 'react';
7
- import '../paintDispatch-D3R8NNmV.cjs';
8
- import '../types-B3nHgnMG.cjs';
9
8
  import 'clsx';
9
+ import '../paintDispatch-CK5uwYEq.cjs';
10
10
 
11
11
  /**
12
12
  * Trait Registry - Tracks active traits and their state machines for debugging
@@ -389,28 +389,6 @@ declare function compareCellValues(a: FieldValue | undefined, b: FieldValue | un
389
389
  */
390
390
  declare function sortRows<T extends Record<string, FieldValue | undefined>>(rows: readonly T[], field?: string, direction?: SortDirection): readonly T[];
391
391
 
392
- /**
393
- * Get Nested Value Utility
394
- *
395
- * Safely retrieves nested values from objects using dot-notation paths.
396
- * Used by display components to support relation field access like "company.name".
397
- *
398
- * @packageDocumentation
399
- */
400
- /**
401
- * Get a nested value from an object using dot-notation path.
402
- *
403
- * @param obj - The object to traverse
404
- * @param path - Dot-notation path (e.g., "company.name", "address.city")
405
- * @returns The value at the path, or undefined if not found
406
- *
407
- * @example
408
- * const data = { company: { name: "Acme Corp", address: { city: "NYC" } } };
409
- * getNestedValue(data, "company.name"); // => "Acme Corp"
410
- * getNestedValue(data, "company.address.city"); // => "NYC"
411
- * getNestedValue(data, "company.missing"); // => undefined
412
- */
413
- declare function getNestedValue(obj: EventPayload | Record<string, FieldValue | undefined> | null | undefined, path: string): FieldValue | undefined;
414
392
  /**
415
393
  * Resolve a field value that may be a raw URL string (legacy `image`/`url` fields) or a
416
394
  * structured `file`-typed {@link FileValue} into the URL an `<img src>` can use. Gallery/card
@@ -615,4 +593,4 @@ declare function eightPointedStarPath(cx: number, cy: number, outerR: number, in
615
593
  */
616
594
  declare function arrowheadPath(size: number): string;
617
595
 
618
- export { ApiError, type CommandSendPump, type DebugEvent, type DebugEventType, type EntitySnapshot, type EntityState, type GuardContext, type GuardEvaluation, JAZARI_COLORS, type JazariArmLayout, type JazariEffectInfo, type JazariGearLayout, type JazariGuardInfo, type JazariLayout, type LayoutInput, type LayoutState, type LayoutTransition, type PersistentEntityInfo, type RuntimeEntity, type SortDirection, type TickExecution, type TickSendRelay, type TraitDebugInfo, type TraitGuard, type TraitTransition, type ValueFormat, apiClient, arrowheadPath, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, formatDate, formatDateTime, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllTicks, getAllTraits, getDebugEvents, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getNestedValue, getRecentEvents, getRecentGuardEvaluations, getTick, getTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, pipeIconPath, recordGuardEvaluation, registerTick, registerTrait, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, toggleDebug, unregisterTick, unregisterTrait, updateGuardResult, updateTickExecution, updateTraitState };
596
+ export { ApiError, type CommandSendPump, type DebugEvent, type DebugEventType, type EntitySnapshot, type EntityState, type GuardContext, type GuardEvaluation, JAZARI_COLORS, type JazariArmLayout, type JazariEffectInfo, type JazariGearLayout, type JazariGuardInfo, type JazariLayout, type LayoutInput, type LayoutState, type LayoutTransition, type PersistentEntityInfo, type RuntimeEntity, type SortDirection, type TickExecution, type TickSendRelay, type TraitDebugInfo, type TraitGuard, type TraitTransition, type ValueFormat, apiClient, arrowheadPath, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, formatDate, formatDateTime, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllTicks, getAllTraits, getDebugEvents, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getRecentEvents, getRecentGuardEvaluations, getTick, getTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, pipeIconPath, recordGuardEvaluation, registerTick, registerTrait, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, toggleDebug, unregisterTick, unregisterTrait, updateGuardResult, updateTickExecution, updateTraitState };
@@ -1,12 +1,12 @@
1
- export { A as ApplyOperatorInput, a as ApplyOperatorResult, C as ContentSegment, D as DEFAULT_CONFIG, b as DomEntityBox, c as DomLayoutData, d as DomOutputsBox, e as DomStateNode, f as DomTransitionLabel, g as DomTransitionPath, E as EDITOR_MOTIONS, h as EDITOR_OPERATORS, i as EditorMotion, j as EditorOperator, k as EntityDefinition, I as INDENT_UNIT, L as LessonSegment, R as RenderOptions, S as StateDefinition, l as StateMachineDefinition, T as TraitSnapshotGetter, m as TransitionDefinition, V as VisualizerConfig, n as applyMotion, o as applyOperator, p as bindCanvasCapture, q as bindEventBus, r as bindLastDrawables, s as bindTraitStateGetter, t as clearVerification, u as cn, v as extractOutputsFromTransitions, w as extractStateMachine, x as formatGuard, y as getAllChecks, z as getBridgeHealth, B as getEffectSummary, F as getSnapshot, G as getSummary, H as getTraitSnapshots, J as getTransitions, K as getTransitionsForTrait, M as isEditorMotion, N as isEditorOperator, O as motionRange, P as parseContentSegments, Q as parseLessonSegments, U as parseMarkdownWithCodeBlocks, W as recordServerResponse, X as recordTransition, Y as registerCheck, Z as registerTraitSnapshot, _ as renderStateMachineToDomData, $ as renderStateMachineToSvg, a0 as subscribeToVerification, a1 as updateAssetStatus, a2 as updateBridgeHealth, a3 as updateCheck, a4 as waitForTransition } from '../cn-C7fvp9gH.js';
2
- import { FieldValue, EntityRow, EventPayload } from '@almadar/core';
3
- export { AssetLoadStatus, BridgeHealth, CheckStatus, EffectTrace, EventLogEntry, OrbitalVerificationAPI, ServerResponseTrace, TraitStateSnapshot, TransitionTrace, VerificationCheck, VerificationSnapshot, VerificationSummary } from '@almadar/core';
1
+ export { A as ApplyOperatorInput, a as ApplyOperatorResult, C as ContentSegment, D as DEFAULT_CONFIG, b as DomEntityBox, c as DomLayoutData, d as DomOutputsBox, e as DomStateNode, f as DomTransitionLabel, g as DomTransitionPath, E as EDITOR_MOTIONS, h as EDITOR_OPERATORS, i as EditorMotion, j as EditorOperator, k as EntityDefinition, I as INDENT_UNIT, L as LessonSegment, R as RenderOptions, S as StateDefinition, l as StateMachineDefinition, T as TransitionDefinition, V as VisualizerConfig, m as applyMotion, n as applyOperator, o as cn, p as extractOutputsFromTransitions, q as extractStateMachine, r as formatGuard, s as getEffectSummary, t as isEditorMotion, u as isEditorOperator, v as motionRange, w as parseContentSegments, x as parseLessonSegments, y as parseMarkdownWithCodeBlocks, z as renderStateMachineToDomData, B as renderStateMachineToSvg } from '../cn-Do5gsPBm.js';
2
+ import { FieldValue, EntityRow } from '@almadar/core';
3
+ export { AssetLoadStatus, BridgeHealth, CheckStatus, EffectTrace, EventLogEntry, OrbitalVerificationAPI, ServerResponseTrace, TraitStateSnapshot, TransitionTrace, VerificationCheck, VerificationSnapshot, VerificationSummary, getNestedValue } from '@almadar/core';
4
4
  export { p as profilerOnRender, u as usePerfBuffer } from '../perf-DaVdsbU0.js';
5
+ export { T as TraitSnapshotGetter, b as bindCanvasCapture, a as bindEventBus, c as bindLastDrawables, d as bindTraitStateGetter, e as clearVerification, g as getAllChecks, f as getBridgeHealth, h as getSnapshot, i as getSummary, j as getTraitSnapshots, k as getTransitions, l as getTransitionsForTrait, r as recordServerResponse, m as recordTransition, n as registerCheck, o as registerTraitSnapshot, s as subscribeToVerification, u as updateAssetStatus, p as updateBridgeHealth, q as updateCheck, w as waitForTransition } from '../verificationRegistry-D8bHWD8Q.js';
5
6
  export { PERF_NAMESPACE, PerfEntry, clearPerf, perfEnd, perfGauge, perfStart, perfTime, perfTimeAsync } from '@almadar/runtime/ui';
6
7
  import 'react';
7
- import '../paintDispatch-B5ObLnUv.js';
8
- import '../types-B3nHgnMG.js';
9
8
  import 'clsx';
9
+ import '../paintDispatch-CK5uwYEq.js';
10
10
 
11
11
  /**
12
12
  * Trait Registry - Tracks active traits and their state machines for debugging
@@ -389,28 +389,6 @@ declare function compareCellValues(a: FieldValue | undefined, b: FieldValue | un
389
389
  */
390
390
  declare function sortRows<T extends Record<string, FieldValue | undefined>>(rows: readonly T[], field?: string, direction?: SortDirection): readonly T[];
391
391
 
392
- /**
393
- * Get Nested Value Utility
394
- *
395
- * Safely retrieves nested values from objects using dot-notation paths.
396
- * Used by display components to support relation field access like "company.name".
397
- *
398
- * @packageDocumentation
399
- */
400
- /**
401
- * Get a nested value from an object using dot-notation path.
402
- *
403
- * @param obj - The object to traverse
404
- * @param path - Dot-notation path (e.g., "company.name", "address.city")
405
- * @returns The value at the path, or undefined if not found
406
- *
407
- * @example
408
- * const data = { company: { name: "Acme Corp", address: { city: "NYC" } } };
409
- * getNestedValue(data, "company.name"); // => "Acme Corp"
410
- * getNestedValue(data, "company.address.city"); // => "NYC"
411
- * getNestedValue(data, "company.missing"); // => undefined
412
- */
413
- declare function getNestedValue(obj: EventPayload | Record<string, FieldValue | undefined> | null | undefined, path: string): FieldValue | undefined;
414
392
  /**
415
393
  * Resolve a field value that may be a raw URL string (legacy `image`/`url` fields) or a
416
394
  * structured `file`-typed {@link FileValue} into the URL an `<img src>` can use. Gallery/card
@@ -615,4 +593,4 @@ declare function eightPointedStarPath(cx: number, cy: number, outerR: number, in
615
593
  */
616
594
  declare function arrowheadPath(size: number): string;
617
595
 
618
- export { ApiError, type CommandSendPump, type DebugEvent, type DebugEventType, type EntitySnapshot, type EntityState, type GuardContext, type GuardEvaluation, JAZARI_COLORS, type JazariArmLayout, type JazariEffectInfo, type JazariGearLayout, type JazariGuardInfo, type JazariLayout, type LayoutInput, type LayoutState, type LayoutTransition, type PersistentEntityInfo, type RuntimeEntity, type SortDirection, type TickExecution, type TickSendRelay, type TraitDebugInfo, type TraitGuard, type TraitTransition, type ValueFormat, apiClient, arrowheadPath, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, formatDate, formatDateTime, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllTicks, getAllTraits, getDebugEvents, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getNestedValue, getRecentEvents, getRecentGuardEvaluations, getTick, getTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, pipeIconPath, recordGuardEvaluation, registerTick, registerTrait, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, toggleDebug, unregisterTick, unregisterTrait, updateGuardResult, updateTickExecution, updateTraitState };
596
+ export { ApiError, type CommandSendPump, type DebugEvent, type DebugEventType, type EntitySnapshot, type EntityState, type GuardContext, type GuardEvaluation, JAZARI_COLORS, type JazariArmLayout, type JazariEffectInfo, type JazariGearLayout, type JazariGuardInfo, type JazariLayout, type LayoutInput, type LayoutState, type LayoutTransition, type PersistentEntityInfo, type RuntimeEntity, type SortDirection, type TickExecution, type TickSendRelay, type TraitDebugInfo, type TraitGuard, type TraitTransition, type ValueFormat, apiClient, arrowheadPath, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, formatDate, formatDateTime, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllTicks, getAllTraits, getDebugEvents, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getRecentEvents, getRecentGuardEvaluations, getTick, getTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, pipeIconPath, recordGuardEvaluation, registerTick, registerTrait, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, toggleDebug, unregisterTick, unregisterTrait, updateGuardResult, updateTickExecution, updateTraitState };
package/dist/lib/index.js CHANGED
@@ -5,6 +5,7 @@ import { useSyncExternalStore } from 'react';
5
5
  import { perfStore, pushPerfEntry } from '@almadar/runtime/ui';
6
6
  export { PERF_NAMESPACE, clearPerf, perfEnd, perfGauge, perfStart, perfTime, perfTimeAsync } from '@almadar/runtime/ui';
7
7
  import { isFileValue } from '@almadar/core';
8
+ export { getNestedValue } from '@almadar/core';
8
9
 
9
10
  var __defProp = Object.defineProperty;
10
11
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -618,8 +619,9 @@ function getTransitionsForTrait(traitName) {
618
619
  return getState().transitions.filter((t) => t.traitName === traitName);
619
620
  }
620
621
  function recordServerResponse(orbitalName, event, response) {
622
+ const { effectResults, ...responseFields } = response;
621
623
  const serverResponse = {
622
- ...response,
624
+ ...responseFields,
623
625
  orbitalName,
624
626
  timestamp: Date.now()
625
627
  };
@@ -629,7 +631,7 @@ function recordServerResponse(orbitalName, event, response) {
629
631
  from: "server",
630
632
  to: "server",
631
633
  event,
632
- effects: [],
634
+ effects: effectResults ?? [],
633
635
  serverResponse,
634
636
  timestamp: Date.now()
635
637
  };
@@ -926,26 +928,6 @@ function sortRows(rows, field, direction = "asc") {
926
928
  const dir = direction === "desc" ? -1 : 1;
927
929
  return [...rows].sort((a, b) => dir * compareCellValues(a?.[field], b?.[field]));
928
930
  }
929
- function getNestedValue(obj, path) {
930
- if (obj === null || obj === void 0 || !path) {
931
- return void 0;
932
- }
933
- if (!path.includes(".")) {
934
- return obj[path];
935
- }
936
- const parts = path.split(".");
937
- let value = obj;
938
- for (const part of parts) {
939
- if (value === null || value === void 0) {
940
- return void 0;
941
- }
942
- if (typeof value !== "object" || Array.isArray(value)) {
943
- return void 0;
944
- }
945
- value = value[part];
946
- }
947
- return value;
948
- }
949
931
  function resolveImageUrl(value) {
950
932
  if (typeof value === "string") {
951
933
  return value;
@@ -2494,4 +2476,4 @@ function applyOperator(input) {
2494
2476
  }
2495
2477
  }
2496
2478
 
2497
- export { ApiError, DEFAULT_CONFIG, EDITOR_MOTIONS, EDITOR_OPERATORS, INDENT_UNIT, JAZARI_COLORS, apiClient, applyMotion, applyOperator, arrowheadPath, bindCanvasCapture, bindEventBus, bindLastDrawables, bindTraitStateGetter, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, clearVerification, cn, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, extractOutputsFromTransitions, extractStateMachine, formatDate, formatDateTime, formatGuard, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllChecks, getAllTicks, getAllTraits, getBridgeHealth, getDebugEvents, getEffectSummary, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getNestedValue, getRecentEvents, getRecentGuardEvaluations, getSnapshot, getSummary, getTick, getTrait, getTraitSnapshots, getTransitions, getTransitionsForTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, isEditorMotion, isEditorOperator, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, motionRange, onDebugToggle, parseContentSegments, parseLessonSegments, parseMarkdownWithCodeBlocks, pipeIconPath, profilerOnRender, recordGuardEvaluation, recordServerResponse, recordTransition, registerCheck, registerTick, registerTrait, registerTraitSnapshot, renderStateMachineToDomData, renderStateMachineToSvg, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, subscribeToVerification, toggleDebug, unregisterTick, unregisterTrait, updateAssetStatus, updateBridgeHealth, updateCheck, updateGuardResult, updateTickExecution, updateTraitState, usePerfBuffer, waitForTransition };
2479
+ export { ApiError, DEFAULT_CONFIG, EDITOR_MOTIONS, EDITOR_OPERATORS, INDENT_UNIT, JAZARI_COLORS, apiClient, applyMotion, applyOperator, arrowheadPath, bindCanvasCapture, bindEventBus, bindLastDrawables, bindTraitStateGetter, brainIconPath, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, clearVerification, cn, compareCellValues, computeJazariLayout, createCommandSendPump, createTickSendRelay, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, eightPointedStarPath, extractOutputsFromTransitions, extractStateMachine, formatDate, formatDateTime, formatGuard, formatNestedFieldLabel, formatTime, formatValue, gearTeethPath, getAllChecks, getAllTicks, getAllTraits, getBridgeHealth, getDebugEvents, getEffectSummary, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getRecentEvents, getRecentGuardEvaluations, getSnapshot, getSummary, getTick, getTrait, getTraitSnapshots, getTransitions, getTransitionsForTrait, humanizeEnumValue, humanizeFieldName, initDebugShortcut, isDebugEnabled, isEditorMotion, isEditorOperator, lockIconPath, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, motionRange, onDebugToggle, parseContentSegments, parseLessonSegments, parseMarkdownWithCodeBlocks, pipeIconPath, profilerOnRender, recordGuardEvaluation, recordServerResponse, recordTransition, registerCheck, registerTick, registerTrait, registerTraitSnapshot, renderStateMachineToDomData, renderStateMachineToSvg, resolveImageUrl, setDebugEnabled, setEntityProvider, setTickActive, sortRows, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, subscribeToVerification, toggleDebug, unregisterTick, unregisterTrait, updateAssetStatus, updateBridgeHealth, updateCheck, updateGuardResult, updateTickExecution, updateTraitState, usePerfBuffer, waitForTransition };