@solidxai/core-ui 0.1.20 → 0.1.21-beta.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 (180) hide show
  1. package/dist/components/common/FileReaderExt.d.ts.map +1 -1
  2. package/dist/components/common/FileReaderExt.js +22 -11
  3. package/dist/components/common/FileReaderExt.js.map +1 -1
  4. package/dist/components/common/FileReaderExt.tsx +27 -14
  5. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  6. package/dist/components/common/SocialMediaLogin.js +1 -1
  7. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  8. package/dist/components/common/SocialMediaLogin.tsx +50 -19
  9. package/dist/components/common/solid-export.css +75 -0
  10. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +71 -0
  11. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  12. package/dist/components/core/form/SolidFormView.js +14 -0
  13. package/dist/components/core/form/SolidFormView.js.map +1 -1
  14. package/dist/components/core/form/SolidFormView.tsx +13 -0
  15. package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -3
  16. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  17. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -3
  18. package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
  19. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  20. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +2 -2
  21. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +2 -2
  22. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  23. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -4
  24. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
  25. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  26. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -3
  27. package/dist/components/core/solid-agent/SolidAgentChat.d.ts +3 -1
  28. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
  29. package/dist/components/core/solid-agent/SolidAgentChat.js +150 -22
  30. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
  31. package/dist/components/core/solid-agent/SolidAgentChat.tsx +76 -15
  32. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +2 -0
  33. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -1
  34. package/dist/components/core/solid-agent/SolidAgentEmbedded.js +4 -4
  35. package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -1
  36. package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +7 -1
  37. package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -1
  38. package/dist/components/core/solid-agent/SolidAgentHost.js +79 -1
  39. package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -1
  40. package/dist/components/core/solid-agent/SolidAgentHost.tsx +69 -2
  41. package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -1
  42. package/dist/components/core/solid-agent/agentEvents.js +1 -3
  43. package/dist/components/core/solid-agent/agentEvents.js.map +1 -1
  44. package/dist/components/core/solid-agent/agentEvents.ts +5 -3
  45. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts +88 -0
  46. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts.map +1 -0
  47. package/dist/components/core/solid-agent/client/agentPublicEvents.js +26 -0
  48. package/dist/components/core/solid-agent/client/agentPublicEvents.js.map +1 -0
  49. package/dist/components/core/solid-agent/client/agentPublicEvents.ts +66 -0
  50. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +18 -3
  51. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
  52. package/dist/components/core/solid-agent/client/agentRuntime.js +173 -31
  53. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
  54. package/dist/components/core/solid-agent/client/agentRuntime.ts +126 -16
  55. package/dist/components/core/solid-agent/client/agentSocket.d.ts +3 -0
  56. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
  57. package/dist/components/core/solid-agent/client/agentSocket.js +19 -1
  58. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
  59. package/dist/components/core/solid-agent/client/agentSocket.ts +11 -1
  60. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts +9 -0
  61. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts.map +1 -0
  62. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js +53 -0
  63. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js.map +1 -0
  64. package/dist/components/core/solid-agent/client/beforeUserMessageSend.ts +26 -0
  65. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -1
  66. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +4 -3
  67. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
  68. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +4 -2
  69. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +29 -0
  70. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
  71. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +45 -2
  72. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
  73. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +49 -2
  74. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +1 -0
  75. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -1
  76. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +2 -1
  77. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -1
  78. package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +15 -1
  79. package/dist/components/core/solid-agent/types.d.ts +13 -0
  80. package/dist/components/core/solid-agent/types.d.ts.map +1 -1
  81. package/dist/components/core/solid-agent/types.js.map +1 -1
  82. package/dist/components/core/solid-agent/types.ts +8 -0
  83. package/dist/components/core/solid-agent/useAgentChat.d.ts +1 -1
  84. package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -1
  85. package/dist/components/core/solid-agent/useAgentChat.js +7 -4
  86. package/dist/components/core/solid-agent/useAgentChat.js.map +1 -1
  87. package/dist/components/core/solid-agent/useAgentChat.ts +9 -5
  88. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -1
  89. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +12 -4
  90. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
  91. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +18 -0
  92. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts +4 -0
  93. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts.map +1 -0
  94. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js +30 -0
  95. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js.map +1 -0
  96. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx +41 -0
  97. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +39 -0
  98. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts +2 -1
  99. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  100. package/dist/components/shad-cn-ui/SolidCodeEditor.js +3 -2
  101. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  102. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +3 -0
  103. package/dist/helpers/adminViewRefresh.d.ts +13 -0
  104. package/dist/helpers/adminViewRefresh.d.ts.map +1 -0
  105. package/dist/helpers/adminViewRefresh.js +14 -0
  106. package/dist/helpers/adminViewRefresh.js.map +1 -0
  107. package/dist/helpers/adminViewRefresh.ts +26 -0
  108. package/dist/helpers/eventBus.d.ts +1 -0
  109. package/dist/helpers/eventBus.d.ts.map +1 -1
  110. package/dist/helpers/eventBus.js +1 -0
  111. package/dist/helpers/eventBus.js.map +1 -1
  112. package/dist/helpers/eventBus.ts +1 -0
  113. package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
  114. package/dist/helpers/fileTypeIcon.js +4 -1
  115. package/dist/helpers/fileTypeIcon.js.map +1 -1
  116. package/dist/helpers/fileTypeIcon.tsx +15 -0
  117. package/dist/helpers/registry.d.ts.map +1 -1
  118. package/dist/helpers/registry.js +2 -0
  119. package/dist/helpers/registry.js.map +1 -1
  120. package/dist/helpers/registry.ts +2 -0
  121. package/dist/helpers/routePaths.d.ts +13 -0
  122. package/dist/helpers/routePaths.d.ts.map +1 -1
  123. package/dist/helpers/routePaths.js +39 -0
  124. package/dist/helpers/routePaths.js.map +1 -1
  125. package/dist/helpers/routePaths.ts +48 -0
  126. package/dist/redux/features/agentSlice.d.ts +2 -1
  127. package/dist/redux/features/agentSlice.d.ts.map +1 -1
  128. package/dist/redux/features/agentSlice.js +2 -2
  129. package/dist/redux/features/agentSlice.js.map +1 -1
  130. package/dist/redux/features/agentSlice.ts +8 -3
  131. package/dist/resources/solid-custom.css +42 -0
  132. package/dist/resources/solid-tailwind-generated.css +1 -1
  133. package/dist/routes/pages/admin/core/AgentHubModuleField.css +15 -0
  134. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts +22 -0
  135. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts.map +1 -0
  136. package/dist/routes/pages/admin/core/AgentHubModuleField.js +42 -0
  137. package/dist/routes/pages/admin/core/AgentHubModuleField.js.map +1 -0
  138. package/dist/routes/pages/admin/core/AgentHubModuleField.tsx +54 -0
  139. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +3 -1
  140. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -1
  141. package/dist/routes/pages/admin/core/AgentHubTagsField.js +3 -3
  142. package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -1
  143. package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +7 -3
  144. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
  145. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +37 -29
  146. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
  147. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +12 -6
  148. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
  149. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +22 -15
  150. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
  151. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +17 -7
  152. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
  153. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +21 -15
  154. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
  155. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +16 -9
  156. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -1
  157. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +149 -37
  158. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -1
  159. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +283 -73
  160. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  161. package/dist/routes/pages/admin/core/CardPage.js +9 -1
  162. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  163. package/dist/routes/pages/admin/core/CardPage.tsx +9 -1
  164. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  165. package/dist/routes/pages/admin/core/KanbanPage.js +9 -1
  166. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  167. package/dist/routes/pages/admin/core/KanbanPage.tsx +9 -1
  168. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  169. package/dist/routes/pages/admin/core/ListPage.js +10 -1
  170. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  171. package/dist/routes/pages/admin/core/ListPage.tsx +10 -1
  172. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
  173. package/dist/routes/pages/admin/core/TreePage.js +9 -1
  174. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  175. package/dist/routes/pages/admin/core/TreePage.tsx +9 -1
  176. package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -1
  177. package/dist/routes/pages/embed/AgentEmbedPage.js +67 -4
  178. package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -1
  179. package/dist/routes/pages/embed/AgentEmbedPage.tsx +61 -4
  180. package/package.json +1 -1
