@almadar/ui 6.53.1 → 6.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/{AwaitingSkeletonContext-Bh399p1x.d.ts → AwaitingSkeletonContext-DPgW__WV.d.ts} +3 -1
  2. package/dist/{Canvas3DHost-B-y2TNij.d.ts → Canvas3DHost-DfAhg6EH.d.ts} +2 -0
  3. package/dist/Typography-7PDT62PG.js +5 -0
  4. package/dist/{UISlotRenderer-P7A4SZSK.js → UISlotRenderer-QTHFT6Z4.js} +8 -8
  5. package/dist/avl/index.cjs +3031 -1790
  6. package/dist/avl/index.js +57 -745
  7. package/dist/{avl-3d-context-MAt_NuU9.d.ts → avl-3d-context-BpBKZIbc.d.ts} +1 -0
  8. package/dist/{chunk-ERXIHZW3.js → chunk-D2E44ODB.js} +29 -15
  9. package/dist/{chunk-UOTYAPV5.js → chunk-F4ZTPKZL.js} +3 -3
  10. package/dist/{chunk-53VTY5CC.js → chunk-FQM37C56.js} +352 -162
  11. package/dist/{chunk-HB4C27KU.js → chunk-HCSJHRC4.js} +1 -1
  12. package/dist/{chunk-7KSLPY56.js → chunk-HRCR53OW.js} +11 -1
  13. package/dist/{chunk-O7OLVVBR.js → chunk-Q47ZN2DW.js} +24 -22
  14. package/dist/{chunk-DQTV6QVS.js → chunk-QGH4NAQO.js} +53 -2
  15. package/dist/{chunk-QVXLKFUQ.js → chunk-RNY5LJXJ.js} +1 -1
  16. package/dist/{chunk-FUQASYEW.js → chunk-SGJHVPHC.js} +2 -2
  17. package/dist/{chunk-6O37FCX4.js → chunk-V3FGTQUE.js} +37 -2
  18. package/dist/{chunk-HUG25TT3.js → chunk-XZKGRSIO.js} +2745 -1644
  19. package/dist/{chunk-7LM6I3NA.js → chunk-Y53Q55H5.js} +522 -24
  20. package/dist/components/index.cjs +4614 -2858
  21. package/dist/components/index.d.ts +122 -53
  22. package/dist/components/index.js +16 -17
  23. package/dist/context/index.cjs +38 -1
  24. package/dist/context/index.d.ts +1 -1
  25. package/dist/context/index.js +3 -1
  26. package/dist/design-classes/index.cjs +29 -15
  27. package/dist/design-classes/index.d.cts +1 -0
  28. package/dist/design-classes/index.d.ts +1 -0
  29. package/dist/design-classes/index.js +29 -15
  30. package/dist/hooks/index.cjs +16 -1
  31. package/dist/hooks/index.d.ts +10 -1
  32. package/dist/hooks/index.js +3 -4
  33. package/dist/lib/drawable/three/index.cjs +444 -82
  34. package/dist/lib/drawable/three/index.d.ts +4 -4
  35. package/dist/lib/drawable/three/index.js +28 -24
  36. package/dist/lib/index.cjs +53 -3
  37. package/dist/lib/index.d.ts +1 -1
  38. package/dist/lib/index.js +4 -4
  39. package/dist/locales/index.cjs +33 -3
  40. package/dist/locales/index.js +23 -3
  41. package/dist/providers/index.cjs +4987 -3183
  42. package/dist/providers/index.d.ts +2 -2
  43. package/dist/providers/index.js +14 -11
  44. package/dist/runtime/index.cjs +8973 -7000
  45. package/dist/runtime/index.d.ts +28 -6
  46. package/dist/runtime/index.js +16 -13
  47. package/dist/ssr/index.cjs +26 -9
  48. package/dist/ssr/index.js +26 -9
  49. package/dist/{themeTokens-Ccu7EmGY.d.ts → themeTokens-D6MFwKrC.d.ts} +6 -2
  50. package/locales/ar.json +11 -1
  51. package/locales/en.json +11 -1
  52. package/locales/sl.json +11 -1
  53. package/package.json +8 -7
  54. package/scripts/audit-tailwind-safelist.ts +21 -1
  55. package/scripts/theme-contrast-audit.mjs +20 -1
  56. package/tailwind-preset.cjs +5 -6
  57. package/themes/_base.css +61 -0
  58. package/themes/_contract.md +37 -0
  59. package/themes/_fonts.css +6 -4
  60. package/themes/_presets.css +2 -0
  61. package/themes/almadar-heritage.css +455 -0
  62. package/themes/almadar-website.css +82 -0
  63. package/themes/almadar.css +82 -0
  64. package/themes/aqua.css +82 -0
  65. package/themes/arabesque.css +82 -0
  66. package/themes/art-deco.css +82 -0
  67. package/themes/art-nouveau.css +82 -0
  68. package/themes/atelier.css +82 -0
  69. package/themes/bauhaus.css +82 -0
  70. package/themes/bloomberg-dense.css +83 -1
  71. package/themes/blueprint.css +84 -0
  72. package/themes/clay.css +82 -0
  73. package/themes/comic.css +82 -0
  74. package/themes/constructivist.css +82 -0
  75. package/themes/corporate.css +82 -0
  76. package/themes/cyberpunk.css +82 -0
  77. package/themes/frutiger-aero.css +83 -0
  78. package/themes/game-adventure.css +15 -0
  79. package/themes/game-rpg.css +16 -0
  80. package/themes/game-sci-fi.css +15 -0
  81. package/themes/game-ui-pack.css +15 -0
  82. package/themes/gazette.css +82 -0
  83. package/themes/glass.css +82 -0
  84. package/themes/gothic.css +82 -0
  85. package/themes/ink-wash.css +82 -0
  86. package/themes/kawaii.css +82 -0
  87. package/themes/kiosk.css +82 -0
  88. package/themes/linear-clean.css +82 -0
  89. package/themes/luxury.css +82 -0
  90. package/themes/mac-classic.css +90 -8
  91. package/themes/material.css +82 -0
  92. package/themes/memphis.css +82 -0
  93. package/themes/mid-century.css +82 -0
  94. package/themes/minimalist.css +82 -0
  95. package/themes/mudcloth.css +82 -0
  96. package/themes/neon.css +83 -0
  97. package/themes/neumorphic.css +82 -0
  98. package/themes/newsprint.css +82 -0
  99. package/themes/notion-editorial.css +82 -0
  100. package/themes/orb.css +455 -0
  101. package/themes/pixel.css +82 -0
  102. package/themes/prism.css +82 -0
  103. package/themes/retro.css +83 -0
  104. package/themes/risograph.css +82 -0
  105. package/themes/scandi.css +82 -0
  106. package/themes/sketch.css +82 -0
  107. package/themes/solarpunk.css +82 -0
  108. package/themes/steampunk.css +82 -0
  109. package/themes/swiss.css +82 -0
  110. package/themes/terminal.css +84 -1
  111. package/themes/trait-wars.css +82 -0
  112. package/themes/ukiyo-e.css +82 -0
  113. package/themes/vaporwave.css +82 -0
  114. package/themes/victorian.css +82 -0
  115. package/themes/wabi-sabi.css +82 -0
  116. package/themes/win95.css +84 -0
  117. package/themes/wireframe.css +82 -0
  118. package/themes/zine.css +82 -0
  119. package/dist/Typography-7QEWUTW3.js +0 -5
  120. package/dist/chunk-E37BYSXY.js +0 -51
