@almadar/ui 6.10.0 → 6.11.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
@@ -19,6 +19,7 @@ var ELK = require('elkjs/lib/elk.bundled.js');
19
19
  var SyntaxHighlighter = require('react-syntax-highlighter/dist/esm/prism-light.js');
20
20
  var dark = require('react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js');
21
21
  var syntax = require('@almadar/syntax');
22
+ var i18n = require('@almadar/core/i18n');
22
23
  var langJson = require('react-syntax-highlighter/dist/esm/languages/prism/json.js');
23
24
  var langJavascript = require('react-syntax-highlighter/dist/esm/languages/prism/javascript.js');
24
25
  var langTypescript = require('react-syntax-highlighter/dist/esm/languages/prism/typescript.js');
@@ -14114,6 +14115,15 @@ function buildLineProps(errorLines, extraClassName) {
14114
14115
  };
14115
14116
  };
14116
14117
  }
14118
+ function translateProgram(source, language, lang) {
14119
+ if (lang === "en") return source;
14120
+ if (language === "lolo") return syntax.translateLolo(source, lang);
14121
+ if (language === "orb") {
14122
+ const translated = syntax.translateOrb(source, lang);
14123
+ return typeof translated === "string" ? translated : source;
14124
+ }
14125
+ return source;
14126
+ }
14117
14127
  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; exports.CodeBlock = void 0;
14118
14128
  var init_CodeBlock = __esm({
14119
14129
  "components/core/molecules/markdown/CodeBlock.tsx"() {
@@ -14379,6 +14389,7 @@ var init_CodeBlock = __esm({
14379
14389
  showLineNumbers = false,
14380
14390
  wordWrap = false,
14381
14391
  files,
14392
+ naturalLanguages,
14382
14393
  actions,
14383
14394
  isLoading = false,
14384
14395
  error,
@@ -14425,7 +14436,48 @@ var init_CodeBlock = __esm({
14425
14436
  "replace"
14426
14437
  ]
14427
14438
  }) => {
14428
- const code = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
14439
+ const englishCode = typeof rawCode === "string" ? rawCode : String(rawCode ?? "");
14440
+ const naturalTabs = !editable && naturalLanguages && naturalLanguages.length > 1 ? naturalLanguages : void 0;
14441
+ const [naturalLanguage, setNaturalLanguage] = React79.useState(() => naturalTabs?.[0] ?? "en");
14442
+ const activeNaturalLanguage = naturalTabs?.includes(naturalLanguage) === true ? naturalLanguage : naturalTabs?.[0] ?? "en";
14443
+ const translationCache = React79.useMemo(() => /* @__PURE__ */ new Map(), [englishCode, files]);
14444
+ const translateFor = React79.useCallback(
14445
+ (source, sourceLanguage, cacheKey) => {
14446
+ if (activeNaturalLanguage === "en") return source;
14447
+ const key = `${cacheKey}|${sourceLanguage}|${activeNaturalLanguage}`;
14448
+ const hit = translationCache.get(key);
14449
+ if (hit !== void 0) return hit;
14450
+ const translated = translateProgram(source, sourceLanguage, activeNaturalLanguage);
14451
+ translationCache.set(key, translated);
14452
+ return translated;
14453
+ },
14454
+ [translationCache, activeNaturalLanguage]
14455
+ );
14456
+ const code = translateFor(englishCode, language, "code");
14457
+ const naturalTabItems = naturalTabs?.map((lang) => ({
14458
+ id: `lang-${lang}`,
14459
+ label: i18n.coreTables[lang].meta.name,
14460
+ content: null
14461
+ }));
14462
+ const naturalTabStrip = naturalTabs && naturalTabItems ? /* @__PURE__ */ jsxRuntime.jsx(
14463
+ exports.Box,
14464
+ {
14465
+ className: "border-b border-border",
14466
+ dir: i18n.coreTables[activeNaturalLanguage].meta.rtl ? "rtl" : "ltr",
14467
+ "data-testid": "codeblock-language-tabs",
14468
+ children: /* @__PURE__ */ jsxRuntime.jsx(
14469
+ exports.Tabs,
14470
+ {
14471
+ tabs: naturalTabItems,
14472
+ activeTab: `lang-${activeNaturalLanguage}`,
14473
+ onTabChange: (id) => {
14474
+ const next = naturalTabs.find((lang) => `lang-${lang}` === id);
14475
+ if (next) setNaturalLanguage(next);
14476
+ }
14477
+ }
14478
+ )
14479
+ }
14480
+ ) : null;
14429
14481
  const activeStyle = resolveHighlightStyle(language);
14430
14482
  const overCapacity = code.length > HIGHLIGHT_CAPACITY_BYTES;
14431
14483
  const plainCodeColor = plainCodeColorOf(activeStyle);
@@ -14438,8 +14490,8 @@ var init_CodeBlock = __esm({
14438
14490
  const [wrap, setWrap] = React79.useState(wordWrap);
14439
14491
  const [activeFileIndex, setActiveFileIndex] = React79.useState(0);
14440
14492
  const activeFile = files?.[activeFileIndex];
14441
- const activeCode = activeFile?.code ?? code;
14442
14493
  const activeLanguage = activeFile?.language ?? language;
14494
+ const activeCode = activeFile ? translateFor(activeFile.code, activeLanguage, `file-${activeFileIndex}`) : code;
14443
14495
  const languageReady = useLanguageReady(activeLanguage);
14444
14496
  const viewerStyle = resolveHighlightStyle(activeLanguage);
14445
14497
  const viewerPlainCodeColor = plainCodeColorOf(viewerStyle);
@@ -14924,6 +14976,7 @@ var init_CodeBlock = __esm({
14924
14976
  content: null
14925
14977
  }));
14926
14978
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: cn("overflow-hidden", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
14979
+ naturalTabStrip,
14927
14980
  tabItems && tabItems.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "border-b border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
14928
14981
  exports.Tabs,
14929
14982
  {
@@ -14985,7 +15038,7 @@ var init_CodeBlock = __esm({
14985
15038
  ]
14986
15039
  }
14987
15040
  ),
14988
- /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "overflow-auto bg-muted/20", style: { maxHeight }, children: diffLines ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexDirection: "column" }, className: "font-mono text-xs", children: diffRowElements }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono text-xs", children: viewerHighlightedElement }) })
15041
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "overflow-auto bg-muted/20", style: { maxHeight }, dir: "ltr", children: diffLines ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexDirection: "column" }, className: "font-mono text-xs", children: diffRowElements }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono text-xs", children: viewerHighlightedElement }) })
14989
15042
  ] }) });