@@ -19,6 +19,12 @@ export type AgentContext = {
19
19
  [key: string]: unknown;
20
20
  };
21
21
 
22
+ export type AgentJson = null | boolean | number | string | AgentJson[] | { [key: string]: AgentJson };
23
+ export type AgentMessageContext = {
24
+ schemaVersion: 1;
25
+ namespaces: Record<string, { context: AgentJson; revision: string; displaySummary?: string }>;
26
+ };
27
+
22
28
  export type AgentMode = "bubble" | "compact" | "docked" | "maximized";
23
29
 
24
30
  /**
@@ -114,7 +120,9 @@ export type AgentAction =
114
120
  action: "message";
115
121
  session_id: string;
116
122
  content: string;
123
+ source?: "composer" | "sdk" | "prefill" | "widget";
117
124
  context?: AgentContext;
125
+ message_context?: AgentMessageContext;
118
126
  inputs?: Record<string, unknown>;
119
127
  widget_reply?: WidgetReply | null;
120
128
  attachments?: AgentAttachmentPayload[] | AgentUploadedAttachment[];
@@ -5,7 +5,7 @@ type Dispatch = (action: any) => any;
5
5
  export type AgentChatBinding = {
6
6
  agent: AgentState;
7
7
  dispatch: Dispatch;
8
- /** Null only for an "agentHub" chat during its first render, before its connection opens. */
8
+ /** Null during the first render while the runtime is initialized after commit. */
9
9
  runtime: AgentRuntime | null;
10
10
  };
11
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentChat.d.ts","sourceRoot":"","sources":["../../../../src/components/core/solid-agent/useAgentChat.ts"],"names":[],"mappings":"AAEA,OAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;AAErC,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,6FAA6F;IAC7F,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,gBAAgB,CAgCtH"}
1
+ {"version":3,"file":"useAgentChat.d.ts","sourceRoot":"","sources":["../../../../src/components/core/solid-agent/useAgentChat.ts"],"names":[],"mappings":"AAEA,OAAqB,EAAE,KAAK,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;AAErC,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,kFAAkF;IAClF,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,gBAAgB,CAoCtH"}
@@ -26,19 +26,22 @@ export function useAgentChat(agentRuntime, agentUrl, externalEmbed) {
26
26
  return action;
27
27
  }, []);
28
28
  var _b = useState(null), localRuntime = _b[0], setLocalRuntime = _b[1];
29
+ var _c = useState(null), sharedRuntime = _c[0], setSharedRuntime = _c[1];
29
30
  useEffect(function () {
30
- if (shared)
31
+ if (shared) {
32
+ var runtime_1 = ensureAgentRuntime(agentUrl, storeDispatch, function () { return store.getState().solidAgent; });
33
+ setSharedRuntime(runtime_1);
31
34
  return;
35
+ }
32
36
  var runtime = new AgentRuntime(agentUrl, localDispatch, function () { return localState.current; }, agentRuntime, !externalEmbed);
33
37
  setLocalRuntime(runtime);
34
38
  return function () {
35
39
  runtime.dispose();
36
40
  setLocalRuntime(null);
37
41
  };
38
- }, [shared, agentUrl, agentRuntime, localDispatch, externalEmbed]);
42
+ }, [shared, agentUrl, agentRuntime, externalEmbed, localDispatch, store, storeDispatch]);
39
43
  if (shared) {
40
- var runtime = ensureAgentRuntime(agentUrl, storeDispatch, function () { return store.getState().solidAgent; });
41
- return { agent: sharedState, dispatch: storeDispatch, runtime: runtime };
44
+ return { agent: sharedState, dispatch: storeDispatch, runtime: (sharedRuntime === null || sharedRuntime === void 0 ? void 0 : sharedRuntime.agentUrl) === agentUrl ? sharedRuntime : null };
42
45
  }
43
46
  return { agent: localState.current, dispatch: localDispatch, runtime: localRuntime };
