@almadar/ui 6.51.2 → 6.53.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 (127) hide show
  1. package/dist/{EntityBindingContext-BbxrwSb9.d.ts → AwaitingSkeletonContext-Bh399p1x.d.ts} +17 -2
  2. package/dist/{Canvas3DHost-CLC_jXh_.d.ts → Canvas3DHost-B-y2TNij.d.ts} +1 -1
  3. package/dist/{FileTree-RKQqRhIM.d.ts → FileTree-DUi7e7Z8.d.ts} +5 -5
  4. package/dist/{GameAudioProvider-BgWLggIy.d.ts → GameAudioProvider-DyBvYP2c.d.ts} +1 -1
  5. package/dist/{NavStackContext-B-XLULCO.d.ts → NavStackContext-04NLdXsY.d.ts} +8 -0
  6. package/dist/Typography-JGSDH4JP.js +5 -0
  7. package/dist/{UISlotContext-DNM8iXna.d.ts → UISlotContext-CS487Uoc.d.ts} +1 -1
  8. package/dist/{UISlotRenderer-7UYHFW4S.js → UISlotRenderer-JT34I3O7.js} +9 -9
  9. package/dist/avl/index.cjs +39958 -38525
  10. package/dist/avl/index.d.ts +8 -5
  11. package/dist/avl/index.js +37 -26
  12. package/dist/{chunk-JXUYEO7U.js → chunk-2LFBQ4IS.js} +7 -1
  13. package/dist/{chunk-GIPZSCND.js → chunk-3EF5SDIJ.js} +31157 -31206
  14. package/dist/{chunk-GHXWGQTX.js → chunk-4OZDHCZV.js} +1 -1
  15. package/dist/{chunk-HQDKHLFG.js → chunk-64WACXM7.js} +15 -1
  16. package/dist/{chunk-FGHRVJCI.js → chunk-6O37FCX4.js} +13 -2
  17. package/dist/{chunk-BUEIZY54.js → chunk-7LM6I3NA.js} +8 -7
  18. package/dist/chunk-CBIJP5PL.js +284 -0
  19. package/dist/{chunk-MWPX2O4M.js → chunk-GMDMOYXD.js} +3 -16
  20. package/dist/{chunk-YKHNK5JH.js → chunk-GODZKHAL.js} +11 -4
  21. package/dist/{chunk-T7IH5ABO.js → chunk-IKULQIDX.js} +199 -88
  22. package/dist/{chunk-NTO555KF.js → chunk-JRW33U35.js} +183 -62
  23. package/dist/{chunk-OLZ3EEML.js → chunk-KQXXO42S.js} +106 -90
  24. package/dist/chunk-OKWD7LPO.js +80 -0
  25. package/dist/{chunk-YHY5K2Y7.js → chunk-PEST66PN.js} +6 -0
  26. package/dist/{chunk-L55SAFKL.js → chunk-UGHAADU5.js} +77 -1
  27. package/dist/{chunk-6CFYRP4S.js → chunk-VHTJRS2N.js} +4 -8
  28. package/dist/{chunk-R4V7IZQP.js → chunk-WPNM2KC6.js} +2 -2
  29. package/dist/{cn-CO-0rolG.d.ts → cn-ClXGlIOY.d.ts} +2 -2
  30. package/dist/components/index.cjs +46084 -44766
  31. package/dist/components/index.d.ts +645 -699
  32. package/dist/components/index.js +621 -13
  33. package/dist/context/index.cjs +20 -7
  34. package/dist/context/index.d.ts +3 -3
  35. package/dist/context/index.js +3 -3
  36. package/dist/hooks/index.cjs +126 -9
  37. package/dist/hooks/index.d.ts +32 -7
  38. package/dist/hooks/index.js +7 -7
  39. package/dist/lib/drawable/three/index.cjs +79 -2
  40. package/dist/lib/drawable/three/index.d.ts +3 -3
  41. package/dist/lib/drawable/three/index.js +7 -7
  42. package/dist/lib/index.cjs +116 -2
  43. package/dist/lib/index.d.ts +29 -6
  44. package/dist/lib/index.js +6 -5
  45. package/dist/locales/index.cjs +231 -3
  46. package/dist/locales/index.js +155 -3
  47. package/dist/{paintDispatch-CMgOyVjS.d.ts → paintDispatch-_6EhJCiL.d.ts} +6 -6
  48. package/dist/providers/index.cjs +36404 -35028
  49. package/dist/providers/index.d.ts +34 -9
  50. package/dist/providers/index.js +82 -19
  51. package/dist/renderer/index.cjs +6 -0
  52. package/dist/renderer/index.d.ts +1 -1
  53. package/dist/renderer/index.js +1 -1
  54. package/dist/runtime/index.cjs +37861 -36437
  55. package/dist/runtime/index.d.ts +6 -4
  56. package/dist/runtime/index.js +11 -11
  57. package/dist/ssr/index.cjs +584 -181
  58. package/dist/ssr/index.d.cts +36 -44
  59. package/dist/ssr/index.d.ts +36 -44
  60. package/dist/ssr/index.js +527 -124
  61. package/dist/{themeTokens-CN9WCXQc.d.ts → themeTokens-Ccu7EmGY.d.ts} +4 -2
  62. package/dist/{useUISlots-CwUWM1ra.d.ts → useUISlots-1dk2TR4j.d.ts} +1 -9
  63. package/dist/{verificationRegistry-DBHfOR9y.d.ts → verificationRegistry-CD7Xb40L.d.ts} +1 -1
  64. package/locales/ar.json +77 -1
  65. package/locales/en.json +77 -1
  66. package/locales/sl.json +77 -1
  67. package/package.json +13 -10
  68. package/tailwind-preset.cjs +37 -1
  69. package/themes/_base.css +114 -8
  70. package/themes/_contract.md +6 -0
  71. package/themes/almadar-website.css +2 -0
  72. package/themes/almadar.css +2 -0
  73. package/themes/aqua.css +5 -3
  74. package/themes/arabesque.css +9 -7
  75. package/themes/art-deco.css +5 -3
  76. package/themes/art-nouveau.css +4 -0
  77. package/themes/atelier.css +10 -8
  78. package/themes/bauhaus.css +2 -0
  79. package/themes/bloomberg-dense.css +13 -11
  80. package/themes/blueprint.css +2 -0
  81. package/themes/clay.css +2 -0
  82. package/themes/comic.css +12 -10
  83. package/themes/constructivist.css +2 -0
  84. package/themes/corporate.css +4 -2
  85. package/themes/cyberpunk.css +2 -0
  86. package/themes/frutiger-aero.css +2 -0
  87. package/themes/game-adventure.css +1 -0
  88. package/themes/game-rpg.css +1 -0
  89. package/themes/game-sci-fi.css +1 -0
  90. package/themes/game-ui-pack.css +1 -0
  91. package/themes/gazette.css +10 -8
  92. package/themes/glass.css +17 -15
  93. package/themes/gothic.css +2 -0
  94. package/themes/ink-wash.css +2 -0
  95. package/themes/kawaii.css +2 -0
  96. package/themes/kiosk.css +17 -15
  97. package/themes/linear-clean.css +12 -10
  98. package/themes/luxury.css +2 -0
  99. package/themes/mac-classic.css +2 -0
  100. package/themes/material.css +2 -0
  101. package/themes/memphis.css +2 -0
  102. package/themes/mid-century.css +2 -0
  103. package/themes/minimalist.css +2 -0
  104. package/themes/mudcloth.css +2 -0
  105. package/themes/neon.css +2 -0
  106. package/themes/neumorphic.css +2 -0
  107. package/themes/newsprint.css +2 -0
  108. package/themes/notion-editorial.css +12 -10
  109. package/themes/pixel.css +2 -0
  110. package/themes/prism.css +20 -18
  111. package/themes/retro.css +2 -0
  112. package/themes/risograph.css +2 -0
  113. package/themes/scandi.css +2 -0
  114. package/themes/sketch.css +2 -0
  115. package/themes/solarpunk.css +2 -0
  116. package/themes/steampunk.css +2 -0
  117. package/themes/swiss.css +2 -0
  118. package/themes/terminal.css +8 -6
  119. package/themes/trait-wars.css +2 -0
  120. package/themes/ukiyo-e.css +2 -0
  121. package/themes/vaporwave.css +2 -0
  122. package/themes/victorian.css +2 -0
  123. package/themes/wabi-sabi.css +2 -0
  124. package/themes/win95.css +2 -0
  125. package/themes/wireframe.css +2 -0
  126. package/themes/zine.css +2 -0
  127. package/dist/Typography-2Z3JKWHN.js +0 -5