14990
15043
  }
14991
15044
  const hasHeader = showLanguageBadge || effectiveCopy;
@@ -15012,6 +15065,7 @@ var init_CodeBlock = __esm({
15012
15065
  ]
15013
15066
  }
15014
15067
  ),
15068
+ naturalTabStrip,
15015
15069
  editable ? (
15016
15070
  /* GAP-77 / GAP-82 / GAP-83: editable mode = transparent textarea on
15017
15071
  top of a Prism-highlighted SyntaxHighlighter overlay.
@@ -15163,6 +15217,7 @@ var init_CodeBlock = __esm({
15163
15217
  {
15164
15218
  ref: scrollRef,
15165
15219
  onCopy: handleSelectionCopy,
15220
+ dir: "ltr",
15166
15221
  style: {
15167
15222
  flex: 1,
15168
15223
  minHeight: 0,
@@ -15181,7 +15236,7 @@ var init_CodeBlock = __esm({
15181
15236
  )
15182
15237
  ] });
15183
15238
  },
15184
- (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
15239
+ (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
15185
15240
  );
15186
15241
  exports.CodeBlock.displayName = "CodeBlock";
15187
15242
  }
@@ -18876,26 +18931,6 @@ var init_ButtonGroup = __esm({
18876
18931
  exports.ButtonGroup.displayName = "ButtonGroup";
18877
18932
  }
18878
18933
  });
18879
- function getNestedValue(obj, path) {
18880
- if (obj === null || obj === void 0 || !path) {
18881
- return void 0;
18882
- }
18883
- if (!path.includes(".")) {
18884
- return obj[path];
18885
- }
18886
- const parts = path.split(".");
18887
- let value = obj;
18888
- for (const part of parts) {
18889
- if (value === null || value === void 0) {
18890
- return void 0;
18891
- }
18892
- if (typeof value !== "object" || Array.isArray(value)) {
18893
- return void 0;
18894
- }
18895
- value = value[part];
18896
- }
18897
- return value;
18898
- }
18899
18934
  function resolveImageUrl(value) {
18900
18935
  if (typeof value === "string") {
18901
18936
  return value;
@@ -19023,11 +19058,11 @@ function getWeekDays(start) {
19023
19058
  return days;
19024
19059
  }
19025
19060
  function eventStartDate(event, startField) {
19026
- const raw = getNestedValue(event, startField);
19061
+ const raw = core.getNestedValue(event, startField);
19027
19062
  return new Date(raw ?? "");
19028
19063
  }
19029
19064
  function eventEndDate(event, endField) {
19030
- const raw = getNestedValue(event, endField);
19065
+ const raw = core.getNestedValue(event, endField);
19031
19066
  if (raw === void 0 || raw === null || raw === "") return null;
19032
19067
  const end = new Date(raw);
19033
19068
  return Number.isNaN(end.getTime()) ? null : end;
@@ -19162,8 +19197,8 @@ function CalendarGrid({
19162
19197
  }, [longPressEvent, longPressPayload, eventBus]);
19163
19198
  const renderChip = children ?? renderItem;
19164
19199
  const renderEvent = (event) => {
19165
- const color = getNestedValue(event, colorField);
19166
- const label = String(getNestedValue(event, titleField) ?? "");
19200
+ const color = core.getNestedValue(event, colorField);
19201
+ const label = String(core.getNestedValue(event, titleField) ?? "");
19167
19202
  const eventIndex = evs.indexOf(event);
19168
19203
  return /* @__PURE__ */ jsxRuntime.jsx(
19169
19204
  exports.Box,
@@ -19284,7 +19319,7 @@ function CalendarGrid({
19284
19319
  children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", children: [
19285
19320
  slotEvents.map(renderEvent),
19286
19321
  continuingEvents.map((event) => {
19287
- const color = getNestedValue(event, colorField);
19322
+ const color = core.getNestedValue(event, colorField);
19288
19323
  return /* @__PURE__ */ jsxRuntime.jsx(
19289
19324
  exports.Box,
19290
19325
  {
@@ -21011,7 +21046,7 @@ var init_CardGrid = __esm({
21011
21046
  e.stopPropagation();
21012
21047
  if (action.navigatesTo) {
21013
21048
  const url = action.navigatesTo.replace(/\{\{row\.(\w+(?:\.\w+)*)\}\}/g, (_, field) => {
21014
- const value = getNestedValue(itemData, field);
21049
+ const value = core.getNestedValue(itemData, field);
21015
21050
  return value !== void 0 && value !== null ? String(value) : "";
21016
21051
  });
21017
21052
  eventBus.emit("UI:NAVIGATE", { url, row: itemData });
@@ -21044,8 +21079,8 @@ var init_CardGrid = __esm({
21044
21079
  return normalizedData.map((item, index) => {
21045
21080
  const itemData = item;
21046
21081
  const id = itemData.id || String(index);
21047
- const titleValue = titleField ? getNestedValue(itemData, titleField) : void 0;
21048
- const statusValue = statusField ? getNestedValue(itemData, statusField) : void 0;
21082
+ const titleValue = titleField ? core.getNestedValue(itemData, titleField) : void 0;
21083
+ const statusValue = statusField ? core.getNestedValue(itemData, statusField) : void 0;
21049
21084
  return /* @__PURE__ */ jsxRuntime.jsxs(
21050
21085
  exports.Box,
21051
21086
  {
@@ -21060,7 +21095,7 @@ var init_CardGrid = __esm({
21060
21095
  actionPayload: { row: itemData },
21061
21096
  children: [
21062
21097
  imageField && (() => {
21063
- const imgUrl = resolveImageUrl(getNestedValue(itemData, imageField));
21098
+ const imgUrl = resolveImageUrl(core.getNestedValue(itemData, imageField));
21064
21099
  if (!imgUrl) return null;
21065
21100
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full aspect-video overflow-hidden rounded-t-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
21066
21101
  "img",
@@ -21092,7 +21127,7 @@ var init_CardGrid = __esm({
21092
21127
  )) })
21093
21128
  ] }) }),
21094
21129
  bodyFields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "px-4 py-3 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(exports.VStack, { gap: "xs", children: bodyFields.map((field) => {
21095
- const value = getNestedValue(itemData, field);
21130
+ const value = core.getNestedValue(itemData, field);
21096
21131
  if (value === void 0 || value === null || value === "") return null;
21097
21132
  const fieldValue = value;
21098
21133
  const boolVal = asBooleanValue(fieldValue);
@@ -25638,7 +25673,7 @@ function DataGrid({
25638
25673
  )
25639
25674
  );
25640
25675
  }
25641
- const titleValue = getNestedValue(itemData, titleField?.name ?? "");
25676
+ const titleValue = core.getNestedValue(itemData, titleField?.name ?? "");
25642
25677
  return wrapDnd(
25643
25678
  /* @__PURE__ */ jsxRuntime.jsxs(
25644
25679
  exports.Box,
@@ -25657,7 +25692,7 @@ function DataGrid({
25657
25692
  ),
25658
25693
  children: [
25659
25694
  imageField && (() => {
25660
- const imgUrl = resolveImageUrl(getNestedValue(itemData, imageField));
25695
+ const imgUrl = resolveImageUrl(core.getNestedValue(itemData, imageField));
25661
25696
  if (!imgUrl) return null;
25662
25697
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full aspect-video overflow-hidden rounded-t-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
25663
25698
  "img",
@@ -25694,7 +25729,7 @@ function DataGrid({
25694
25729
  )
25695
25730
  ] }),
25696
25731
  badgeFields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "xs", className: "flex-wrap", children: badgeFields.map((field) => {
25697
- const val = getNestedValue(itemData, field.name);
25732
+ const val = core.getNestedValue(itemData, field.name);
25698
25733
  if (val === void 0 || val === null || val === "") return null;
25699
25734
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", className: "items-center", children: [
25700
25735
  field.icon && renderIconInput(field.icon, { size: "xs" }),
@@ -25735,12 +25770,12 @@ function DataGrid({
25735
25770
  ] }) }),
25736
25771
  bodyFields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "px-4 pt-2 pb-4 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", children: [
25737
25772
  bodyFields.filter((f3) => f3.variant === "caption" && f3.format !== "boolean").map((field) => {
25738
- const value = getNestedValue(itemData, field.name);
25773
+ const value = core.getNestedValue(itemData, field.name);
25739
25774
  if (value === void 0 || value === null || value === "") return null;
25740
25775
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", color: "secondary", className: "line-clamp-2", children: formatValue(value, field.format) }, field.name);
25741
25776
  }),
25742
25777
  /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "md", className: "flex-wrap gap-y-1", children: bodyFields.filter((f3) => f3.variant !== "caption" || f3.format === "boolean").map((field) => {
25743
- const value = getNestedValue(itemData, field.name);
25778
+ const value = core.getNestedValue(itemData, field.name);
25744
25779
  if (value === void 0 || value === null || value === "") return null;
25745
25780
  if (field.format === "boolean") {
25746
25781
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", className: "items-center", children: [
@@ -25858,7 +25893,7 @@ function formatValue2(value, format, boolLabels) {
25858
25893
  function groupData(items, field) {
25859
25894
  const groups = /* @__PURE__ */ new Map();
25860
25895
  for (const item of items) {
25861
- const key = String(getNestedValue(item, field) ?? "");
25896
+ const key = String(core.getNestedValue(item, field) ?? "");
25862
25897
  const group = groups.get(key);
25863
25898
  if (group) group.push(item);
25864
25899
  else groups.set(key, [item]);
@@ -26051,7 +26086,7 @@ function DataList({
26051
26086
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
26052
26087
  const senderLabel = (itemData, raw) => {
26053
26088
  if (!senderLabelField) return raw;
26054
- const v = getNestedValue(itemData, senderLabelField);
26089
+ const v = core.getNestedValue(itemData, senderLabelField);
26055
26090
  return v === void 0 || v === null || v === "" ? raw : String(v);
26056
26091
  };
26057
26092
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", className: cn("py-2", className), children: [
@@ -26059,11 +26094,11 @@ function DataList({
26059
26094
  group.label && /* @__PURE__ */ jsxRuntime.jsx(exports.Divider, { label: group.label, className: "my-2" }),
26060
26095
  group.items.map((itemData, index) => {
26061
26096
  const id = itemData.id || `${gi}-${index}`;
26062
- const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
26097
+ const sender = senderField ? String(core.getNestedValue(itemData, senderField) ?? "") : "";
26063
26098
  const isSent = Boolean(currentUser && sender === currentUser);
26064
- const content = getNestedValue(itemData, contentField);
26099
+ const content = core.getNestedValue(itemData, contentField);
26065
26100
  const timestampField = fieldDefs.find((f3) => f3.format === "date");
26066
- const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
26101
+ const timestamp = timestampField ? core.getNestedValue(itemData, timestampField.name) : null;
26067
26102
  const metaFields = fieldDefs.filter(
26068
26103
  (f3) => f3.name !== contentField && f3.name !== timestampField?.name
26069
26104
  );
@@ -26089,7 +26124,7 @@ function DataList({
26089
26124
  !isSent && senderField && /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "font-semibold mb-0.5", children: senderLabel(itemData, sender) }),
26090
26125
  /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: cn(isSent && "text-primary-foreground"), children: content !== void 0 && content !== null ? String(content) : "" }),
26091
26126
  metaFields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "xs", className: "mt-1 flex-wrap", children: metaFields.map((f3) => {
26092
- const v = getNestedValue(itemData, f3.name);
26127
+ const v = core.getNestedValue(itemData, f3.name);
26093
26128
  if (v === void 0 || v === null || v === "") return null;
26094
26129
  return f3.variant === "badge" ? (
26095
26130
  // `format` applies here too — a boolean field badged
@@ -26177,7 +26212,7 @@ function DataList({
26177
26212
  );
26178
26213
  }
26179
26214
  const id = itemData.id || String(index);
26180
- const titleValue = getNestedValue(itemData, titleField?.name ?? "");
26215
+ const titleValue = core.getNestedValue(itemData, titleField?.name ?? "");
26181
26216
  return wrapDnd(
26182
26217
  /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { "data-entity-row": true, "data-entity-id": id, onClick: rowClickEvent ? handleRowClick(itemData) : void 0, className: cn(rowClickEvent && "cursor-pointer"), children: [
26183
26218
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -26206,7 +26241,7 @@ function DataList({
26206
26241
  }
26207
26242
  ),
26208
26243
  badgeFields.map((field) => {
26209
- const val = getNestedValue(itemData, field.name);
26244
+ const val = core.getNestedValue(itemData, field.name);
26210
26245
  if (val === void 0 || val === null) return null;
26211
26246
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", className: "items-center flex-shrink-0", children: [
26212
26247
  field.icon && renderIconInput2(field.icon, { size: "xs" }),
@@ -26215,7 +26250,7 @@ function DataList({
26215
26250
  })
26216
26251
  ] }),
26217
26252
  bodyFields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "md", className: cn("flex-wrap", isCompact ? "mt-0.5" : "mt-1.5"), children: bodyFields.map((field) => {
26218
- const value = getNestedValue(itemData, field.name);
26253
+ const value = core.getNestedValue(itemData, field.name);
26219
26254
  if (value === void 0 || value === null || value === "") return null;
26220
26255
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", className: "items-center", children: [
26221
26256
  field.icon && renderIconInput2(field.icon, { size: "xs", className: "text-muted-foreground" }),
@@ -26235,7 +26270,7 @@ function DataList({
26235
26270
  ] }, field.name);
26236
26271
  }) }),
26237
26272
  progressFields.map((field) => {
26238
- const value = getNestedValue(itemData, field.name);
26273
+ const value = core.getNestedValue(itemData, field.name);
26239
26274
  if (typeof value !== "number") return null;
26240
26275
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "mt-2 max-w-xs", children: [
26241
26276
  /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", className: "items-center mb-1", children: [
@@ -36102,7 +36137,7 @@ function statusVariant4(value) {
36102
36137
  function groupData2(items, field) {
36103
36138
  const groups = /* @__PURE__ */ new Map();
36104
36139
  for (const item of items) {
36105
- const key = String(getNestedValue(item, field) ?? "");
36140
+ const key = String(core.getNestedValue(item, field) ?? "");
36106
36141
  const group = groups.get(key);
36107
36142
  if (group) group.push(item);
36108
36143
  else groups.set(key, [item]);
@@ -36218,7 +36253,7 @@ function TableView({
36218
36253
  const colFloors = React79__namespace.default.useMemo(
36219
36254
  () => colDefs.map((col) => {
36220
36255
  const longest = data.reduce((widest, row) => {
36221
- const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
36256
+ const cell = formatCell(asFieldValue(core.getNestedValue(row, col.field ?? col.key)), col.format);
36222
36257
  return Math.max(widest, cell.length);
36223
36258
  }, columnLabel(col).length);
36224
36259
  const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
@@ -36310,7 +36345,7 @@ function TableView({
36310
36345
  }
36311
36346
  ) }),
36312
36347
  hasRenderProp ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1 min-w-0", children: children(row, index) }) : colDefs.map((col) => {
36313
- const raw = asFieldValue(getNestedValue(row, col.field ?? col.key));
36348
+ const raw = asFieldValue(core.getNestedValue(row, col.field ?? col.key));
36314
36349
  const cellBase = cn(
36315
36350
  "flex items-center min-w-0",
36316
36351
  alignClass[col.align ?? "left"],
@@ -40377,7 +40412,7 @@ function DocumentDetails({
40377
40412
  };
40378
40413
  const renderValue = (field) => {
40379
40414
  const name = fieldName(field);
40380
- const raw = getNestedValue(entity ?? {}, name);
40415
+ const raw = core.getNestedValue(entity ?? {}, name);
40381
40416
  const kind = fieldKind(field, raw);
40382
40417
  const label = field.label ?? field.header ?? humanizeFieldName(name);
40383
40418
  if (kind === "image") {
@@ -43084,11 +43119,11 @@ var init_WizardContainer = __esm({
43084
43119
  });
43085
43120
  function calculateComplexity(schema) {
43086
43121
  if (!schema) return 1;
43087
- const entities = schema.dataEntities?.length || 0;
43122
+ const entities = schema.dataEntities || 0;
43088
43123
  const pages = schema.ui?.pages?.length || 0;
43089
- const traits2 = schema.traits?.length || 0;
43124
+ const traits2 = schema.traits || 0;
43090
43125
  const sections = schema.ui?.pages?.reduce(
43091
- (acc, page) => acc + (page.sections?.length || 0),
43126
+ (acc, page) => acc + (page.sections || 0),
43092
43127
  0
43093
43128
  ) || 0;
43094
43129
  return entities * 3 + pages * 2 + traits2 * 2 + sections * 1;
@@ -45635,7 +45670,7 @@ function DataTable({
45635
45670
  }
45636
45671
  ) }),
45637
45672
  normalizedColumns.map((col) => {
45638
- const cellValue = getNestedValue(
45673
+ const cellValue = core.getNestedValue(
45639
45674
  row,
45640
45675
  String(col.key)
45641
45676
  );
@@ -46078,7 +46113,7 @@ var init_DetailPanel = __esm({
46078
46113
  ...section,
46079
46114
  fields: section.fields.map((field) => {
46080
46115
  if (typeof field === "string") {
46081
- const value = getNestedValue(normalizedData, field);
46116
+ const value = core.getNestedValue(normalizedData, field);
46082
46117
  return {
46083
46118
  label: labelFor(field),
46084
46119
  value: formatFieldValue2(value, field)
@@ -46118,7 +46153,7 @@ var init_DetailPanel = __esm({
46118
46153
  if (otherFields.length > 0) {
46119
46154
  const overviewFields = [];
46120
46155
  otherFields.forEach((field) => {
46121
- const value = getNestedValue(normalizedData, field);
46156
+ const value = core.getNestedValue(normalizedData, field);
46122
46157
  if (value !== void 0 && value !== null) {
46123
46158
  overviewFields.push({
46124
46159
  label: labelFor(field),
@@ -46133,7 +46168,7 @@ var init_DetailPanel = __esm({
46133
46168
  if (progressFields.length > 0 || metricFields.length > 0) {
46134
46169
  const metricsFields = [];
46135
46170
  [...progressFields, ...metricFields].forEach((field) => {
46136
- const value = getNestedValue(normalizedData, field);
46171
+ const value = core.getNestedValue(normalizedData, field);
46137
46172
  if (value !== void 0 && value !== null) {
46138
46173
  metricsFields.push({
46139
46174
  label: labelFor(field),
@@ -46148,7 +46183,7 @@ var init_DetailPanel = __esm({
46148
46183
  if (dateFields.length > 0) {
46149
46184
  const timelineFields = [];
46150
46185
  dateFields.forEach((field) => {
46151
- const value = getNestedValue(normalizedData, field);
46186
+ const value = core.getNestedValue(normalizedData, field);
46152
46187
  if (value !== void 0 && value !== null) {
46153
46188
  timelineFields.push({
46154
46189
  label: labelFor(field),
@@ -46163,7 +46198,7 @@ var init_DetailPanel = __esm({
46163
46198
  if (descriptionFields.length > 0) {
46164
46199
  const descFields = [];
46165
46200
  descriptionFields.forEach((field) => {
46166
- const value = getNestedValue(normalizedData, field);
46201
+ const value = core.getNestedValue(normalizedData, field);
46167
46202
  if (value !== void 0 && value !== null) {
46168
46203
  descFields.push({
46169
46204
  label: labelFor(field),
@@ -46220,7 +46255,7 @@ var init_DetailPanel = __esm({
46220
46255
  for (const section of sections) {
46221
46256
  for (const field of section.fields) {
46222
46257
  if (typeof field === "string") {
46223
- const value = normalizedData ? getNestedValue(normalizedData, field) : void 0;
46258
+ const value = normalizedData ? core.getNestedValue(normalizedData, field) : void 0;
46224
46259
  allFields.push({
46225
46260
  label: labelFor(field),
46226
46261
  value: renderRichFieldValue(value, field, fieldTypeMap[field], metaFor(field))
@@ -46239,7 +46274,7 @@ var init_DetailPanel = __esm({
46239
46274
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
46240
46275
  (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
46241
46276
  ).map((field) => {
46242
- const value = getNestedValue(normalizedData, field);
46277
+ const value = core.getNestedValue(normalizedData, field);
46243
46278
  if (!value) return null;
46244
46279
  return /* @__PURE__ */ jsxRuntime.jsx(
46245
46280
  exports.Badge,
@@ -46370,7 +46405,7 @@ var init_DetailPanel = __esm({
46370
46405
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
46371
46406
  (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
46372
46407
  ).map((field) => {
46373
- const value = getNestedValue(normalizedData, field);
46408
+ const value = core.getNestedValue(normalizedData, field);
46374
46409
  if (value === void 0 || value === null || typeof value !== "number")
46375
46410
  return null;
46376
46411
  return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", className: "w-full", children: [
@@ -48192,14 +48227,14 @@ var init_List = __esm({
48192
48227
  };
48193
48228
  if (effectiveFieldNames && effectiveFieldNames.length > 0) {
48194
48229
  const firstField = effectiveFieldNames[0];
48195
- if (!normalizedItem.title && getNestedValue(item, firstField)) {
48230
+ if (!normalizedItem.title && core.getNestedValue(item, firstField)) {
48196
48231
  normalizedItem.title = String(
48197
- getNestedValue(item, firstField)
48232
+ core.getNestedValue(item, firstField)
48198
48233
  );
48199
48234
  }
48200
48235
  normalizedItem._fields = effectiveFieldNames.reduce(
48201
48236
  (acc, field) => {
48202
- const value = getNestedValue(item, field);
48237
+ const value = core.getNestedValue(item, field);
48203
48238
  if (value !== void 0 && value !== null) {
48204
48239
  acc[field] = value;
48205
48240
  }
@@ -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.cjs';
7
- export { R as Rect } from '../types-B3nHgnMG.cjs';
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.cjs';
7
+ export { f as FxOverlayKind, R as Rect } from '../paintDispatch-CK5uwYEq.cjs';
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-FQ1474v8.cjs';
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-FQ1474v8.cjs';
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-D3R8NNmV.cjs';
12
- export { e as FxOverlayKind } from '../paintDispatch-D3R8NNmV.cjs';
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-Dk_Y3LN3.cjs';
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-DnLYahyL.cjs';
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-DnLYahyL.cjs';
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-PVu8rgsy.cjs';
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-PVu8rgsy.cjs';
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-D8GynTNq.cjs';
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.cjs';
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.cjs';
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.cjs';
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.cjs';
18
+ import '../verificationRegistry-BLsjb1oU.cjs';
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.cjs';
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-CVn8lfiX.cjs';
21
21
  export { E as EventBusContextType } from '../event-bus-types-Bl78kokd.cjs';
@@ -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 */