44
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentChat.js","sourceRoot":"","sources":["../../../../src/components/core/solid-agent/useAgentChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,YAAiC,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYzE;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,YAA8B,EAAE,QAAgB,EAAE,aAAqB;IAArB,8BAAA,EAAA,qBAAqB;IAChG,IAAM,MAAM,GAAG,YAAY,KAAK,QAAQ,CAAC;IAEzC,IAAM,aAAa,GAAG,WAAW,EAAE,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAM,WAAW,GAAG,WAAW,CAAC,UAAC,KAAU,IAAK,OAAA,KAAK,CAAC,UAAwB,EAA9B,CAA8B,CAAC,CAAC;IAEhF,qFAAqF;IACrF,IAAM,UAAU,GAAG,MAAM,CAAa,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACxF,IAAA,KAAe,UAAU,CAAC,UAAC,KAAa,IAAK,OAAA,KAAK,GAAG,CAAC,EAAT,CAAS,EAAE,CAAC,CAAC,EAAvD,QAAQ,QAA+C,CAAC;IACjE,IAAM,aAAa,GAAG,WAAW,CAAC,UAAC,MAAW;QAC1C,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,QAAQ,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAED,IAAA,KAAkC,QAAQ,CAAsB,IAAI,CAAC,EAApE,YAAY,QAAA,EAAE,eAAe,QAAuC,CAAC;IAC5E,SAAS,CAAC;QACN,IAAI,MAAM;YAAE,OAAO;QACnB,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAM,OAAA,UAAU,CAAC,OAAO,EAAlB,CAAkB,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC;QAClH,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;YACH,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnE,IAAI,MAAM,EAAE;QACR,IAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAM,OAAC,KAAK,CAAC,QAAQ,EAAU,CAAC,UAAU,EAApC,CAAoC,CAAC,CAAC;QACxG,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,SAAA,EAAE,CAAC;KACnE;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACzF,CAAC","sourcesContent":["import { useCallback, useEffect, useReducer, useRef, useState } from \"react\";\nimport { useDispatch, useSelector, useStore } from \"react-redux\";\nimport agentReducer, { type AgentState } from \"../../../redux/features/agentSlice\";\nimport { AgentRuntime, ensureAgentRuntime } from \"./client/agentRuntime\";\nimport type { AgentRuntimeType } from \"./types\";\n\ntype Dispatch = (action: any) => any;\n\nexport type AgentChatBinding = {\n agent: AgentState;\n dispatch: Dispatch;\n /** Null only for an \"agentHub\" chat during its first render, before its connection opens. */\n runtime: AgentRuntime | null;\n};\n\n/**\n * The state and connection a chat renders from.\n *\n * - \"solidx\": the store's `solidAgent` slice and the shared runtime, so the floating launcher\n * and any embedded \"solidx\" chat show the same conversation.\n * - \"agentHub\": a private thread, reduced by the same agentSlice reducer,\n * and its own runtime, opened on mount and closed on unmount. It never touches the\n * launcher's conversation.\n */\nexport function useAgentChat(agentRuntime: AgentRuntimeType, agentUrl: string, externalEmbed = false): AgentChatBinding {\n const shared = agentRuntime === \"solidx\";\n\n const storeDispatch = useDispatch();\n const store = useStore();\n const sharedState = useSelector((state: any) => state.solidAgent as AgentState);\n\n // Private thread: kept in a ref so the runtime reads the latest state synchronously.\n const localState = useRef<AgentState>(agentReducer(undefined, { type: \"solidAgent/@@init\" }));\n const [, rerender] = useReducer((count: number) => count + 1, 0);\n const localDispatch = useCallback((action: any) => {\n localState.current = agentReducer(localState.current, action);\n rerender();\n return action;\n }, []);\n\n const [localRuntime, setLocalRuntime] = useState<AgentRuntime | null>(null);\n useEffect(() => {\n if (shared) return;\n const runtime = new AgentRuntime(agentUrl, localDispatch, () => localState.current, agentRuntime, !externalEmbed);\n setLocalRuntime(runtime);\n return () => {\n runtime.dispose();\n setLocalRuntime(null);\n };\n }, [shared, agentUrl, agentRuntime, localDispatch, externalEmbed]);\n\n if (shared) {\n const runtime = ensureAgentRuntime(agentUrl, storeDispatch, () => (store.getState() as any).solidAgent);\n return { agent: sharedState, dispatch: storeDispatch, runtime };\n }\n return { agent: localState.current, dispatch: localDispatch, runtime: localRuntime };\n}\n"]}
1
+ {"version":3,"file":"useAgentChat.js","sourceRoot":"","sources":["../../../../src/components/core/solid-agent/useAgentChat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,YAAiC,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYzE;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,YAA8B,EAAE,QAAgB,EAAE,aAAqB;IAArB,8BAAA,EAAA,qBAAqB;IAChG,IAAM,MAAM,GAAG,YAAY,KAAK,QAAQ,CAAC;IAEzC,IAAM,aAAa,GAAG,WAAW,EAAE,CAAC;IACpC,IAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAM,WAAW,GAAG,WAAW,CAAC,UAAC,KAAU,IAAK,OAAA,KAAK,CAAC,UAAwB,EAA9B,CAA8B,CAAC,CAAC;IAEhF,qFAAqF;IACrF,IAAM,UAAU,GAAG,MAAM,CAAa,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACxF,IAAA,KAAe,UAAU,CAAC,UAAC,KAAa,IAAK,OAAA,KAAK,GAAG,CAAC,EAAT,CAAS,EAAE,CAAC,CAAC,EAAvD,QAAQ,QAA+C,CAAC;IACjE,IAAM,aAAa,GAAG,WAAW,CAAC,UAAC,MAAW;QAC1C,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,QAAQ,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAED,IAAA,KAAkC,QAAQ,CAAsB,IAAI,CAAC,EAApE,YAAY,QAAA,EAAE,eAAe,QAAuC,CAAC;IACtE,IAAA,KAAoC,QAAQ,CAAsB,IAAI,CAAC,EAAtE,aAAa,QAAA,EAAE,gBAAgB,QAAuC,CAAC;IAC9E,SAAS,CAAC;QACN,IAAI,MAAM,EAAE;YACR,IAAM,SAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAM,OAAC,KAAK,CAAC,QAAQ,EAAU,CAAC,UAAU,EAApC,CAAoC,CAAC,CAAC;YACxG,gBAAgB,CAAC,SAAO,CAAC,CAAC;YAC1B,OAAO;SACV;QACD,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAM,OAAA,UAAU,CAAC,OAAO,EAAlB,CAAkB,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC;QAClH,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;YACH,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzF,IAAI,MAAM,EAAE;QACR,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,MAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAChI;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACzF,CAAC","sourcesContent":["import { useCallback, useEffect, useReducer, useRef, useState } from \"react\";\nimport { useDispatch, useSelector, useStore } from \"react-redux\";\nimport agentReducer, { type AgentState } from \"../../../redux/features/agentSlice\";\nimport { AgentRuntime, ensureAgentRuntime } from \"./client/agentRuntime\";\nimport type { AgentRuntimeType } from \"./types\";\n\ntype Dispatch = (action: any) => any;\n\nexport type AgentChatBinding = {\n agent: AgentState;\n dispatch: Dispatch;\n /** Null during the first render while the runtime is initialized after commit. */\n runtime: AgentRuntime | null;\n};\n\n/**\n * The state and connection a chat renders from.\n *\n * - \"solidx\": the store's `solidAgent` slice and the shared runtime, so the floating launcher\n * and any embedded \"solidx\" chat show the same conversation.\n * - \"agentHub\": a private thread, reduced by the same agentSlice reducer,\n * and its own runtime, opened on mount and closed on unmount. It never touches the\n * launcher's conversation.\n */\nexport function useAgentChat(agentRuntime: AgentRuntimeType, agentUrl: string, externalEmbed = false): AgentChatBinding {\n const shared = agentRuntime === \"solidx\";\n\n const storeDispatch = useDispatch();\n const store = useStore();\n const sharedState = useSelector((state: any) => state.solidAgent as AgentState);\n\n // Private thread: kept in a ref so the runtime reads the latest state synchronously.\n const localState = useRef<AgentState>(agentReducer(undefined, { type: \"solidAgent/@@init\" }));\n const [, rerender] = useReducer((count: number) => count + 1, 0);\n const localDispatch = useCallback((action: any) => {\n localState.current = agentReducer(localState.current, action);\n rerender();\n return action;\n }, []);\n\n const [localRuntime, setLocalRuntime] = useState<AgentRuntime | null>(null);\n const [sharedRuntime, setSharedRuntime] = useState<AgentRuntime | null>(null);\n useEffect(() => {\n if (shared) {\n const runtime = ensureAgentRuntime(agentUrl, storeDispatch, () => (store.getState() as any).solidAgent);\n setSharedRuntime(runtime);\n return;\n }\n const runtime = new AgentRuntime(agentUrl, localDispatch, () => localState.current, agentRuntime, !externalEmbed);\n setLocalRuntime(runtime);\n return () => {\n runtime.dispose();\n setLocalRuntime(null);\n };\n }, [shared, agentUrl, agentRuntime, externalEmbed, localDispatch, store, storeDispatch]);\n\n if (shared) {\n return { agent: sharedState, dispatch: storeDispatch, runtime: sharedRuntime?.agentUrl === agentUrl ? sharedRuntime : null };\n }\n return { agent: localState.current, dispatch: localDispatch, runtime: localRuntime };\n}\n"]}
@@ -9,7 +9,7 @@ type Dispatch = (action: any) => any;
9
9
  export type AgentChatBinding = {
10
10
  agent: AgentState;
11
11
  dispatch: Dispatch;
12
- /** Null only for an "agentHub" chat during its first render, before its connection opens. */
12
+ /** Null during the first render while the runtime is initialized after commit. */
13
13
  runtime: AgentRuntime | null;
14
14
  };
15
15
 
@@ -39,19 +39,23 @@ export function useAgentChat(agentRuntime: AgentRuntimeType, agentUrl: string, e
39
39
  }, []);
40
40
 
41
41
  const [localRuntime, setLocalRuntime] = useState<AgentRuntime | null>(null);
42
+ const [sharedRuntime, setSharedRuntime] = useState<AgentRuntime | null>(null);
42
43
  useEffect(() => {
43
- if (shared) return;
44
+ if (shared) {
45
+ const runtime = ensureAgentRuntime(agentUrl, storeDispatch, () => (store.getState() as any).solidAgent);
46
+ setSharedRuntime(runtime);
47
+ return;
48
+ }
44
49
  const runtime = new AgentRuntime(agentUrl, localDispatch, () => localState.current, agentRuntime, !externalEmbed);
45
50
  setLocalRuntime(runtime);
46
51
  return () => {
47
52
  runtime.dispose();
48
53
  setLocalRuntime(null);
49
54
  };
50
- }, [shared, agentUrl, agentRuntime, localDispatch, externalEmbed]);
55
+ }, [shared, agentUrl, agentRuntime, externalEmbed, localDispatch, store, storeDispatch]);
51
56
 
52
57
  if (shared) {
53
- const runtime = ensureAgentRuntime(agentUrl, storeDispatch, () => (store.getState() as any).solidAgent);
54
- return { agent: sharedState, dispatch: storeDispatch, runtime };
58
+ return { agent: sharedState, dispatch: storeDispatch, runtime: sharedRuntime?.agentUrl === agentUrl ? sharedRuntime : null };
55
59
  }
56
60
  return { agent: localState.current, dispatch: localDispatch, runtime: localRuntime };