@@ -24,6 +24,12 @@ var SLOT_DEFINITIONS = {
24
24
  name: "sidebar",
25
25
  type: "inline"
26
26
  },
27
+ dock: {
28
+ name: "dock",
29
+ type: "portal",
30
+ portalTarget: "body",
31
+ zIndex: 850
32
+ },
27
33
  // -------------------------------------------------------------------------
28
34
  // Portal Slots - Render to document.body via React Portal
29
35
  // -------------------------------------------------------------------------
@@ -170,9 +176,7 @@ function reconcileSlotProps(prev, next) {
170
176
  var log = logger.createLogger("almadar:ui:ui-slots");
171
177
  var DEFAULT_SOURCE_KEY = "__default__";
172
178
  var MULTI_SOURCE_STACK_TRAIT = "__multi_source_stack__";
173
- var ALL_SLOTS2 = core.UI_SLOTS.filter(
174
- (slot) => !slot.includes(".") && slot !== "hud" && slot !== "screen"
175
- );
179
+ var ALL_SLOTS2 = core.RENDERED_SLOTS;
176
180
  var DEFAULT_SLOTS = ALL_SLOTS2.reduce(
177
181
  (acc, slot) => {
178
182
  acc[slot] = null;
@@ -218,7 +222,6 @@ function aggregateSlot(sources) {
218
222
  children
219
223
  },
220
224
  priority: 0,
221
- animation: "fade",
222
225
  sourceTrait: MULTI_SOURCE_STACK_TRAIT
223
226
  };
224
227
  }
@@ -282,7 +285,6 @@ function useUISlotManager() {
282
285
  pattern: config.pattern,
283
286
  props: config.props ?? {},
284
287
  priority: config.priority ?? 0,
285
- animation: config.animation ?? "fade",
286
288
  onDismiss: config.onDismiss,
287
289
  sourceTrait: config.sourceTrait,
288
290
  slot: config.target,
@@ -323,7 +325,7 @@ function useUISlotManager() {
323
325
  });
324
326
  return prev;
325
327
  }