@@ -557,6 +557,7 @@ function useSlotHasContent(slot) {
557
557
  // providers/builtInThemes.ts
558
558
  var BUILT_IN_THEMES = [
559
559
  { name: "almadar", displayName: "Almadar", hasLightMode: true, hasDarkMode: true },
560
+ { name: "almadar-heritage", displayName: "Almadar Heritage", hasLightMode: true, hasDarkMode: true },
560
561
  { name: "almadar-website", displayName: "Almadar Website", hasLightMode: true, hasDarkMode: true },
561
562
  { name: "aqua", displayName: "Aqua Gel", hasLightMode: true, hasDarkMode: true },
562
563
  { name: "arabesque", displayName: "Arabesque", hasLightMode: true, hasDarkMode: true },
@@ -594,6 +595,7 @@ var BUILT_IN_THEMES = [
594
595
  { name: "neumorphic", displayName: "Neumorphic", hasLightMode: true, hasDarkMode: true },
595
596
  { name: "newsprint", displayName: "Newsprint", hasLightMode: true, hasDarkMode: true },
596
597
  { name: "notion-editorial", displayName: "Notion Editorial", hasLightMode: true, hasDarkMode: true },
598
+ { name: "orb", displayName: "Orb", hasLightMode: true, hasDarkMode: true },
597
599
  { name: "pixel", displayName: "Pixel Quest", hasLightMode: true, hasDarkMode: true },
598
600
  { name: "prism", displayName: "Prism", hasLightMode: true, hasDarkMode: true },
599
601
  { name: "retro", displayName: "Retro", hasLightMode: true, hasDarkMode: true },
@@ -908,7 +910,38 @@ var SURFACE_VARS = [
908
910
  { cssVar: "--surface-backdrop", key: "backdrop" },
909
911
  { cssVar: "--surface-card-image", key: "cardImage" },
910
912
  { cssVar: "--surface-page-image", key: "pageImage" },
911
- { cssVar: "--surface-page-image-size", key: "pageImageSize" }
913
+ { cssVar: "--surface-page-image-size", key: "pageImageSize" },
914
+ { cssVar: "--surface-diagram", key: "diagram" }
915
+ ];
916
+ var DIAGRAM_VARS = [
917
+ { cssVar: "--diagram-stroke-thin", key: "strokeThin" },
918
+ { cssVar: "--diagram-stroke-normal", key: "strokeNormal" },
919
+ { cssVar: "--diagram-stroke-bold", key: "strokeBold" },
920
+ { cssVar: "--diagram-line-cap", key: "lineCap" },
921
+ { cssVar: "--diagram-line-join", key: "lineJoin" },
922
+ { cssVar: "--diagram-dash", key: "dash" },
923
+ { cssVar: "--diagram-dot", key: "dot" },
924
+ { cssVar: "--diagram-fill-style", key: "fillStyle" },
925
+ { cssVar: "--diagram-fill-opacity", key: "fillOpacity" },
926
+ { cssVar: "--diagram-roughness", key: "roughness" },
927
+ { cssVar: "--diagram-glow", key: "glow" },
928
+ { cssVar: "--diagram-shadow", key: "shadow" },
929
+ { cssVar: "--diagram-marker", key: "marker" },
930
+ { cssVar: "--diagram-label-font", key: "labelFont" },
931
+ { cssVar: "--diagram-label-size", key: "labelSize" },
932
+ { cssVar: "--diagram-label-weight", key: "labelWeight" },
933
+ { cssVar: "--diagram-label-case", key: "labelCase" },
934
+ { cssVar: "--diagram-corner", key: "corner" }
935
+ ];
936
+ var SCENE_VARS = [
937
+ { cssVar: "--material-roughness", key: "materialRoughness" },
938
+ { cssVar: "--material-metalness", key: "materialMetalness" },
939
+ { cssVar: "--material-flat", key: "materialFlat" },
940
+ { cssVar: "--material-outline", key: "materialOutline" },
941
+ { cssVar: "--light-ambient", key: "lightAmbient" },
942
+ { cssVar: "--light-key", key: "lightKey" },
943
+ { cssVar: "--light-key-color", key: "lightKeyColor" },
944
+ { cssVar: "--scene-fog", key: "fog" }
912
945
  ];
913
946
  var LEGACY_PREFIXES = {
914
947
  colors: "--color-",
@@ -969,6 +1002,10 @@ function themeTokensToCssVars(tokens, mode = "light", darkVariant) {
969
1002
  emitGeometry(pickGeometry, vars);
970
1003
  const pickSurface = isDark && darkVariant?.surface ? darkVariant.surface : tokens.surface;
971
1004
  applyFlat(pickSurface, SURFACE_VARS, vars);
1005
+ const pickDiagram = isDark && darkVariant?.diagram ? darkVariant.diagram : tokens.diagram;
1006
+ applyFlat(pickDiagram, DIAGRAM_VARS, vars);
1007
+ const pickScene = isDark && darkVariant?.scene ? darkVariant.scene : tokens.scene;
1008
+ applyFlat(pickScene, SCENE_VARS, vars);
972
1009
  return vars;
973
1010
  }
974
1011
  function emitDensity(density, vars) {
@@ -1,7 +1,7 @@
1
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-Ccu7EmGY.js';
4
+ export { T as ThemeMode, r as resolveThemeForRuntime, t as themeTokensToCssVars } from '../themeTokens-D6MFwKrC.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
7
  export { S as SlotChangeCallback, a as SlotContent, b as SlotRenderConfig, U as UISlotManager } from '../useUISlots-1dk2TR4j.js';
@@ -1,5 +1,5 @@
1
- export { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-6O37FCX4.js';
2
1
  import { useUISlotManager } from '../chunk-VHTJRS2N.js';
2
+ export { resolveThemeForRuntime, themeTokensToCssVars } from '../chunk-V3FGTQUE.js';
3
3
  import '../chunk-PEST66PN.js';
4
4
  import '../chunk-QPXIAUJD.js';
5
5
  import { createContext, useMemo, useContext, useState, useEffect, useCallback } from 'react';
@@ -35,6 +35,7 @@ function useSlotHasContent(slot) {
35
35
  // providers/builtInThemes.ts
36
36
  var BUILT_IN_THEMES = [
37
37
  { name: "almadar", displayName: "Almadar", hasLightMode: true, hasDarkMode: true },
38
+ { name: "almadar-heritage", displayName: "Almadar Heritage", hasLightMode: true, hasDarkMode: true },
38
39
  { name: "almadar-website", displayName: "Almadar Website", hasLightMode: true, hasDarkMode: true },
39
40
  { name: "aqua", displayName: "Aqua Gel", hasLightMode: true, hasDarkMode: true },
40
41
  { name: "arabesque", displayName: "Arabesque", hasLightMode: true, hasDarkMode: true },
@@ -72,6 +73,7 @@ var BUILT_IN_THEMES = [
72
73
  { name: "neumorphic", displayName: "Neumorphic", hasLightMode: true, hasDarkMode: true },
73
74
  { name: "newsprint", displayName: "Newsprint", hasLightMode: true, hasDarkMode: true },
74
75
  { name: "notion-editorial", displayName: "Notion Editorial", hasLightMode: true, hasDarkMode: true },
76
+ { name: "orb", displayName: "Orb", hasLightMode: true, hasDarkMode: true },
75
77
  { name: "pixel", displayName: "Pixel Quest", hasLightMode: true, hasDarkMode: true },
76
78
  { name: "prism", displayName: "Prism", hasLightMode: true, hasDarkMode: true },
77
79
  { name: "retro", displayName: "Retro", hasLightMode: true, hasDarkMode: true },
@@ -362,23 +362,37 @@ function tokenOfDesignClass(className) {
362
362
  function isArbitraryClass(className) {
363
363
  return /^[a-z0-9:@/-]*-\[[^\]\s]+\]$/i.test(className);
364
364
  }
365
- function arbitraryClassesOf(schema) {
366
- const found = /* @__PURE__ */ new Set();
367
- const visit = (value) => {
368
- if (Array.isArray(value)) {
369
- value.forEach(visit);
370
- return;
365
+ function collectClasses(value, found) {
366
+ if (Array.isArray(value)) {
367
+ for (const item of value) collectClasses(item, found);
368
+ return;
369
+ }
370
+ if (value === null || typeof value !== "object") return;
371
+ for (const [key, child] of Object.entries(value)) {
372
+ if (key === "className" && typeof child === "string") {
373
+ for (const cls of child.split(/\s+/)) if (cls && isArbitraryClass(cls)) found.add(cls);
374
+ } else {
375
+ collectClasses(child, found);
371
376
  }
372
- if (value === null || typeof value !== "object") return;
373
- for (const [key, child] of Object.entries(value)) {
374
- if (key === "className" && typeof child === "string") {
375
- for (const cls of child.split(/\s+/)) if (cls && isArbitraryClass(cls)) found.add(cls);
376
- } else {
377
- visit(child);
378
- }
377
+ }
378
+ }
379
+ function classesOfPart(part) {
380
+ const found = /* @__PURE__ */ new Set();
381
+ collectClasses(JSON.parse(JSON.stringify(part)), found);
382
+ return [...found];
383
+ }
384
+ var classesByOrbital = /* @__PURE__ */ new WeakMap();
385
+ function arbitraryClassesOf(schema) {
386
+ const { orbitals, _metadata: _provenance, ledger: _identities, ...rest } = schema;
387
+ const found = new Set(classesOfPart(rest));
388
+ for (const orbital of orbitals ?? []) {
389
+ let classes = classesByOrbital.get(orbital);
390
+ if (!classes) {
391
+ classes = classesOfPart(orbital);
392
+ classesByOrbital.set(orbital, classes);
379
393
  }
380
- };
381
- visit(JSON.parse(JSON.stringify(schema)));
394
+ for (const cls of classes) found.add(cls);
395
+ }
382
396
  return [...found].sort();
383
397
  }
384
398
 
@@ -157,6 +157,7 @@ declare function isArbitraryClass(className: string): boolean;
157
157
  * sorted. Tailwind only compiles classes it saw at build time, so a runtime
158
158
  * that renders a schema compiles these on demand (the scale and token classes
159
159
  * are safelisted by the preset). Bound (expression) classNames are skipped.
160
+ * `_metadata` and `ledger` are provenance and identity records, never render trees.
160
161
  */
161
162
  declare function arbitraryClassesOf(schema: OrbitalSchema): string[];
162
163
 
@@ -157,6 +157,7 @@ declare function isArbitraryClass(className: string): boolean;
157
157
  * sorted. Tailwind only compiles classes it saw at build time, so a runtime
158
158
  * that renders a schema compiles these on demand (the scale and token classes
159
159
  * are safelisted by the preset). Bound (expression) classNames are skipped.
160
+ * `_metadata` and `ledger` are provenance and identity records, never render trees.
160
161
  */
161
162
  declare function arbitraryClassesOf(schema: OrbitalSchema): string[];
162
163
 
@@ -360,23 +360,37 @@ function tokenOfDesignClass(className) {
360
360
  function isArbitraryClass(className) {
361
361
  return /^[a-z0-9:@/-]*-\[[^\]\s]+\]$/i.test(className);
362
362
  }
363
- function arbitraryClassesOf(schema) {
364
- const found = /* @__PURE__ */ new Set();
365
- const visit = (value) => {
366
- if (Array.isArray(value)) {
367
- value.forEach(visit);
368
- return;
363
+ function collectClasses(value, found) {
364
+ if (Array.isArray(value)) {
365
+ for (const item of value) collectClasses(item, found);
366
+ return;
367
+ }
368
+ if (value === null || typeof value !== "object") return;
369
+ for (const [key, child] of Object.entries(value)) {
370
+ if (key === "className" && typeof child === "string") {
371
+ for (const cls of child.split(/\s+/)) if (cls && isArbitraryClass(cls)) found.add(cls);
372
+ } else {
373
+ collectClasses(child, found);
369
374
  }
370
- if (value === null || typeof value !== "object") return;
371
- for (const [key, child] of Object.entries(value)) {
372
- if (key === "className" && typeof child === "string") {
373
- for (const cls of child.split(/\s+/)) if (cls && isArbitraryClass(cls)) found.add(cls);
374
- } else {
375
- visit(child);
376
- }
375
+ }
376
+ }
377
+ function classesOfPart(part) {
378
+ const found = /* @__PURE__ */ new Set();
379
+ collectClasses(JSON.parse(JSON.stringify(part)), found);
380
+ return [...found];
381
+ }
382
+ var classesByOrbital = /* @__PURE__ */ new WeakMap();
383
+ function arbitraryClassesOf(schema) {
384
+ const { orbitals, _metadata: _provenance, ledger: _identities, ...rest } = schema;
385
+ const found = new Set(classesOfPart(rest));
386
+ for (const orbital of orbitals ?? []) {
387
+ let classes = classesByOrbital.get(orbital);
388
+ if (!classes) {
389
+ classes = classesOfPart(orbital);
390
+ classesByOrbital.set(orbital, classes);
377
391
  }
378
- };
379
- visit(JSON.parse(JSON.stringify(schema)));
392
+ for (const cls of classes) found.add(cls);
393
+ }
380
394
  return [...found].sort();
381
395
  }
382
396
 
@@ -1793,6 +1793,7 @@ var en_default = {
1793
1793
  "status.draft": "Draft",
1794
1794
  "status.archived": "Archived",
1795
1795
  "error.generic": "Something went wrong",
1796
+ "error.traitMountFailed": "{{trait}} failed to start",
1796
1797
  "error.retry": "Try again",
1797
1798
  "error.notFound": "Not found",
1798
1799
  "error.loadFailed": "Failed to load: {{message}}",
@@ -1921,6 +1922,7 @@ var en_default = {
1921
1922
  "template.ourTeam": "Our Team",
1922
1923
  "template.caseStudies": "Case Studies",
1923
1924
  "versionDiff.compare": "Compare",
1925
+ "versionDiff.changes": "Changes",
1924
1926
  "versionDiff.to": "to",
1925
1927
  "versionDiff.beforeRevision": "Before revision",
1926
1928
  "versionDiff.afterRevision": "After revision",
@@ -2647,6 +2649,7 @@ var en_default = {
2647
2649
  "gridPicker.moreRefine": "+{{count}} more \u2014 refine your search",
2648
2650
  "graphCanvas.noNodes": "No nodes to display.",
2649
2651
  "codeBlock.noCode": "No code to display.",
2652
+ "codeBlock.region": "Code",
2650
2653
  "fab.action": "Action",
2651
2654
  "fab.closeActions": "Close actions",
2652
2655
  "fab.openActions": "Open actions",
@@ -2963,7 +2966,14 @@ var en_default = {
2963
2966
  "agentActivity.earlierConversations": "Earlier conversations ({{count}})",
2964
2967
  "agentActivity.earlierActivity": "Earlier activity",
2965
2968
  "tabs.scrollStart": "Scroll tabs back",
2966
- "tabs.scrollEnd": "Scroll tabs forward"
2969
+ "tabs.scrollEnd": "Scroll tabs forward",
2970
+ "agentChat.workedThrough": "Worked through {{count}} steps",
2971
+ "agentChat.newMessages": "New messages",
2972
+ "agentChat.copy": "Copy reply",
2973
+ "agentChat.copied": "Copied",
2974
+ "agentChat.today": "Today",
2975
+ "agentChat.yesterday": "Yesterday",
2976
+ "agentChat.emptyDescription": "Ask in your own words \u2014 the assistant can look things up and make changes for you."
2967
2977
  };
2968
2978
 
2969
2979
  // lib/format.ts
@@ -3000,6 +3010,10 @@ function I18nProvider({ value, children, documentRoot }) {
3000
3010
  function useTranslate() {
3001
3011
  return React.useContext(I18nContext);
3002
3012
  }
3013
+ function useRenderI18n() {
3014
+ const { locale, messages } = React.useContext(I18nContext);
3015
+ return React.useMemo(() => messages !== void 0 ? { locale, messages } : void 0, [locale, messages]);
3016
+ }
3003
3017
  function useFormatContext() {
3004
3018
  const { t, locale, currency } = React.useContext(I18nContext);
3005
3019
  return React.useMemo(
@@ -3741,6 +3755,7 @@ exports.usePrefersReducedMotion = usePrefersReducedMotion;
3741
3755
  exports.usePreview = usePreview;
3742
3756
  exports.usePullToRefresh = usePullToRefresh;
3743
3757
  exports.useQuerySingleton = useQuerySingleton;
3758
+ exports.useRenderI18n = useRenderI18n;
3744
3759
  exports.useRenderInterpolation = useRenderInterpolation;
3745
3760
  exports.useSharedEntitySnapshot = useSharedEntitySnapshot;
3746
3761
  exports.useSharedEntityStore = useSharedEntityStore;
@@ -32,6 +32,8 @@ interface I18nContextValue {
32
32
  direction: 'ltr' | 'rtl';
33
33
  /** Translate a key, with optional interpolation params */
34
34
  t: TranslateFunction;
35
+ /** The active locale's program catalog (qualified `<behavior>:<key>` → message): the runtime evaluates `i18n/t` against it. */
36
+ messages?: Readonly<Record<string, string>>;
35
37
  /** ISO 4217 currency of the app's money values, declared by the host with the locale (e.g. `SAR` for an ar-SA app) */
36
38
  currency?: string;
37
39
  }
@@ -57,6 +59,13 @@ declare function I18nProvider({ value, children, documentRoot }: I18nProviderPro
57
59
  * Safe to call without a provider — returns passthrough t().
58
60
  */
59
61
  declare function useTranslate(): I18nContextValue;
62
+ /** The viewer's locale and its catalog, for `i18n/t` / `@locale` evaluated in the browser. */
63
+ interface RenderI18n {
64
+ locale: string;
65
+ messages: Readonly<Record<string, string>>;
66
+ }
67
+ /** The provider's locale + catalog as one identity-stable value; undefined when the host supplied no catalog. */
68
+ declare function useRenderI18n(): RenderI18n | undefined;
60
69
  /** The app's formatting settings for `formatValue`: its locale, currency and translated Yes/No. */
61
70
  declare function useFormatContext(): FormatContext;
62
71
  /**
@@ -1070,4 +1079,4 @@ declare function useGitHubBranches(owner: string, repo: string, enabled?: boolea
1070
1079
  branches: string[];
1071
1080
  }>, Error>;
1072
1081
 
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 };
1082
+ 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 RenderI18n, 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, useRenderI18n, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate, useUIEvents, useValidation };
@@ -1,11 +1,10 @@
1
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-E37BYSXY.js';
3
- export { SharedEntityStoreContext, createSharedEntityStore, runTickFrame, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext } from '../chunk-DQTV6QVS.js';
2
+ export { I18nProvider, SharedEntityStoreContext, createSharedEntityStore, createTranslate, runTickFrame, useFormatContext, useRenderI18n, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTranslate } from '../chunk-QGH4NAQO.js';
4
3
  export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-VHTJRS2N.js';
5
4
  export { ALMADAR_DND_MIME, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useDraggable, useDropZone, useInfiniteScroll, useLongPress, useMediaQuery, usePrefersReducedMotion, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-JRW33U35.js';
6
5
  export { useTapReveal } from '../chunk-XJTHMW4G.js';
7
6
  export { useEmitEvent, useEventBus, useEventListener } from '../chunk-6EV3OEBQ.js';
7
+ import '../chunk-RNY5LJXJ.js';
8
+ import '../chunk-HRCR53OW.js';
8
9
  import '../chunk-PEST66PN.js';
9
- import '../chunk-QVXLKFUQ.js';
10
- import '../chunk-7KSLPY56.js';
11
10
  import '../chunk-QPXIAUJD.js';