57
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUserMessageChatWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMpE;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,6BAA8B,oBAAoB,4CA8D1F,CAAC"}
1
+ {"version":3,"file":"DefaultUserMessageChatWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMpE;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,6BAA8B,oBAAoB,4CAgF1F,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { FileText, ImageIcon, User } from "lucide-react";
4
4
  import styles from "./solidChatWidgets.module.css";
@@ -11,12 +11,20 @@ import { asArray, formatChatTime } from "./chatWidgetUtils";
11
11
  * History only carries attachment metadata, so reloaded images show as chips.
12
12
  */
13
13
  export var DefaultUserMessageChatWidget = function (_a) {
14
- var _b;
14
+ var _b, _c;
15
15
  var eventData = _a.eventData, timestamp = _a.timestamp;
16
16
  var content = String((_b = eventData.content) !== null && _b !== void 0 ? _b : "");
17
17
  var attachments = asArray(eventData.attachments);
18
- var _c = useState(null), zoom = _c[0], setZoom = _c[1];
19
- return (_jsxs("div", { className: "".concat(styles.Row, " ").concat(styles.RowUser), children: [_jsx("div", { className: "".concat(styles.Avatar, " ").concat(styles.AvatarUser), children: _jsx(User, { size: 12 }) }), _jsxs("div", { className: styles.BubbleGroup, children: [attachments.length > 0 && (_jsx("ul", { className: styles.MessageAttachments, "aria-label": "Attachments", children: attachments.map(function (file, index) {
18
+ var namespaces = ((_c = eventData.message_context) === null || _c === void 0 ? void 0 : _c.namespaces) && typeof eventData.message_context.namespaces === "object"
19
+ ? Object.entries(eventData.message_context.namespaces)
20
+ : [];
21
+ var _d = useState(null), zoom = _d[0], setZoom = _d[1];
22
+ return (_jsxs("div", { className: "".concat(styles.Row, " ").concat(styles.RowUser), children: [_jsx("div", { className: "".concat(styles.Avatar, " ").concat(styles.AvatarUser), children: _jsx(User, { size: 12 }) }), _jsxs("div", { className: styles.BubbleGroup, children: [namespaces.length > 0 && (_jsxs("details", { className: styles.MessageContext, children: [_jsx("summary", { children: "Message context" }), _jsx("div", { className: styles.MessageContextDetails, children: namespaces.map(function (_a) {
23
+ var namespace = _a[0], contribution = _a[1];
24
+ return (_jsxs("section", { children: [_jsx("strong", { children: namespace }), contribution.displaySummary
25
+ ? _jsx("p", { children: contribution.displaySummary })
26
+ : _jsx("pre", { children: JSON.stringify(contribution.context, null, 2) })] }, namespace));
27
+ }) })] })), attachments.length > 0 && (_jsx("ul", { className: styles.MessageAttachments, "aria-label": "Attachments", children: attachments.map(function (file, index) {
20
28
  var _a, _b, _c, _d;
21
29
  // previewUrl: attached in this browser session; url: stored copy (history).
22
30
  var imageSrc = ((_a = file.mimeType) === null || _a === void 0 ? void 0 : _a.startsWith("image/")) ? (_b = file.previewUrl) !== null && _b !== void 0 ? _b : file.url : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUserMessageChatWidget.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport { FileText, ImageIcon, User } from \"lucide-react\";\nimport styles from \"./solidChatWidgets.module.css\";\nimport { SolidChatWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidAgentMessageCopyButton } from \"../SolidAgentMarkdown\";\nimport { formatFileSize } from \"../agentAttachments\";\nimport type { AgentAttachmentMeta } from \"../types\";\nimport { asArray, formatChatTime } from \"./chatWidgetUtils\";\n\n/**\n * Default widget for `UserMessage`: dark right-aligned bubble with avatar, time and copy on hover.\n * Attachments show above the bubble: image thumbnails (click to enlarge) or file chips.\n * History only carries attachment metadata, so reloaded images show as chips.\n */\nexport const DefaultUserMessageChatWidget = ({ eventData, timestamp }: SolidChatWidgetProps) => {\n const content = String(eventData.content ?? \"\");\n const attachments = asArray<AgentAttachmentMeta>(eventData.attachments);\n const [zoom, setZoom] = useState<string | null>(null);\n\n return (\n <div className={`${styles.Row} ${styles.RowUser}`}>\n {/* Avatar first in DOM → rightmost with row-reverse */}\n <div className={`${styles.Avatar} ${styles.AvatarUser}`}>\n <User size={12} />\n </div>\n <div className={styles.BubbleGroup}>\n {attachments.length > 0 && (\n <ul className={styles.MessageAttachments} aria-label=\"Attachments\">\n {attachments.map((file, index) => {\n // previewUrl: attached in this browser session; url: stored copy (history).\n const imageSrc = file.mimeType?.startsWith(\"image/\") ? file.previewUrl ?? file.url : undefined;\n if (imageSrc) {\n return (\n <li key={index}>\n <button type=\"button\" className={styles.MessageAttachmentImageBtn} onClick={() => setZoom(imageSrc)} title={file.name}>\n <img className={styles.MessageAttachmentImage} src={imageSrc} alt={file.name} />\n </button>\n </li>\n );\n }\n const chip = (\n <>\n {file.mimeType?.startsWith(\"image/\") ? <ImageIcon size={13} /> : <FileText size={13} />}\n <span className={styles.MessageAttachmentName}>{file.name}</span>\n <span className={styles.MessageAttachmentSize}>{formatFileSize(file.size ?? 0)}</span>\n </>\n );\n return (\n <li key={index} title={file.name}>\n {file.url ? (\n <a className={styles.MessageAttachmentFile} href={file.url} target=\"_blank\" rel=\"noopener noreferrer\">{chip}</a>\n ) : (\n <span className={styles.MessageAttachmentFile}>{chip}</span>\n )}\n </li>\n );\n })}\n </ul>\n )}\n {content && (\n <div className={`${styles.Bubble} ${styles.BubbleUser}`}>\n <p className={styles.UserText}>{content}</p>\n </div>\n )}\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaUser}`}>\n <span className={styles.Timestamp}>{formatChatTime(timestamp)}</span>\n {content && <SolidAgentMessageCopyButton text={content} />}\n </div>\n </div>\n {zoom && (\n <div className={styles.AttachmentLightbox} role=\"dialog\" aria-label=\"Image preview\" onClick={() => setZoom(null)}>\n <img src={zoom} alt=\"\" />\n </div>\n )}\n </div>\n );\n};\n\nObject.assign(DefaultUserMessageChatWidget, { getExtensionMetadata: () => ({\n chatInteraction: { role: \"event-renderer\", agentSelectable: false },\n}) });\n"]}
1
+ {"version":3,"file":"DefaultUserMessageChatWidget.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport { FileText, ImageIcon, User } from \"lucide-react\";\nimport styles from \"./solidChatWidgets.module.css\";\nimport { SolidChatWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidAgentMessageCopyButton } from \"../SolidAgentMarkdown\";\nimport { formatFileSize } from \"../agentAttachments\";\nimport type { AgentAttachmentMeta } from \"../types\";\nimport { asArray, formatChatTime } from \"./chatWidgetUtils\";\n\n/**\n * Default widget for `UserMessage`: dark right-aligned bubble with avatar, time and copy on hover.\n * Attachments show above the bubble: image thumbnails (click to enlarge) or file chips.\n * History only carries attachment metadata, so reloaded images show as chips.\n */\nexport const DefaultUserMessageChatWidget = ({ eventData, timestamp }: SolidChatWidgetProps) => {\n const content = String(eventData.content ?? \"\");\n const attachments = asArray<AgentAttachmentMeta>(eventData.attachments);\n const namespaces = eventData.message_context?.namespaces && typeof eventData.message_context.namespaces === \"object\"\n ? Object.entries(eventData.message_context.namespaces) as Array<[string, { displaySummary?: string; revision?: string; context?: unknown }]>\n : [];\n const [zoom, setZoom] = useState<string | null>(null);\n\n return (\n <div className={`${styles.Row} ${styles.RowUser}`}>\n {/* Avatar first in DOM → rightmost with row-reverse */}\n <div className={`${styles.Avatar} ${styles.AvatarUser}`}>\n <User size={12} />\n </div>\n <div className={styles.BubbleGroup}>\n {namespaces.length > 0 && (\n <details className={styles.MessageContext}>\n <summary>Message context</summary>\n <div className={styles.MessageContextDetails}>\n {namespaces.map(([namespace, contribution]) => (\n <section key={namespace}>\n <strong>{namespace}</strong>\n {contribution.displaySummary\n ? <p>{contribution.displaySummary}</p>\n : <pre>{JSON.stringify(contribution.context, null, 2)}</pre>}\n </section>\n ))}\n </div>\n </details>\n )}\n {attachments.length > 0 && (\n <ul className={styles.MessageAttachments} aria-label=\"Attachments\">\n {attachments.map((file, index) => {\n // previewUrl: attached in this browser session; url: stored copy (history).\n const imageSrc = file.mimeType?.startsWith(\"image/\") ? file.previewUrl ?? file.url : undefined;\n if (imageSrc) {\n return (\n <li key={index}>\n <button type=\"button\" className={styles.MessageAttachmentImageBtn} onClick={() => setZoom(imageSrc)} title={file.name}>\n <img className={styles.MessageAttachmentImage} src={imageSrc} alt={file.name} />\n </button>\n </li>\n );\n }\n const chip = (\n <>\n {file.mimeType?.startsWith(\"image/\") ? <ImageIcon size={13} /> : <FileText size={13} />}\n <span className={styles.MessageAttachmentName}>{file.name}</span>\n <span className={styles.MessageAttachmentSize}>{formatFileSize(file.size ?? 0)}</span>\n </>\n );\n return (\n <li key={index} title={file.name}>\n {file.url ? (\n <a className={styles.MessageAttachmentFile} href={file.url} target=\"_blank\" rel=\"noopener noreferrer\">{chip}</a>\n ) : (\n <span className={styles.MessageAttachmentFile}>{chip}</span>\n )}\n </li>\n );\n })}\n </ul>\n )}\n {content && (\n <div className={`${styles.Bubble} ${styles.BubbleUser}`}>\n <p className={styles.UserText}>{content}</p>\n </div>\n )}\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaUser}`}>\n <span className={styles.Timestamp}>{formatChatTime(timestamp)}</span>\n {content && <SolidAgentMessageCopyButton text={content} />}\n </div>\n </div>\n {zoom && (\n <div className={styles.AttachmentLightbox} role=\"dialog\" aria-label=\"Image preview\" onClick={() => setZoom(null)}>\n <img src={zoom} alt=\"\" />\n </div>\n )}\n </div>\n );\n};\n\nObject.assign(DefaultUserMessageChatWidget, { getExtensionMetadata: () => ({\n chatInteraction: { role: \"event-renderer\", agentSelectable: false },\n}) });\n"]}
@@ -15,6 +15,9 @@ import { asArray, formatChatTime } from "./chatWidgetUtils";
15
15
  export const DefaultUserMessageChatWidget = ({ eventData, timestamp }: SolidChatWidgetProps) => {
16
16
  const content = String(eventData.content ?? "");
17
17
  const attachments = asArray<AgentAttachmentMeta>(eventData.attachments);
18
+ const namespaces = eventData.message_context?.namespaces && typeof eventData.message_context.namespaces === "object"
19
+ ? Object.entries(eventData.message_context.namespaces) as Array<[string, { displaySummary?: string; revision?: string; context?: unknown }]>
20
+ : [];
18
21
  const [zoom, setZoom] = useState<string | null>(null);
19
22
 
20
23
  return (
@@ -24,6 +27,21 @@ export const DefaultUserMessageChatWidget = ({ eventData, timestamp }: SolidChat
24
27
  <User size={12} />
25
28
  </div>
26
29
  <div className={styles.BubbleGroup}>
30
+ {namespaces.length > 0 && (
31
+ <details className={styles.MessageContext}>
32
+ <summary>Message context</summary>
33
+ <div className={styles.MessageContextDetails}>
34
+ {namespaces.map(([namespace, contribution]) => (
35
+ <section key={namespace}>
36
+ <strong>{namespace}</strong>
37
+ {contribution.displaySummary
38
+ ? <p>{contribution.displaySummary}</p>
39
+ : <pre>{JSON.stringify(contribution.context, null, 2)}</pre>}
40
+ </section>
41
+ ))}
42
+ </div>
43
+ </details>
44
+ )}
27
45
  {attachments.length > 0 && (
28
46
  <ul className={styles.MessageAttachments} aria-label="Attachments">
29
47
  {attachments.map((file, index) => {
@@ -0,0 +1,4 @@
1
+ import { SolidChatWidgetProps } from "../../../../types/solid-core";
2
+ /** Distinct assistant treatment for a host-directed navigation intent. */
3
+ export declare const SolidNavigationIntentChatWidget: ({ eventData }: SolidChatWidgetProps) => import("react/jsx-runtime").JSX.Element | null;
4
+ //# sourceMappingURL=SolidNavigationIntentChatWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidNavigationIntentChatWidget.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAUpE,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,kBAAmB,oBAAoB,mDASlF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Compass } from "lucide-react";
3
+ import styles from "../SolidAgent.module.css";
4
+ import { getChatWidgetData } from "./chatWidgetUtils";
5
+ /** Distinct assistant treatment for a host-directed navigation intent. */
6
+ export var SolidNavigationIntentChatWidget = function (_a) {
7
+ var eventData = _a.eventData;
8
+ var data = getChatWidgetData(eventData);
9
+ if (data.schemaVersion !== 1 || data.kind !== "navigation")
10
+ return null;
11
+ return (_jsxs("div", { className: styles.linkCard, role: "status", "aria-live": "polite", style: { cursor: "default" }, children: [_jsx(Compass, { size: 17, "aria-hidden": "true" }), _jsx("span", { children: typeof data.message === "string" && data.message.trim() ? data.message : "Opening the requested screen…" })] }));
12
+ };
13
+ Object.assign(SolidNavigationIntentChatWidget, { getExtensionMetadata: function () { return ({
14
+ agentWidget: {
15
+ name: "navigation-intent",
16
+ description: "Represent a structured navigation request for the host application.",
17
+ propsSchema: {
18
+ type: "object",
19
+ properties: {
20
+ schemaVersion: { type: "number", enum: [1] },
21
+ kind: { type: "string", enum: ["navigation"] },
22
+ domain: { type: "string" },
23
+ message: { type: "string" },
24
+ payload: { type: "object", additionalProperties: true },
25
+ },
26
+ required: ["schemaVersion", "kind", "domain", "payload"],
27
+ },
28
+ },
29
+ }); } });
30
+ //# sourceMappingURL=SolidNavigationIntentChatWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidNavigationIntentChatWidget.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAStD,0EAA0E;AAC1E,MAAM,CAAC,IAAM,+BAA+B,GAAG,UAAC,EAAmC;QAAjC,SAAS,eAAA;IACvD,IAAM,IAAI,GAAG,iBAAiB,CAAuB,SAAS,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACxE,OAAO,CACH,eAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAC,QAAQ,eAAW,QAAQ,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,aAC1F,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EACxC,yBAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,GAAQ,IACrH,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,EAAE,oBAAoB,EAAE,cAAM,OAAA,CAAC;QAC1E,WAAW,EAAE;YACT,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,qEAAqE;YAClF,WAAW,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE;oBAC9C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE;iBAC1D;gBACD,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;aAC3D;SACJ;KACJ,CAAC,EAhB2E,CAgB3E,EAAE,CAAC,CAAC","sourcesContent":["import { Compass } from \"lucide-react\";\nimport styles from \"../SolidAgent.module.css\";\nimport { SolidChatWidgetProps } from \"../../../../types/solid-core\";\nimport { getChatWidgetData } from \"./chatWidgetUtils\";\n\ntype NavigationIntentData = {\n schemaVersion?: number;\n kind?: string;\n domain?: string;\n message?: string;\n};\n\n/** Distinct assistant treatment for a host-directed navigation intent. */\nexport const SolidNavigationIntentChatWidget = ({ eventData }: SolidChatWidgetProps) => {\n const data = getChatWidgetData<NavigationIntentData>(eventData);\n if (data.schemaVersion !== 1 || data.kind !== \"navigation\") return null;\n return (\n <div className={styles.linkCard} role=\"status\" aria-live=\"polite\" style={{ cursor: \"default\" }}>\n <Compass size={17} aria-hidden=\"true\" />\n <span>{typeof data.message === \"string\" && data.message.trim() ? data.message : \"Opening the requested screen…\"}</span>\n </div>\n );\n};\n\nObject.assign(SolidNavigationIntentChatWidget, { getExtensionMetadata: () => ({\n agentWidget: {\n name: \"navigation-intent\",\n description: \"Represent a structured navigation request for the host application.\",\n propsSchema: {\n type: \"object\",\n properties: {\n schemaVersion: { type: \"number\", enum: [1] },\n kind: { type: \"string\", enum: [\"navigation\"] },\n domain: { type: \"string\" },\n message: { type: \"string\" },\n payload: { type: \"object\", additionalProperties: true },\n },\n required: [\"schemaVersion\", \"kind\", \"domain\", \"payload\"],\n },\n },\n}) });\n"]}
@@ -0,0 +1,41 @@
1
+ import { Compass } from "lucide-react";
2
+ import styles from "../SolidAgent.module.css";
3
+ import { SolidChatWidgetProps } from "../../../../types/solid-core";
4
+ import { getChatWidgetData } from "./chatWidgetUtils";
5
+
6
+ type NavigationIntentData = {
7
+ schemaVersion?: number;
8
+ kind?: string;
9
+ domain?: string;
10
+ message?: string;
11
+ };
12
+
13
+ /** Distinct assistant treatment for a host-directed navigation intent. */
14
+ export const SolidNavigationIntentChatWidget = ({ eventData }: SolidChatWidgetProps) => {
15
+ const data = getChatWidgetData<NavigationIntentData>(eventData);
16
+ if (data.schemaVersion !== 1 || data.kind !== "navigation") return null;
17
+ return (
18
+ <div className={styles.linkCard} role="status" aria-live="polite" style={{ cursor: "default" }}>
19
+ <Compass size={17} aria-hidden="true" />
20
+ <span>{typeof data.message === "string" && data.message.trim() ? data.message : "Opening the requested screen…"}</span>
21
+ </div>
22
+ );
23
+ };
24
+
25
+ Object.assign(SolidNavigationIntentChatWidget, { getExtensionMetadata: () => ({
26
+ agentWidget: {
27
+ name: "navigation-intent",
28
+ description: "Represent a structured navigation request for the host application.",
29
+ propsSchema: {
30
+ type: "object",
31
+ properties: {
32
+ schemaVersion: { type: "number", enum: [1] },
33
+ kind: { type: "string", enum: ["navigation"] },
34
+ domain: { type: "string" },
35
+ message: { type: "string" },
36
+ payload: { type: "object", additionalProperties: true },
37
+ },
38
+ required: ["schemaVersion", "kind", "domain", "payload"],
39
+ },
40
+ },
41
+ }) });
@@ -843,6 +843,45 @@
843
843
  }
844
844
 
845
845
  /* ── Attachments on a sent user message ── */
846
+ .MessageContext {
847
+ align-self: flex-end;
848
+ max-width: min(88%, 680px);
849
+ color: var(--solid-agent-muted);
850
+ font-size: 11px;
851
+ }
852
+
853
+ .MessageContext summary {
854
+ cursor: pointer;
855
+ text-align: right;
856
+ user-select: none;
857
+ }
858
+
859
+ .MessageContextDetails {
860
+ margin-top: 4px;
861
+ padding: 8px 10px;
862
+ border: 1px solid var(--solid-agent-border);
863
+ border-radius: 8px;
864
+ background: var(--solid-agent-bg);
865
+ color: var(--solid-agent-fg);
866
+ }
867
+
868
+ .MessageContextDetails section + section {
869
+ margin-top: 6px;
870
+ }
871
+
872
+ .MessageContextDetails p {
873
+ margin: 2px 0 0;
874
+ }
875
+
876
+ .MessageContextDetails pre {
877
+ max-width: 100%;
878
+ max-height: 180px;
879
+ margin: 3px 0 0;
880
+ overflow: auto;
881
+ white-space: pre-wrap;
882
+ overflow-wrap: anywhere;
883
+ }
884
+
846
885
  .MessageAttachments {
847
886
  list-style: none;
848
887
  margin: 0;
@@ -6,8 +6,9 @@ type SolidCodeEditorProps = {
6
6
  readOnly?: boolean;
7
7
  className?: string;
8
8
  language?: string;
9
+ wordWrap?: "off" | "on" | "wordWrapColumn" | "bounded";
9
10
  onMount?: (editor: any, monaco: any) => void;
10
11
  };
11
- export declare function SolidCodeEditor({ value, onChange, height, fontSize, readOnly, className, language, onMount, }: SolidCodeEditorProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function SolidCodeEditor({ value, onChange, height, fontSize, readOnly, className, language, wordWrap, onMount, }: SolidCodeEditorProps): import("react/jsx-runtime").JSX.Element;
12
13
  export {};
13
14
  //# sourceMappingURL=SolidCodeEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAU,EACV,QAAQ,EACR,MAAgB,EAChB,QAAiB,EACjB,QAAgB,EAChB,SAAS,EACT,QAAuB,EACvB,OAAO,GACR,EAAE,oBAAoB,2CAmEtB"}
1
+ {"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAU,EACV,QAAQ,EACR,MAAgB,EAChB,QAAiB,EACjB,QAAgB,EAChB,SAAS,EACT,QAAuB,EACvB,QAAgB,EAChB,OAAO,GACR,EAAE,oBAAoB,2CAoEtB"}
@@ -2,8 +2,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import Editor from "@monaco-editor/react";
3
3
  import { useEffect, useState } from "react";
4
4
  export function SolidCodeEditor(_a) {
5
- var _b = _a.value, value = _b === void 0 ? "" : _b, onChange = _a.onChange, _c = _a.height, height = _c === void 0 ? "300px" : _c, _d = _a.fontSize, fontSize = _d === void 0 ? "14px" : _d, _e = _a.readOnly, readOnly = _e === void 0 ? false : _e, className = _a.className, _f = _a.language, language = _f === void 0 ? "javascript" : _f, onMount = _a.onMount;
6
- var _g = useState("vs"), editorTheme = _g[0], setEditorTheme = _g[1];
5
+ var _b = _a.value, value = _b === void 0 ? "" : _b, onChange = _a.onChange, _c = _a.height, height = _c === void 0 ? "300px" : _c, _d = _a.fontSize, fontSize = _d === void 0 ? "14px" : _d, _e = _a.readOnly, readOnly = _e === void 0 ? false : _e, className = _a.className, _f = _a.language, language = _f === void 0 ? "javascript" : _f, _g = _a.wordWrap, wordWrap = _g === void 0 ? "off" : _g, onMount = _a.onMount;
6
+ var _h = useState("vs"), editorTheme = _h[0], setEditorTheme = _h[1];
7
7
  useEffect(function () {
8
8
  if (typeof document === "undefined") {
9
9
  return;
@@ -43,6 +43,7 @@ export function SolidCodeEditor(_a) {
43
43
  lineNumbers: "on",
44
44
  fontSize: typeof fontSize === "number" ? fontSize : parseInt(String(fontSize), 10) || 14,
45
45
  scrollBeyondLastLine: false,
46
+ wordWrap: wordWrap,
46
47
  overviewRulerBorder: false,
47
48
  } }) }));
48
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SolidCodeEditor.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import Editor from \"@monaco-editor/react\";\nimport { useEffect, useState } from \"react\";\n\ntype SolidCodeEditorProps = {\n value?: string;\n onChange?: (value: string | undefined) => void;\n height?: string;\n fontSize?: string | number;\n readOnly?: boolean;\n className?: string;\n language?: string;\n onMount?: (editor: any, monaco: any) => void;\n};\n\nexport function SolidCodeEditor({\n value = \"\",\n onChange,\n height = \"300px\",\n fontSize = \"14px\",\n readOnly = false,\n className,\n language = \"javascript\",\n onMount,\n}: SolidCodeEditorProps) {\n const [editorTheme, setEditorTheme] = useState<\"vs\" | \"vs-dark\">(\"vs\");\n\n useEffect(() => {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const root = document.documentElement;\n const syncTheme = () => {\n const isDarkTheme =\n root.dataset.theme === \"dark\" ||\n root.classList.contains(\"dark\") ||\n document.body?.dataset.theme === \"dark\";\n\n setEditorTheme(isDarkTheme ? \"vs-dark\" : \"vs\");\n };\n\n syncTheme();\n\n const observer = new MutationObserver(syncTheme);\n observer.observe(root, {\n attributes: true,\n attributeFilter: [\"class\", \"data-theme\"],\n });\n\n if (document.body) {\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [\"class\", \"data-theme\"],\n });\n }\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n className={className}\n style={{\n width: \"100%\",\n minWidth: 0,\n border: \"1px solid var(--surface-border, #d0d7de)\",\n borderRadius: \"0.5rem\",\n overflow: \"hidden\",\n background: editorTheme === \"vs-dark\" ? \"var(--surface-ground, #111827)\" : \"var(--surface-card, #fff)\",\n }}\n >\n <Editor\n width=\"100%\"\n height={height}\n theme={editorTheme}\n language={language}\n value={value}\n onChange={(val) => onChange?.(val ?? \"\")}\n onMount={onMount}\n options={{\n readOnly,\n minimap: { enabled: false },\n lineNumbers: \"on\",\n fontSize: typeof fontSize === \"number\" ? fontSize : parseInt(String(fontSize), 10) || 14,\n scrollBeyondLastLine: false,\n overviewRulerBorder: false,\n }}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SolidCodeEditor.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import Editor from \"@monaco-editor/react\";\nimport { useEffect, useState } from \"react\";\n\ntype SolidCodeEditorProps = {\n value?: string;\n onChange?: (value: string | undefined) => void;\n height?: string;\n fontSize?: string | number;\n readOnly?: boolean;\n className?: string;\n language?: string;\n wordWrap?: \"off\" | \"on\" | \"wordWrapColumn\" | \"bounded\";\n onMount?: (editor: any, monaco: any) => void;\n};\n\nexport function SolidCodeEditor({\n value = \"\",\n onChange,\n height = \"300px\",\n fontSize = \"14px\",\n readOnly = false,\n className,\n language = \"javascript\",\n wordWrap = \"off\",\n onMount,\n}: SolidCodeEditorProps) {\n const [editorTheme, setEditorTheme] = useState<\"vs\" | \"vs-dark\">(\"vs\");\n\n useEffect(() => {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const root = document.documentElement;\n const syncTheme = () => {\n const isDarkTheme =\n root.dataset.theme === \"dark\" ||\n root.classList.contains(\"dark\") ||\n document.body?.dataset.theme === \"dark\";\n\n setEditorTheme(isDarkTheme ? \"vs-dark\" : \"vs\");\n };\n\n syncTheme();\n\n const observer = new MutationObserver(syncTheme);\n observer.observe(root, {\n attributes: true,\n attributeFilter: [\"class\", \"data-theme\"],\n });\n\n if (document.body) {\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [\"class\", \"data-theme\"],\n });\n }\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n className={className}\n style={{\n width: \"100%\",\n minWidth: 0,\n border: \"1px solid var(--surface-border, #d0d7de)\",\n borderRadius: \"0.5rem\",\n overflow: \"hidden\",\n background: editorTheme === \"vs-dark\" ? \"var(--surface-ground, #111827)\" : \"var(--surface-card, #fff)\",\n }}\n >\n <Editor\n width=\"100%\"\n height={height}\n theme={editorTheme}\n language={language}\n value={value}\n onChange={(val) => onChange?.(val ?? \"\")}\n onMount={onMount}\n options={{\n readOnly,\n minimap: { enabled: false },\n lineNumbers: \"on\",\n fontSize: typeof fontSize === \"number\" ? fontSize : parseInt(String(fontSize), 10) || 14,\n scrollBeyondLastLine: false,\n wordWrap,\n overviewRulerBorder: false,\n }}\n />\n </div>\n );\n}\n"]}
@@ -9,6 +9,7 @@ type SolidCodeEditorProps = {
9
9
  readOnly?: boolean;
10
10
  className?: string;
11
11
  language?: string;
12
+ wordWrap?: "off" | "on" | "wordWrapColumn" | "bounded";
12
13
  onMount?: (editor: any, monaco: any) => void;
13
14
  };
14
15
 
@@ -20,6 +21,7 @@ export function SolidCodeEditor({
20
21
  readOnly = false,
21
22
  className,
22
23
  language = "javascript",
24
+ wordWrap = "off",
23
25
  onMount,
24
26
  }: SolidCodeEditorProps) {
25
27
  const [editorTheme, setEditorTheme] = useState<"vs" | "vs-dark">("vs");
@@ -83,6 +85,7 @@ export function SolidCodeEditor({
83
85
  lineNumbers: "on",
84
86
  fontSize: typeof fontSize === "number" ? fontSize : parseInt(String(fontSize), 10) || 14,
85
87
  scrollBeyondLastLine: false,
88
+ wordWrap,
86
89
  overviewRulerBorder: false,
87
90
  }}
88
91
  />
@@ -0,0 +1,13 @@
1
+ export type AdminViewRefreshRequest = {
2
+ moduleName: string;
3
+ modelName: string;
4
+ viewName: "list" | "tree" | "kanban" | "card" | "form";
5
+ scope: "collection" | "record";
6
+ recordId?: string;
7
+ };
8
+ export declare const ADMIN_VIEW_REFRESH_REQUESTED: "solidx.admin:view-refresh-requested";
9
+ export declare function requestAdminViewRefresh(request: AdminViewRefreshRequest): void;
10
+ export declare function isMatchingAdminViewRefresh(request: AdminViewRefreshRequest, current: Pick<AdminViewRefreshRequest, "moduleName" | "modelName" | "viewName"> & {
11
+ recordId?: string;
12
+ }): boolean;
13
+ //# sourceMappingURL=adminViewRefresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminViewRefresh.d.ts","sourceRoot":"","sources":["../../src/helpers/adminViewRefresh.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,uCAAsC,CAAC;AAEhF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,QAEvE;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,WAOxG"}
@@ -0,0 +1,14 @@
1
+ import { AppEvents, eventBus } from "./eventBus";
2
+ export var ADMIN_VIEW_REFRESH_REQUESTED = AppEvents.AdminViewRefreshRequested;
3
+ export function requestAdminViewRefresh(request) {
4
+ eventBus.emit(ADMIN_VIEW_REFRESH_REQUESTED, request);
5
+ }
6
+ export function isMatchingAdminViewRefresh(request, current) {
7
+ if (request.moduleName !== current.moduleName || request.modelName !== current.modelName || request.viewName !== current.viewName) {
8
+ return false;
9
+ }
10
+ if (request.scope === "collection")
11
+ return request.viewName !== "form";
12
+ return request.viewName === "form" && !!request.recordId && request.recordId === current.recordId;
13
+ }
14
+ //# sourceMappingURL=adminViewRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminViewRefresh.js","sourceRoot":"","sources":["../../src/helpers/adminViewRefresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUjD,MAAM,CAAC,IAAM,4BAA4B,GAAG,SAAS,CAAC,yBAAyB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,OAAgC;IACtE,QAAQ,CAAC,IAAI,CAA0B,4BAA4B,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAgC,EAChC,OAAuG;IAEvG,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;QACjI,OAAO,KAAK,CAAC;KACd;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;IACvE,OAAO,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;AACpG,CAAC","sourcesContent":["import { AppEvents, eventBus } from \"./eventBus\";\n\nexport type AdminViewRefreshRequest = {\n moduleName: string;\n modelName: string;\n viewName: \"list\" | \"tree\" | \"kanban\" | \"card\" | \"form\";\n scope: \"collection\" | \"record\";\n recordId?: string;\n};\n\nexport const ADMIN_VIEW_REFRESH_REQUESTED = AppEvents.AdminViewRefreshRequested;\n\nexport function requestAdminViewRefresh(request: AdminViewRefreshRequest) {\n eventBus.emit<AdminViewRefreshRequest>(ADMIN_VIEW_REFRESH_REQUESTED, request);\n}\n\nexport function isMatchingAdminViewRefresh(\n request: AdminViewRefreshRequest,\n current: Pick<AdminViewRefreshRequest, \"moduleName\" | \"modelName\" | \"viewName\"> & { recordId?: string },\n) {\n if (request.moduleName !== current.moduleName || request.modelName !== current.modelName || request.viewName !== current.viewName) {\n return false;\n }\n if (request.scope === \"collection\") return request.viewName !== \"form\";\n return request.viewName === \"form\" && !!request.recordId && request.recordId === current.recordId;\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { AppEvents, eventBus } from "./eventBus";
2
+
3
+ export type AdminViewRefreshRequest = {
4
+ moduleName: string;
5
+ modelName: string;
6
+ viewName: "list" | "tree" | "kanban" | "card" | "form";
7
+ scope: "collection" | "record";
8
+ recordId?: string;
9
+ };
10
+
11
+ export const ADMIN_VIEW_REFRESH_REQUESTED = AppEvents.AdminViewRefreshRequested;
12
+
13
+ export function requestAdminViewRefresh(request: AdminViewRefreshRequest) {
14
+ eventBus.emit<AdminViewRefreshRequest>(ADMIN_VIEW_REFRESH_REQUESTED, request);
15
+ }
16
+
17
+ export function isMatchingAdminViewRefresh(
18
+ request: AdminViewRefreshRequest,
19
+ current: Pick<AdminViewRefreshRequest, "moduleName" | "modelName" | "viewName"> & { recordId?: string },
20
+ ) {
21
+ if (request.moduleName !== current.moduleName || request.modelName !== current.modelName || request.viewName !== current.viewName) {
22
+ return false;
23
+ }
24
+ if (request.scope === "collection") return request.viewName !== "form";
25
+ return request.viewName === "form" && !!request.recordId && request.recordId === current.recordId;
26
+ }
@@ -10,6 +10,7 @@ export declare const AppEvents: {
10
10
  readonly SessionUpdated: "session:updated";
11
11
  readonly SessionCleared: "session:cleared";
12
12
  readonly GlobalError: "error:global";
13
+ readonly AdminViewRefreshRequested: "solidx.admin:view-refresh-requested";
13
14
  };
14
15
  export {};
15
16
  //# sourceMappingURL=eventBus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../src/helpers/eventBus.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD,cAAM,QAAQ;IACZ,OAAO,CAAC,SAAS,CAAwC;IAEzD,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAQnD,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAOpD,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAWzC;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC,eAAO,MAAM,SAAS;;;;CAIZ,CAAC"}
1
+ {"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../src/helpers/eventBus.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD,cAAM,QAAQ;IACZ,OAAO,CAAC,SAAS,CAAwC;IAEzD,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAQnD,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAOpD,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAWzC;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC"}
@@ -59,5 +59,6 @@ export var AppEvents = {
59
59
  SessionUpdated: "session:updated",
60
60
  SessionCleared: "session:cleared",
61
61
  GlobalError: "error:global",
62
+ AdminViewRefreshRequested: "solidx.admin:view-refresh-requested",
62
63
  };
63
64
  //# sourceMappingURL=eventBus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventBus.js","sourceRoot":"","sources":["../../src/helpers/eventBus.ts"],"names":[],"mappings":"AAEA;IAAA;QACU;;;;mBAAY,IAAI,GAAG,EAA6B;WAAC;IA4B3D,CAAC;;;;;eA1BC,UAAY,KAAa,EAAE,OAAwB;YAAnD,iBAMC;YALC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;aACtC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAuB,CAAC,CAAC;YACxD,OAAO,cAAM,OAAA,KAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAuB,CAAC,EAAxC,CAAwC,CAAC;QACxD,CAAC;;;;;;eAED,UAAa,KAAa,EAAE,OAAwB;YAClD,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,GAAG,CAAC,MAAM,CAAC,OAAuB,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;;;;;;eAED,UAAc,KAAa,EAAE,OAAW;YACtC,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAsB,UAAe,EAAf,KAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAf,cAAe,EAAf,IAAe,EAAE;gBAAlC,IAAM,OAAO,SAAA;gBAChB,IAAI;oBACF,OAAO,CAAC,OAAY,CAAC,CAAC;iBACvB;gBAAC,WAAM;oBACN,4CAA4C;iBAC7C;aACF;QACH,CAAC;;IACH,eAAC;AAAD,CAAC,AA7BD,IA6BC;AAED,MAAM,CAAC,IAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC,MAAM,CAAC,IAAM,SAAS,GAAG;IACvB,cAAc,EAAE,iBAAiB;IACjC,cAAc,EAAE,iBAAiB;IACjC,WAAW,EAAE,cAAc;CACnB,CAAC","sourcesContent":["type EventHandler<T = any> = (payload: T) => void;\n\nclass EventBus {\n private listeners = new Map<string, Set<EventHandler>>();\n\n on<T = any>(event: string, handler: EventHandler<T>) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as EventHandler);\n return () => this.off(event, handler as EventHandler);\n }\n\n off<T = any>(event: string, handler: EventHandler<T>) {\n const set = this.listeners.get(event);\n if (!set) return;\n set.delete(handler as EventHandler);\n if (set.size === 0) this.listeners.delete(event);\n }\n\n emit<T = any>(event: string, payload?: T) {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload as T);\n } catch {\n // swallow to avoid breaking other listeners\n }\n }\n }\n}\n\nexport const eventBus = new EventBus();\n\nexport const AppEvents = {\n SessionUpdated: \"session:updated\",\n SessionCleared: \"session:cleared\",\n GlobalError: \"error:global\",\n} as const;\n"]}
1
+ {"version":3,"file":"eventBus.js","sourceRoot":"","sources":["../../src/helpers/eventBus.ts"],"names":[],"mappings":"AAEA;IAAA;QACU;;;;mBAAY,IAAI,GAAG,EAA6B;WAAC;IA4B3D,CAAC;;;;;eA1BC,UAAY,KAAa,EAAE,OAAwB;YAAnD,iBAMC;YALC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;aACtC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAuB,CAAC,CAAC;YACxD,OAAO,cAAM,OAAA,KAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAuB,CAAC,EAAxC,CAAwC,CAAC;QACxD,CAAC;;;;;;eAED,UAAa,KAAa,EAAE,OAAwB;YAClD,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,GAAG,CAAC,MAAM,CAAC,OAAuB,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;;;;;;eAED,UAAc,KAAa,EAAE,OAAW;YACtC,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAsB,UAAe,EAAf,KAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAf,cAAe,EAAf,IAAe,EAAE;gBAAlC,IAAM,OAAO,SAAA;gBAChB,IAAI;oBACF,OAAO,CAAC,OAAY,CAAC,CAAC;iBACvB;gBAAC,WAAM;oBACN,4CAA4C;iBAC7C;aACF;QACH,CAAC;;IACH,eAAC;AAAD,CAAC,AA7BD,IA6BC;AAED,MAAM,CAAC,IAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC,MAAM,CAAC,IAAM,SAAS,GAAG;IACvB,cAAc,EAAE,iBAAiB;IACjC,cAAc,EAAE,iBAAiB;IACjC,WAAW,EAAE,cAAc;IAC3B,yBAAyB,EAAE,qCAAqC;CACxD,CAAC","sourcesContent":["type EventHandler<T = any> = (payload: T) => void;\n\nclass EventBus {\n private listeners = new Map<string, Set<EventHandler>>();\n\n on<T = any>(event: string, handler: EventHandler<T>) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as EventHandler);\n return () => this.off(event, handler as EventHandler);\n }\n\n off<T = any>(event: string, handler: EventHandler<T>) {\n const set = this.listeners.get(event);\n if (!set) return;\n set.delete(handler as EventHandler);\n if (set.size === 0) this.listeners.delete(event);\n }\n\n emit<T = any>(event: string, payload?: T) {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload as T);\n } catch {\n // swallow to avoid breaking other listeners\n }\n }\n }\n}\n\nexport const eventBus = new EventBus();\n\nexport const AppEvents = {\n SessionUpdated: \"session:updated\",\n SessionCleared: \"session:cleared\",\n GlobalError: \"error:global\",\n AdminViewRefreshRequested: \"solidx.admin:view-refresh-requested\",\n} as const;\n"]}
@@ -37,4 +37,5 @@ export const AppEvents = {
37
37
  SessionUpdated: "session:updated",
38
38
  SessionCleared: "session:cleared",
39
39
  GlobalError: "error:global",
40
+ AdminViewRefreshRequested: "solidx.admin:view-refresh-requested",
40
41
  } as const;
@@ -1 +1 @@
1
- {"version":3,"file":"fileTypeIcon.d.ts","sourceRoot":"","sources":["../../src/helpers/fileTypeIcon.tsx"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAkCF,eAAO,MAAM,mBAAmB,YAAa,MAAM,aAAa,MAAM,qBAGrE,CAAC;AAEF,eAAO,MAAM,iBAAiB;aAA4D,MAAM;;;;6CAyB/F,CAAC"}
1
+ {"version":3,"file":"fileTypeIcon.d.ts","sourceRoot":"","sources":["../../src/helpers/fileTypeIcon.tsx"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAmCF,eAAO,MAAM,mBAAmB,YAAa,MAAM,aAAa,MAAM,qBAGrE,CAAC;AAEF,eAAO,MAAM,iBAAiB;aAA4D,MAAM;;;;6CAuC/F,CAAC"}