326
- if (existing && existing.priority === content.priority && existing.pattern === content.pattern && existing.animation === content.animation && existing.transitionEvent === content.transitionEvent && existing.fromState === content.fromState && existing.entity === content.entity && existing.nodeId === content.nodeId && existing.autoDismissAt === void 0 && content.autoDismissAt === void 0 && existing.onDismiss === void 0 === (content.onDismiss === void 0)) {
328
+ if (existing && existing.priority === content.priority && existing.pattern === content.pattern && existing.transitionEvent === content.transitionEvent && existing.fromState === content.fromState && existing.entity === content.entity && existing.nodeId === content.nodeId && existing.autoDismissAt === void 0 && content.autoDismissAt === void 0 && existing.onDismiss === void 0 === (content.onDismiss === void 0)) {
327
329
  const reconciled = reconcileSlotProps(existing.props, content.props);
328
330
  if (reconciled.equal) {
329
331
  log.debug("slot:flush-bail", { slot: config.target, sourceKey, pattern: content.pattern });
@@ -871,7 +873,10 @@ var MOTION_SHAPE_VARS = [
871
873
  { cssVar: "--motion-popover-exit-to-transform", key: "popoverExit" },
872
874
  { cssVar: "--motion-toast-enter-from-transform", key: "toastEnter" },
873
875
  { cssVar: "--motion-toast-exit-to-transform", key: "toastExit" },
874
- { cssVar: "--motion-page-enter-from-transform", key: "pageEnter" }
876
+ { cssVar: "--motion-page-enter-from-transform", key: "pageEnter" },
877
+ { cssVar: "--motion-enter-rise-from-transform", key: "enterRise" },
878
+ { cssVar: "--motion-enter-scale-from-transform", key: "enterScale" },
879
+ { cssVar: "--motion-enter-slide-from-transform", key: "enterSlide" }
875
880
  ];
876
881
  var ICONOGRAPHY_VARS = [
877
882
  { cssVar: "--icon-family", key: "family" },
@@ -895,6 +900,7 @@ var GEOMETRY_VARS = [
895
900
  { cssVar: "--border-heavy", key: "borderHeavy" },
896
901
  { cssVar: "--corner-shape", key: "cornerShape" },
897
902
  { cssVar: "--corner-shape-pill", key: "cornerShapePill" },
903
+ { cssVar: "--corner-shape-interactive", key: "cornerShapeInteractive" },
898
904
  { cssVar: "--border-style", key: "borderStyle" },
899
905
  { cssVar: "--border-style-interactive", key: "borderStyleInteractive" }
900
906
  ];
@@ -1033,6 +1039,13 @@ function emitMotion(m, vars) {
1033
1039
  }
1034
1040
  }
1035
1041
  applyFlat(m.shapes, MOTION_SHAPE_VARS, vars);
1042
+ if (m.entry?.default !== void 0) vars["--motion-enter-default"] = enterKeyframe(m.entry.default);
1043
+ if (m.entry?.stagger !== void 0) vars["--motion-enter-stagger"] = m.entry.stagger;
1044
+ if (m.busyDelay !== void 0) vars["--motion-busy-delay"] = m.busyDelay;
1045
+ if (m.awaitingSkeleton !== void 0) vars["--awaiting-skeleton-display"] = m.awaitingSkeleton ? "block" : "none";
1046
+ }
1047
+ function enterKeyframe(enter) {
1048
+ return enter === "none" ? "none" : `almadar-enter-${enter}`;
1036
1049
  }
1037
1050
  function emitIconography(i, vars) {
1038
1051
  applyFlat(i, ICONOGRAPHY_VARS, vars);
@@ -1,10 +1,10 @@
1
- export { U as UISlotContext, a as UISlotProvider, u as useSlotContent, b as useSlotHasContent, c as useUISlots } from '../UISlotContext-DNM8iXna.js';
1
+ export { U as UISlotContext, a as UISlotProvider, u as useSlotContent, b as useSlotHasContent, c as useUISlots } from '../UISlotContext-CS487Uoc.js';
2
2
  import { U as UIThemeDefinition } from '../ArbitraryClassCompiler-DvzdeHxc.js';
3
3
  export { A as ARBITRARY_CLASS_STYLE_ID, a as ArbitraryClassCompiler, b as ArbitraryClassCompilerProvider, c as ArbitraryClassCompilerProviderProps, C as ColorMode, d as CurrentPagePathContext, e as CurrentPagePathProvider, f as CurrentPagePathProviderProps, D as DesignTheme, g as DesignThemeProvider, O as OrbitalThemeProvider, h as OrbitalThemeProviderProps, R as ResolvedMode, T as ThemeContext, i as ThemeProvider, j as ThemeProviderProps, k as ThemeScope, l as ThemeScopeContext, u as useArbitraryClassStyles, m as useCurrentPagePath, n as useDesignTheme, o as useTheme, p as useThemeScope } from '../ArbitraryClassCompiler-DvzdeHxc.js';
4
- export { T as ThemeMode, r as resolveThemeForRuntime, t as themeTokensToCssVars } from '../themeTokens-CN9WCXQc.js';
4
+ export { T as ThemeMode, r as resolveThemeForRuntime, t as themeTokensToCssVars } from '../themeTokens-Ccu7EmGY.js';
5
5
  export { U as UserContext, a as UserContextValue, b as UserData, c as UserProvider, d as UserProviderProps, u as useHasPermission, e as useHasRole, f as useUser, g as useUserForEvaluation } from '../UserContext-D566nfWA.js';
6
6
  export { ANONYMOUS_USER, UISlot } from '@almadar/core';
7
- export { S as SlotAnimation, a as SlotChangeCallback, b as SlotContent, c as SlotRenderConfig, U as UISlotManager } from '../useUISlots-CwUWM1ra.js';
7
+ export { S as SlotChangeCallback, a as SlotContent, b as SlotRenderConfig, U as UISlotManager } from '../useUISlots-1dk2TR4j.js';
8
8
  import 'react';
9
9
 
10
10
  /**
@@ -1,6 +1,6 @@
1
- import { useUISlotManager } from '../chunk-6CFYRP4S.js';
2
- export { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-FGHRVJCI.js';
3
- import '../chunk-YHY5K2Y7.js';
1
+ import { useUISlotManager } from '../chunk-VHTJRS2N.js';
2
+ export { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-6O37FCX4.js';
3
+ import '../chunk-PEST66PN.js';
4
4
  import '../chunk-QPXIAUJD.js';
5
5
  import { createContext, useMemo, useContext, useState, useEffect, useCallback } from 'react';
6
6
  import { jsx } from 'react/jsx-runtime';
@@ -1003,6 +1003,12 @@ var SLOT_DEFINITIONS = {
1003
1003
  name: "sidebar",
1004
1004
  type: "inline"
1005
1005
  },
1006
+ dock: {
1007
+ name: "dock",
1008
+ type: "portal",
1009
+ portalTarget: "body",
1010
+ zIndex: 850
1011
+ },
1006
1012
  // -------------------------------------------------------------------------
1007
1013
  // Portal Slots - Render to document.body via React Portal
1008
1014
  // -------------------------------------------------------------------------
@@ -1149,9 +1155,7 @@ function reconcileSlotProps(prev, next) {
1149
1155
  var log10 = logger.createLogger("almadar:ui:ui-slots");
1150
1156
  var DEFAULT_SOURCE_KEY = "__default__";
1151
1157
  var MULTI_SOURCE_STACK_TRAIT = "__multi_source_stack__";
1152
- var ALL_SLOTS2 = core.UI_SLOTS.filter(
1153
- (slot) => !slot.includes(".") && slot !== "hud" && slot !== "screen"
1154
- );
1158
+ var ALL_SLOTS2 = core.RENDERED_SLOTS;
1155
1159
  var DEFAULT_SLOTS = ALL_SLOTS2.reduce(
1156
1160
  (acc, slot) => {
1157
1161
  acc[slot] = null;
@@ -1197,7 +1201,6 @@ function aggregateSlot(sources) {
1197
1201
  children
1198
1202
  },
1199
1203
  priority: 0,
1200
- animation: "fade",
1201
1204
  sourceTrait: MULTI_SOURCE_STACK_TRAIT
1202
1205
  };
1203
1206
  }
@@ -1261,7 +1264,6 @@ function useUISlotManager() {
1261
1264
  pattern: config.pattern,
1262
1265
  props: config.props ?? {},
1263
1266
  priority: config.priority ?? 0,
1264
- animation: config.animation ?? "fade",
1265
1267
  onDismiss: config.onDismiss,
1266
1268
  sourceTrait: config.sourceTrait,
1267
1269
  slot: config.target,
@@ -1302,7 +1304,7 @@ function useUISlotManager() {
1302
1304
  });
1303
1305
  return prev;
1304
1306
  }
1305
- if (existing && existing.priority === content.priority && existing.pattern === content.pattern && existing.animation === content.animation && existing.transitionEvent === content.transitionEvent && existing.fromState === content.fromState && existing.entity === content.entity && existing.nodeId === content.nodeId && existing.autoDismissAt === void 0 && content.autoDismissAt === void 0 && existing.onDismiss === void 0 === (content.onDismiss === void 0)) {
1307
+ if (existing && existing.priority === content.priority && existing.pattern === content.pattern && existing.transitionEvent === content.transitionEvent && existing.fromState === content.fromState && existing.entity === content.entity && existing.nodeId === content.nodeId && existing.autoDismissAt === void 0 && content.autoDismissAt === void 0 && existing.onDismiss === void 0 === (content.onDismiss === void 0)) {
1306
1308
  const reconciled = reconcileSlotProps(existing.props, content.props);
1307
1309
  if (reconciled.equal) {
1308
1310
  log10.debug("slot:flush-bail", { slot: config.target, sourceKey, pattern: content.pattern });
@@ -1507,6 +1509,27 @@ function useUISlotManager() {
1507
1509
  updateTraitContent
1508
1510
  };
1509
1511
  }
1512
+ var counts = /* @__PURE__ */ new Map();
1513
+ var keyListeners = /* @__PURE__ */ new Map();
1514
+ function notify(key) {
1515
+ keyListeners.get(key)?.forEach((cb) => cb());
1516
+ }
1517
+ function beginPending(key) {
1518
+ counts.set(key, (counts.get(key) ?? 0) + 1);
1519
+ if (counts.get(key) === 1) notify(key);
1520
+ }
1521
+ function endPending(key) {
1522
+ const n = (counts.get(key) ?? 0) - 1;
1523
+ if (n > 0) {
1524
+ counts.set(key, n);
1525
+ return;
1526
+ }
1527
+ counts.delete(key);
1528
+ notify(key);
1529
+ }
1530
+ React.createContext(null);
1531
+
1532
+ // hooks/useUIEvents.ts
1510
1533
  var UI_PREFIX = "UI:";
1511
1534
  function useUIEvents(dispatch, traitName, validEvents, eventBusInstance) {
1512
1535
  const defaultEventBus = useEventBus();
@@ -1524,7 +1547,12 @@ function useUIEvents(dispatch, traitName, validEvents, eventBusInstance) {
1524
1547
  if (event.source && event.source.dispatched) {
1525
1548
  return;
1526
1549
  }
1527
- dispatch(smEvent, event.payload);
1550
+ const pendingKey = event.source?.pendingKey;
1551
+ const settled = dispatch(smEvent, event.payload);
1552
+ if (pendingKey !== void 0 && settled instanceof Promise) {
1553
+ beginPending(pendingKey);
1554
+ void settled.finally(() => endPending(pendingKey));
1555
+ }
1528
1556
  };
1529
1557
  unsubscribes.push(
1530
1558
  eventBus.on(`${UI_PREFIX}${traitName}.${smEvent}`, handler)
@@ -1821,6 +1849,7 @@ var en_default = {
1821
1849
  "aria.removeFilter": "Remove filter",
1822
1850
  "aria.closeDrawer": "Close drawer",
1823
1851
  "aria.closePanel": "Close panel",
1852
+ "aria.dockPanel": "Side panel",
1824
1853
  "aria.previousImage": "Previous image",
1825
1854
  "aria.nextImage": "Next image",
1826
1855
  "aria.dismiss": "Dismiss",
@@ -1842,6 +1871,7 @@ var en_default = {
1842
1871
  "aria.openMenu": "Open menu",
1843
1872
  "aria.closeMenu": "Close menu",
1844
1873
  "aria.openSidebar": "Open sidebar",
1874
+ "aria.openRow": "Open item {{position}}",
1845
1875
  "sidebar.expand": "Expand sidebar",
1846
1876
  "sidebar.collapse": "Collapse sidebar",
1847
1877
  "sidebar.close": "Close sidebar",
@@ -2857,7 +2887,81 @@ var en_default = {
2857
2887
  "flowCanvas.presetSize": "{{label}} ({{width}}px)",
2858
2888
  "avl.breadcrumb.transitionNumber": "Transition #{{n}}",
2859
2889
  "orbInspector.pattern": "Pattern",
2860
- "orbInspector.slotLabel": "slot: {{slot}}"
2890
+ "orbInspector.slotLabel": "slot: {{slot}}",
2891
+ "detailPanel.section.activity": "Activity",
2892
+ "detailPanel.section.lineItems": "Line items",
2893
+ "detailPanel.tab.overview": "Overview",
2894
+ "detailPanel.thread.empty": "No messages yet",
2895
+ "detailPanel.openImage": "Open image",
2896
+ "detailPanel.showImage": "Show image {{index}}",
2897
+ "aria.clearSelection": "Clear selection",
2898
+ "aria.searchOptions": "Search options",
2899
+ "aria.zoomIn": "Zoom in",
2900
+ "aria.zoomOut": "Zoom out",
2901
+ "aria.previousPage": "Previous page",
2902
+ "aria.nextPage": "Next page",
2903
+ "aria.downloadDocument": "Download document",
2904
+ "aria.printDocument": "Print document",
2905
+ "aria.wrapLines": "Wrap lines",
2906
+ "aria.copyCode": "Copy code",
2907
+ "aria.clearInput": "Clear input",
2908
+ "aria.skipToContent": "Skip to content",
2909
+ "aria.mainNavigation": "Main navigation",
2910
+ "aria.carouselSlides": "Slides",
2911
+ "aria.minimap": "Minimap",
2912
+ "aria.canvasScene": "Game scene",
2913
+ "aria.learningCanvas": "Interactive diagram",
2914
+ "aria.scene3d": "3D scene",
2915
+ "aria.graphCanvas": "Graph",
2916
+ "aria.positionedCanvas": "Floor plan",
2917
+ "aria.walkTraitDone": "completed",
2918
+ "aria.walkTraitPending": "pending",
2919
+ "aria.walkGraph": "State graph for {{trait}}: {{from}} to {{to}}",
2920
+ "aria.loading": "Loading",
2921
+ "agentActivity.toolCall": "Called {{tool}}",
2922
+ "agentActivity.toolResult": "{{tool}} returned",
2923
+ "agentActivity.toolRows": "{{count}} rows",
2924
+ "agentActivity.thinking": "Thinking\u2026",
2925
+ "agentActivity.analyzed": "Analyzed your request \u2014 {{organism}}",
2926
+ "agentActivity.renamed": "Rename {{from}} \u2192 {{to}}",
2927
+ "agentActivity.deleted": "Remove {{orbitalName}}",
2928
+ "agentActivity.roster": "Planning {{count}} orbitals",
2929
+ "agentActivity.orbitalStarted": "Working on {{orbitalName}}\u2026",
2930
+ "agentActivity.orbitalStartedSettled": "Started {{orbitalName}}",
2931
+ "agentActivity.orbitalDone": "{{orbitalName}} ready",
2932
+ "agentActivity.orbitalCounts": "{{traitCount}} traits, {{transitionCount}} transitions",
2933
+ "agentActivity.change.orbital-added": "Added {{orbitalName}}",
2934
+ "agentActivity.change.orbital-removed": "Removed {{orbitalName}}",
2935
+ "agentActivity.change.entity-fields-changed": "Changed the data fields of {{orbitalName}}",
2936
+ "agentActivity.change.trait-added": "Added a behavior to {{orbitalName}}",
2937
+ "agentActivity.change.trait-removed": "Removed a behavior from {{orbitalName}}",
2938
+ "agentActivity.change.state-machine-changed": "Changed the flow of {{orbitalName}}",
2939
+ "agentActivity.change.guard-changed": "Changed a rule in {{orbitalName}}",
2940
+ "agentActivity.change.effect-changed": "Changed what {{orbitalName}} does",
2941
+ "agentActivity.change.render-ui-changed": "Changed the design of {{orbitalName}}",
2942
+ "agentActivity.change.event-wiring-changed": "Changed the connections of {{orbitalName}}",
2943
+ "agentActivity.change.page-changed": "Changed the pages of {{orbitalName}}",
2944
+ "agentActivity.change.behavior-composed": "Composed a behavior into {{orbitalName}}",
2945
+ "agentActivity.done": "Done \u2014 {{count}} orbitals ready",
2946
+ "agentActivity.cancelled": "Cancelled",
2947
+ "agentActivity.jump": "Show",
2948
+ "agentActivity.emptyTitle": "No activity yet",
2949
+ "agentActivity.emptyDescription": "Send a message and the agent's work shows up here.",
2950
+ "agentActivity.fileOperation": "{{operation}}",
2951
+ "agentActivity.schemaDiff": "Edited {{filePath}}",
2952
+ "agentActivity.coordinatorDecision": "Chose {{organism}}",
2953
+ "agentActivity.change.trait-config-changed": "Changed the settings of {{orbitalName}}",
2954
+ "agentActivity.change.theme-changed": "Changed the theme of {{orbitalName}}",
2955
+ "agentActivity.llmResponse": "Raw LLM response",
2956
+ "agentActivity.llmDuration": "{{seconds}}s",
2957
+ "agentActivity.llmTokens": "{{prompt}} in / {{completion}} out tokens",
2958
+ "agentActivity.llmResponseLabel": "Response",
2959
+ "agentActivity.llmSystemPrompt": "System prompt",
2960
+ "agentActivity.llmUserPrompt": "User prompt",
2961
+ "agentActivity.llmToolCalls": "Tool calls",
2962
+ "agentActivity.showRawLlm": "Raw LLM",
2963
+ "agentActivity.earlierConversations": "Earlier conversations ({{count}})",
2964
+ "agentActivity.earlierActivity": "Earlier activity"
2861
2965
  };
2862
2966
 
2863
2967
  // lib/format.ts
@@ -2883,7 +2987,14 @@ var I18nContext = React.createContext({
2883
2987
  }
2884
2988
  });
2885
2989
  I18nContext.displayName = "I18nContext";
2886
- var I18nProvider = I18nContext.Provider;
2990
+ function I18nProvider({ value, children, documentRoot }) {
2991
+ React.useEffect(() => {
2992
+ if (!documentRoot) return;
2993
+ document.documentElement.lang = value.locale;
2994
+ document.documentElement.dir = value.direction;
2995
+ }, [documentRoot, value.locale, value.direction]);
2996
+ return React__default.default.createElement(I18nContext.Provider, { value }, children);
2997
+ }
2887
2998
  function useTranslate() {
2888
2999
  return React.useContext(I18nContext);
2889
3000
  }
@@ -3109,6 +3220,11 @@ function useMediaQuery(query) {
3109
3220
  function hasMatchMedia() {
3110
3221
  return typeof window !== "undefined" && typeof window.matchMedia === "function";
3111
3222
  }
3223
+
3224
+ // hooks/usePrefersReducedMotion.ts
3225
+ function usePrefersReducedMotion() {
3226
+ return useMediaQuery("(prefers-reduced-motion: reduce)");
3227
+ }
3112
3228
  function useInfiniteScroll(onLoadMore, options = {}) {
3113
3229
  const { rootMargin = "200px", hasMore = true, isLoading = false } = options;
3114
3230
  const observerRef = React.useRef(null);
@@ -3619,6 +3735,7 @@ exports.useInfiniteScroll = useInfiniteScroll;
3619
3735
  exports.useKeyboardRouter = useKeyboardRouter;
3620
3736
  exports.useLongPress = useLongPress;
3621
3737
  exports.useMediaQuery = useMediaQuery;
3738
+ exports.usePrefersReducedMotion = usePrefersReducedMotion;
3622
3739
  exports.usePreview = usePreview;
3623
3740
  exports.usePullToRefresh = usePullToRefresh;
3624
3741
  exports.useQuerySingleton = useQuerySingleton;
@@ -1,14 +1,29 @@
1
1
  import { OrbitalSchema, FieldValue, EventPayload, BusEventSource, BusEventListener, EntityFrameState, EntityFieldWrite } from '@almadar/core';
2
2
  export { BusEvent, BusEventListener, BusEventSource, BusEventListener as EventListener, UISlot, Unsubscribe } from '@almadar/core';
3
- import { E as EventBusContextType } from '../NavStackContext-B-XLULCO.js';
4
- export { a as NavStackApi, u as useNavStack } from '../NavStackContext-B-XLULCO.js';
3
+ import { E as EventBusContextType } from '../NavStackContext-04NLdXsY.js';
4
+ export { a as NavStackApi, u as useNavStack } from '../NavStackContext-04NLdXsY.js';
5
5
  export { E as EditorKeyEvent, a as KeyCaptureEntry, K as KeyCaptureTable, U as UseKeyboardRouterOptions, k as keyChord, m as mergeCaptureTables, u as useKeyboardRouter } from '../useKeyboardRouter-BW3rThep.js';
6
- export { D as DEFAULT_SLOTS, S as SlotAnimation, a as SlotChangeCallback, b as SlotContent, c as SlotRenderConfig, U as UISlotManager, u as useUISlotManager } from '../useUISlots-CwUWM1ra.js';
6
+ export { D as DEFAULT_SLOTS, S as SlotChangeCallback, a as SlotContent, b as SlotRenderConfig, U as UISlotManager, u as useUISlotManager } from '../useUISlots-1dk2TR4j.js';
7
7
  import * as React$1 from 'react';
8
8
  import React__default from 'react';
9
9
  import { F as FormatContext } from '../format-Czimj421.js';
10
10
  import * as _tanstack_react_query from '@tanstack/react-query';
11
11
 
12
+ /**
13
+ * useTranslate — i18n hook for Almadar UI components.
14
+ *
15
+ * Provides locale-aware string translation via React context.
16
+ * No provider = passthrough: t('key') returns 'key' as-is (never crashes).
17
+ *
18
+ * Usage in organisms:
19
+ * const { t, locale, direction } = useTranslate();
20
+ * <Button>{t('common.save')}</Button>
21
+ * <Typography>{t('table.showing', { count: 5, total: 20 })}</Typography>
22
+ *
23
+ * Templates MUST NOT use this hook (flattener rule). They receive
24
+ * translated strings via entity props from the organism above.
25
+ */
26
+
12
27
  type TranslateFunction = (key: string, params?: Record<string, string | number>) => string;
13
28
  interface I18nContextValue {
14
29
  /** Current locale code (e.g. 'en', 'ar', 'sl') */
@@ -29,7 +44,14 @@ interface I18nContextValue {
29
44
  * </I18nProvider>
30
45
  * ```
31
46
  */
32
- declare const I18nProvider: React$1.Provider<I18nContextValue>;
47
+ interface I18nProviderProps {
48
+ value: I18nContextValue;
49
+ children?: React__default.ReactNode;
50
+ /** The app's root provider: mirrors locale + direction onto `<html lang dir>`.
51
+ * Embedded previews omit it so they never rewrite their host document. */
52
+ documentRoot?: boolean;
53
+ }
54
+ declare function I18nProvider({ value, children, documentRoot }: I18nProviderProps): React__default.ReactElement;
33
55
  /**
34
56
  * Hook to access the current locale and translate function.
35
57
  * Safe to call without a provider — returns passthrough t().
@@ -508,7 +530,7 @@ declare function useEmitEvent(): (type: string, payload?: EventPayload, source?:
508
530
  * for each entry.
509
531
  * @param eventBusInstance - Optional event bus instance (for testing)
510
532
  */
511
- declare function useUIEvents<E extends string>(dispatch: (event: E, payload?: EventPayload) => void, traitName: string, validEvents: readonly E[], eventBusInstance?: ReturnType<typeof useEventBus>): void;
533
+ declare function useUIEvents<E extends string>(dispatch: (event: E, payload?: EventPayload) => void | Promise<void>, traitName: string, validEvents: readonly E[], eventBusInstance?: ReturnType<typeof useEventBus>): void;
512
534
  /**
513
535
  * Hook to subscribe to cross-trait listens (gap #13, Phase 4 codegen).
514
536
  *
@@ -765,7 +787,7 @@ interface DragReorderResult<T> {
765
787
  onPointerDown: (e: React__default.PointerEvent) => void;
766
788
  style: React__default.CSSProperties;
767
789
  'aria-grabbed': boolean;
768
- role: string;
790
+ role: 'button';
769
791
  };
770
792
  /** Props to spread on each list item for a given index */
771
793
  getItemProps: (index: number) => {
@@ -787,6 +809,9 @@ declare function useDragReorder<T>(initialItems: T[], onReorder: (fromIndex: num
787
809
  */
788
810
  declare function useMediaQuery(query: string): boolean;
789
811
 
812
+ /** Whether the OS asks for reduced motion — the one gate for JS/rAF/camera animations (CSS ones collapse in `_base.css`). */
813
+ declare function usePrefersReducedMotion(): boolean;
814
+
790
815
  interface InfiniteScrollOptions {
791
816
  /** Root margin for IntersectionObserver (default: "200px") */
792
817
  rootMargin?: string;
@@ -1045,4 +1070,4 @@ declare function useGitHubBranches(owner: string, repo: string, enabled?: boolea
1045
1070
  branches: string[];
1046
1071
  }>, Error>;
1047
1072
 
1048
- export { ALMADAR_DND_MIME, type AuthContextValue, type AuthUser, type CanvasGestureCallbacks, type CanvasGestureHandlers, type CompileResult, type CompileStage, type DragReorderResult, type DraggablePayload, EventBusContextType, type Extension, type ExtensionManifest, type FileSystemFile, type FileSystemStatus, type GitHubRepo, type GitHubStatus, type I18nContextValue, I18nProvider, type InfiniteScrollOptions, type InfiniteScrollResult, type LongPressHandlers, type LongPressOptions, type OpenFile, type Positioned, type PullToRefreshOptions, type PullToRefreshResult, type QuerySingletonEntity, type QuerySingletonResult, type QuerySingletonState, type QueryState, type RenderInterpolationHandle, type RenderInterpolationOptions, type SelectedFile, type SharedEntityStore, SharedEntityStoreContext, type SharedEntitySubscriber, type SharedEntityWriter, type SwipeGestureOptions, type SwipeGestureResult, type SwipeHandlers, type TapRevealOptions, type TapRevealResult, type TraitListenSpec, type TranslateFunction, type UseCanvasGesturesOptions, type UseCompileResult, type UseDraggableOptions, type UseDraggableResult, type UseDropZoneOptions, type UseDropZoneResult, type UseExtensionsOptions, type UseExtensionsResult, type UseFileEditorOptions, type UseFileEditorResult, type UseFileSystemResult, createSharedEntityStore, createTranslate, parseQueryBinding, runTickFrame, useAgentChat, useAuthContext, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useFormatContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInfiniteScroll, useLongPress, useMediaQuery, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate, useUIEvents, useValidation };
1073
+ export { ALMADAR_DND_MIME, type AuthContextValue, type AuthUser, type CanvasGestureCallbacks, type CanvasGestureHandlers, type CompileResult, type CompileStage, type DragReorderResult, type DraggablePayload, EventBusContextType, type Extension, type ExtensionManifest, type FileSystemFile, type FileSystemStatus, type GitHubRepo, type GitHubStatus, type I18nContextValue, I18nProvider, type InfiniteScrollOptions, type InfiniteScrollResult, type LongPressHandlers, type LongPressOptions, type OpenFile, type Positioned, type PullToRefreshOptions, type PullToRefreshResult, type QuerySingletonEntity, type QuerySingletonResult, type QuerySingletonState, type QueryState, type RenderInterpolationHandle, type RenderInterpolationOptions, type SelectedFile, type SharedEntityStore, SharedEntityStoreContext, type SharedEntitySubscriber, type SharedEntityWriter, type SwipeGestureOptions, type SwipeGestureResult, type SwipeHandlers, type TapRevealOptions, type TapRevealResult, type TraitListenSpec, type TranslateFunction, type UseCanvasGesturesOptions, type UseCompileResult, type UseDraggableOptions, type UseDraggableResult, type UseDropZoneOptions, type UseDropZoneResult, type UseExtensionsOptions, type UseExtensionsResult, type UseFileEditorOptions, type UseFileEditorResult, type UseFileSystemResult, createSharedEntityStore, createTranslate, parseQueryBinding, runTickFrame, useAgentChat, useAuthContext, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useFormatContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInfiniteScroll, useLongPress, useMediaQuery, usePrefersReducedMotion, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate, useUIEvents, useValidation };
@@ -1,11 +1,11 @@
1
- export { keyChord, mergeCaptureTables, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useKeyboardRouter, useNavStack, usePreview, useRenderInterpolation, useTraitListens, useUIEvents, useValidation } from '../chunk-JXUYEO7U.js';
2
- export { I18nProvider, createTranslate, useFormatContext, useTranslate } from '../chunk-YKHNK5JH.js';
1
+ export { keyChord, mergeCaptureTables, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useKeyboardRouter, useNavStack, usePreview, useRenderInterpolation, useTraitListens, useUIEvents, useValidation } from '../chunk-2LFBQ4IS.js';
2
+ export { I18nProvider, createTranslate, useFormatContext, useTranslate } from '../chunk-GODZKHAL.js';
3
3
  export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext } from '../chunk-DQTV6QVS.js';
4
- export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-6CFYRP4S.js';
5
- export { ALMADAR_DND_MIME, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useDraggable, useDropZone, useInfiniteScroll, useLongPress, useMediaQuery, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-NTO555KF.js';
4
+ export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-VHTJRS2N.js';
5
+ export { ALMADAR_DND_MIME, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useDraggable, useDropZone, useInfiniteScroll, useLongPress, useMediaQuery, usePrefersReducedMotion, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-JRW33U35.js';
6
6
  export { useTapReveal } from '../chunk-XJTHMW4G.js';
7
7
  export { useEmitEvent, useEventBus, useEventListener } from '../chunk-6EV3OEBQ.js';
8
- import '../chunk-GHXWGQTX.js';
9
- import '../chunk-L55SAFKL.js';
10
- import '../chunk-YHY5K2Y7.js';
8
+ import '../chunk-4OZDHCZV.js';
9
+ import '../chunk-UGHAADU5.js';
10
+ import '../chunk-PEST66PN.js';
11
11
  import '../chunk-QPXIAUJD.js';
@@ -4182,6 +4182,7 @@ var en_default = {
4182
4182
  "aria.removeFilter": "Remove filter",
4183
4183
  "aria.closeDrawer": "Close drawer",
4184
4184
  "aria.closePanel": "Close panel",
4185
+ "aria.dockPanel": "Side panel",
4185
4186
  "aria.previousImage": "Previous image",
4186
4187
  "aria.nextImage": "Next image",
4187
4188
  "aria.dismiss": "Dismiss",
@@ -4203,6 +4204,7 @@ var en_default = {
4203
4204
  "aria.openMenu": "Open menu",
4204
4205
  "aria.closeMenu": "Close menu",
4205
4206
  "aria.openSidebar": "Open sidebar",
4207
+ "aria.openRow": "Open item {{position}}",
4206
4208
  "sidebar.expand": "Expand sidebar",
4207
4209
  "sidebar.collapse": "Collapse sidebar",
4208
4210
  "sidebar.close": "Close sidebar",
@@ -5218,7 +5220,81 @@ var en_default = {
5218
5220
  "flowCanvas.presetSize": "{{label}} ({{width}}px)",
5219
5221
  "avl.breadcrumb.transitionNumber": "Transition #{{n}}",
5220
5222
  "orbInspector.pattern": "Pattern",
5221
- "orbInspector.slotLabel": "slot: {{slot}}"
5223
+ "orbInspector.slotLabel": "slot: {{slot}}",
5224
+ "detailPanel.section.activity": "Activity",
5225
+ "detailPanel.section.lineItems": "Line items",
5226
+ "detailPanel.tab.overview": "Overview",
5227
+ "detailPanel.thread.empty": "No messages yet",
5228
+ "detailPanel.openImage": "Open image",
5229
+ "detailPanel.showImage": "Show image {{index}}",
5230
+ "aria.clearSelection": "Clear selection",
5231
+ "aria.searchOptions": "Search options",
5232
+ "aria.zoomIn": "Zoom in",
5233
+ "aria.zoomOut": "Zoom out",
5234
+ "aria.previousPage": "Previous page",
5235
+ "aria.nextPage": "Next page",
5236
+ "aria.downloadDocument": "Download document",
5237
+ "aria.printDocument": "Print document",
5238
+ "aria.wrapLines": "Wrap lines",
5239
+ "aria.copyCode": "Copy code",
5240
+ "aria.clearInput": "Clear input",
5241
+ "aria.skipToContent": "Skip to content",
5242
+ "aria.mainNavigation": "Main navigation",
5243
+ "aria.carouselSlides": "Slides",
5244
+ "aria.minimap": "Minimap",
5245
+ "aria.canvasScene": "Game scene",
5246
+ "aria.learningCanvas": "Interactive diagram",
5247
+ "aria.scene3d": "3D scene",
5248
+ "aria.graphCanvas": "Graph",
5249
+ "aria.positionedCanvas": "Floor plan",
5250
+ "aria.walkTraitDone": "completed",
5251
+ "aria.walkTraitPending": "pending",
5252
+ "aria.walkGraph": "State graph for {{trait}}: {{from}} to {{to}}",
5253
+ "aria.loading": "Loading",
5254
+ "agentActivity.toolCall": "Called {{tool}}",
5255
+ "agentActivity.toolResult": "{{tool}} returned",
5256
+ "agentActivity.toolRows": "{{count}} rows",
5257
+ "agentActivity.thinking": "Thinking\u2026",
5258
+ "agentActivity.analyzed": "Analyzed your request \u2014 {{organism}}",
5259
+ "agentActivity.renamed": "Rename {{from}} \u2192 {{to}}",
5260
+ "agentActivity.deleted": "Remove {{orbitalName}}",
5261
+ "agentActivity.roster": "Planning {{count}} orbitals",
5262
+ "agentActivity.orbitalStarted": "Working on {{orbitalName}}\u2026",
5263
+ "agentActivity.orbitalStartedSettled": "Started {{orbitalName}}",
5264
+ "agentActivity.orbitalDone": "{{orbitalName}} ready",
5265
+ "agentActivity.orbitalCounts": "{{traitCount}} traits, {{transitionCount}} transitions",
5266
+ "agentActivity.change.orbital-added": "Added {{orbitalName}}",
5267
+ "agentActivity.change.orbital-removed": "Removed {{orbitalName}}",
5268
+ "agentActivity.change.entity-fields-changed": "Changed the data fields of {{orbitalName}}",
5269
+ "agentActivity.change.trait-added": "Added a behavior to {{orbitalName}}",
5270
+ "agentActivity.change.trait-removed": "Removed a behavior from {{orbitalName}}",
5271
+ "agentActivity.change.state-machine-changed": "Changed the flow of {{orbitalName}}",
5272
+ "agentActivity.change.guard-changed": "Changed a rule in {{orbitalName}}",
5273
+ "agentActivity.change.effect-changed": "Changed what {{orbitalName}} does",
5274
+ "agentActivity.change.render-ui-changed": "Changed the design of {{orbitalName}}",
5275
+ "agentActivity.change.event-wiring-changed": "Changed the connections of {{orbitalName}}",
5276
+ "agentActivity.change.page-changed": "Changed the pages of {{orbitalName}}",
5277
+ "agentActivity.change.behavior-composed": "Composed a behavior into {{orbitalName}}",
5278
+ "agentActivity.done": "Done \u2014 {{count}} orbitals ready",
5279
+ "agentActivity.cancelled": "Cancelled",
5280
+ "agentActivity.jump": "Show",
5281
+ "agentActivity.emptyTitle": "No activity yet",
5282
+ "agentActivity.emptyDescription": "Send a message and the agent's work shows up here.",
5283
+ "agentActivity.fileOperation": "{{operation}}",
5284
+ "agentActivity.schemaDiff": "Edited {{filePath}}",
5285
+ "agentActivity.coordinatorDecision": "Chose {{organism}}",
5286
+ "agentActivity.change.trait-config-changed": "Changed the settings of {{orbitalName}}",
5287
+ "agentActivity.change.theme-changed": "Changed the theme of {{orbitalName}}",
5288
+ "agentActivity.llmResponse": "Raw LLM response",
5289
+ "agentActivity.llmDuration": "{{seconds}}s",
5290
+ "agentActivity.llmTokens": "{{prompt}} in / {{completion}} out tokens",
5291
+ "agentActivity.llmResponseLabel": "Response",
5292
+ "agentActivity.llmSystemPrompt": "System prompt",
5293
+ "agentActivity.llmUserPrompt": "User prompt",
5294
+ "agentActivity.llmToolCalls": "Tool calls",
5295
+ "agentActivity.showRawLlm": "Raw LLM",
5296
+ "agentActivity.earlierConversations": "Earlier conversations ({{count}})",
5297
+ "agentActivity.earlierActivity": "Earlier activity"
5222
5298
  };
5223
5299
 
5224
5300
  // lib/format.ts
@@ -5282,10 +5358,11 @@ function formatValue(value, format, fmt = {}) {
5282
5358
  var INLINE_TEXT_ATTR = "data-inline-text";
5283
5359
 
5284
5360
  // lib/domPassthrough.ts
5361
+ var GLOBAL_ATTRIBUTES = /* @__PURE__ */ new Set(["role", "id", "lang", "dir", "tabIndex"]);
5285
5362
  function domPassthrough(props) {
5286
5363
  const out = {};
5287
5364
  for (const [key, value] of Object.entries(props)) {
5288
- if (key.startsWith("aria-") || key.startsWith("data-") || key === "role" || key === "id") {
5365
+ if (key.startsWith("aria-") || key.startsWith("data-") || GLOBAL_ATTRIBUTES.has(key)) {
5289
5366
  if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value === void 0) {
5290
5367
  out[key] = value;
5291
5368
  }
@@ -1,5 +1,5 @@
1
- import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature } from '../../../Canvas3DHost-CLC_jXh_.js';
2
- export { c as Canvas3DHost, d as Canvas3DHostHandle, e as Canvas3DHostProps, c as GameCanvas3D, U as UnitAnimationState } from '../../../Canvas3DHost-CLC_jXh_.js';
1
+ import { C as CanvasPointLightConfig, I as IsometricTile, a as IsometricUnit, b as IsometricFeature } from '../../../Canvas3DHost-B-y2TNij.js';
2
+ export { c as Canvas3DHost, d as Canvas3DHostHandle, e as Canvas3DHostProps, c as GameCanvas3D, U as UnitAnimationState } from '../../../Canvas3DHost-B-y2TNij.js';
3
3
  import React__default, { Component, ReactNode, ErrorInfo } from 'react';
4
4
  import * as THREE from 'three';
5
5
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
@@ -8,7 +8,7 @@ import { Z as ZoomLevel } from '../../../avl-zoom-state-CKMVuBFg.js';
8
8
  import { b as Avl3DModelOverrides } from '../../../avl-3d-context-MAt_NuU9.js';
9
9
  export { d as AVL_3D_COLORS, A as Avl3DConfig, a as Avl3DContext, C as CAMERA_POSITIONS, P as Position3D, e as arcCurve3D, f as fibonacciSpherePositions, g as goldenSpiralPositions, o as orbitRingPositions, s as selfLoopCurve3D, t as treeLayout3D, u as useAvl3DConfig } from '../../../avl-3d-context-MAt_NuU9.js';
10
10
  import { A as ApplicationLevelData, b as OrbitalLevelData, T as TraitLevelData, c as TransitionLevelData } from '../../../avl-schema-parser-C0wnAp5x.js';
11
- import '../../../paintDispatch-CMgOyVjS.js';
11
+ import '../../../paintDispatch-_6EhJCiL.js';
12
12
  import 'lucide-react';
13
13
 
14
14
  /**
@@ -1,13 +1,13 @@
1
- import { goldenSpiralPositions, forceDirectedPositions, Avl3DOrbitalNode, Avl3DCrossWire, Avl3DEntityCore, fibonacciSpherePositions, Avl3DLabel, Avl3DStateNode, Avl3DTransitionArc, Avl3DExprTree, AVL_3D_COLORS, zoomReducer, initialZoomState, CAMERA_POSITIONS, getBreadcrumbs, Avl3DTooltip } from '../../../chunk-R4V7IZQP.js';
2
- export { AVL_3D_COLORS, CAMERA_POSITIONS, arcCurve3D, fibonacciSpherePositions, goldenSpiralPositions, orbitRingPositions, selfLoopCurve3D, treeLayout3D } from '../../../chunk-R4V7IZQP.js';
3
- import { collectDrawnItems, buildHitIndex, withPreviewPosition, isValidScenePos, isAnimatedShape, applyShapeAnimation, expandFxLayer, isAnimatedGroup, applyMeshAnimation, spriteAssetState, SPRITE_FALLBACK_FILL, isAnimatedMesh, clampSegments, isAtlasAsset, getAtlas, subRectFor, polyhedronBounds, AVL_INK, parseTransitionLevel, parseTraitLevel, parseOrbitalLevel, parseApplicationLevel, Box, HStack, pressableProps, resolveThemeColor } from '../../../chunk-BUEIZY54.js';
4
- import { Typography } from '../../../chunk-MWPX2O4M.js';
1
+ import { goldenSpiralPositions, forceDirectedPositions, Avl3DOrbitalNode, Avl3DCrossWire, Avl3DEntityCore, fibonacciSpherePositions, Avl3DLabel, Avl3DStateNode, Avl3DTransitionArc, Avl3DExprTree, AVL_3D_COLORS, zoomReducer, initialZoomState, CAMERA_POSITIONS, getBreadcrumbs, Avl3DTooltip } from '../../../chunk-WPNM2KC6.js';
2
+ export { AVL_3D_COLORS, CAMERA_POSITIONS, arcCurve3D, fibonacciSpherePositions, goldenSpiralPositions, orbitRingPositions, selfLoopCurve3D, treeLayout3D } from '../../../chunk-WPNM2KC6.js';
3
+ import { collectDrawnItems, buildHitIndex, withPreviewPosition, isValidScenePos, isAnimatedShape, applyShapeAnimation, expandFxLayer, isAnimatedGroup, applyMeshAnimation, spriteAssetState, SPRITE_FALLBACK_FILL, isAnimatedMesh, clampSegments, isAtlasAsset, getAtlas, subRectFor, polyhedronBounds, AVL_INK, parseTransitionLevel, parseTraitLevel, parseOrbitalLevel, parseApplicationLevel, Box, HStack, pressableProps, resolveThemeColor } from '../../../chunk-7LM6I3NA.js';
4
+ import { Typography } from '../../../chunk-GMDMOYXD.js';
5
5
  import '../../../chunk-XJTHMW4G.js';
6
6
  import { useEventBus, useEmitEvent } from '../../../chunk-6EV3OEBQ.js';
7
7
  import { keyMapCode, resolveKeyMapEvent } from '../../../chunk-O7OLVVBR.js';
8
- import { cn } from '../../../chunk-HQDKHLFG.js';
9
- import '../../../chunk-GHXWGQTX.js';
10
- import '../../../chunk-L55SAFKL.js';
8
+ import { cn } from '../../../chunk-64WACXM7.js';
9
+ import '../../../chunk-4OZDHCZV.js';
10
+ import '../../../chunk-UGHAADU5.js';
11
11
  import { __publicField } from '../../../chunk-QPXIAUJD.js';
12
12
  import React3, { createContext, forwardRef, useRef, useState, useMemo, useEffect, useCallback, useImperativeHandle, Component, useContext, useReducer, useLayoutEffect } from 'react';
13
13
  import { useTranslate } from '@almadar/ui/hooks';