@jini-ai/chat 0.3.7 → 0.3.9

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 (266) hide show
  1. package/dist/react/features/chat-pane/agent-tools.d.ts +1 -1
  2. package/dist/react/features/chat-pane/agent-tools.js +3 -3
  3. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +1 -1
  4. package/dist/react/features/chat-pane/components/ChatPane.d.ts +1 -1
  5. package/dist/react/features/chat-pane/components/ChatPane.js +3 -1
  6. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.js +15 -1
  7. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +4 -2
  8. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +1 -0
  9. package/dist/react/features/chat-pane/types.d.ts +21 -2
  10. package/dist/react/hooks/composer-draft-cache.d.ts +104 -41
  11. package/dist/react/hooks/composer-draft-cache.js +369 -51
  12. package/dist/react/hooks/useComposer.d.ts +17 -0
  13. package/dist/react/hooks/useComposer.js +93 -12
  14. package/package.json +5 -4
  15. package/dist/core/agentic/chat-capabilities.d.ts.map +0 -1
  16. package/dist/core/agentic/chat-capabilities.js.map +0 -1
  17. package/dist/core/agentic/index.d.ts.map +0 -1
  18. package/dist/core/agentic/index.js.map +0 -1
  19. package/dist/core/events.d.ts.map +0 -1
  20. package/dist/core/events.js.map +0 -1
  21. package/dist/core/index.d.ts.map +0 -1
  22. package/dist/core/index.js.map +0 -1
  23. package/dist/core/messages.d.ts.map +0 -1
  24. package/dist/core/messages.js.map +0 -1
  25. package/dist/core/partial-json.d.ts.map +0 -1
  26. package/dist/core/partial-json.js.map +0 -1
  27. package/dist/core/persistence/index.d.ts.map +0 -1
  28. package/dist/core/persistence/index.js.map +0 -1
  29. package/dist/core/persistence/ports.d.ts.map +0 -1
  30. package/dist/core/persistence/ports.js.map +0 -1
  31. package/dist/core/persistence/title.d.ts.map +0 -1
  32. package/dist/core/persistence/title.js.map +0 -1
  33. package/dist/core/question-form/format.d.ts.map +0 -1
  34. package/dist/core/question-form/format.js.map +0 -1
  35. package/dist/core/question-form/normalize.d.ts.map +0 -1
  36. package/dist/core/question-form/normalize.js.map +0 -1
  37. package/dist/core/question-form/scan.d.ts.map +0 -1
  38. package/dist/core/question-form/scan.js.map +0 -1
  39. package/dist/core/question-form/types.d.ts.map +0 -1
  40. package/dist/core/question-form/types.js.map +0 -1
  41. package/dist/core/question-form.d.ts.map +0 -1
  42. package/dist/core/question-form.js.map +0 -1
  43. package/dist/core/todos.d.ts.map +0 -1
  44. package/dist/core/todos.js.map +0 -1
  45. package/dist/core/tool-events.d.ts.map +0 -1
  46. package/dist/core/tool-events.js.map +0 -1
  47. package/dist/core/tools.d.ts.map +0 -1
  48. package/dist/core/tools.js.map +0 -1
  49. package/dist/core/transcript.d.ts.map +0 -1
  50. package/dist/core/transcript.js.map +0 -1
  51. package/dist/core/transport.d.ts.map +0 -1
  52. package/dist/core/transport.js.map +0 -1
  53. package/dist/core/util/index.d.ts.map +0 -1
  54. package/dist/core/util/index.js.map +0 -1
  55. package/dist/core/util/manifest.d.ts.map +0 -1
  56. package/dist/core/util/manifest.js.map +0 -1
  57. package/dist/core/util/markdown-context.d.ts.map +0 -1
  58. package/dist/core/util/markdown-context.js.map +0 -1
  59. package/dist/core/util/markup-attributes.d.ts.map +0 -1
  60. package/dist/core/util/markup-attributes.js.map +0 -1
  61. package/dist/core/util/parser.d.ts.map +0 -1
  62. package/dist/core/util/parser.js.map +0 -1
  63. package/dist/core/util/pointer.d.ts.map +0 -1
  64. package/dist/core/util/pointer.js.map +0 -1
  65. package/dist/core/util/recover.d.ts.map +0 -1
  66. package/dist/core/util/recover.js.map +0 -1
  67. package/dist/core/util/strip.d.ts.map +0 -1
  68. package/dist/core/util/strip.js.map +0 -1
  69. package/dist/core/util/types.d.ts.map +0 -1
  70. package/dist/core/util/types.js.map +0 -1
  71. package/dist/core/util/validate.d.ts.map +0 -1
  72. package/dist/core/util/validate.js.map +0 -1
  73. package/dist/react/agent-bridge/frontend-session-bridge.d.ts.map +0 -1
  74. package/dist/react/agent-bridge/frontend-session-bridge.js.map +0 -1
  75. package/dist/react/artifact-types.d.ts.map +0 -1
  76. package/dist/react/artifact-types.js.map +0 -1
  77. package/dist/react/chat-pane.d.ts.map +0 -1
  78. package/dist/react/chat-pane.js.map +0 -1
  79. package/dist/react/components/A2uiSurfaceCard.d.ts.map +0 -1
  80. package/dist/react/components/A2uiSurfaceCard.js.map +0 -1
  81. package/dist/react/components/AttachmentPreviewModal.d.ts.map +0 -1
  82. package/dist/react/components/AttachmentPreviewModal.hooks.d.ts.map +0 -1
  83. package/dist/react/components/AttachmentPreviewModal.hooks.js.map +0 -1
  84. package/dist/react/components/AttachmentPreviewModal.js.map +0 -1
  85. package/dist/react/components/AttachmentTray.d.ts.map +0 -1
  86. package/dist/react/components/AttachmentTray.js.map +0 -1
  87. package/dist/react/components/ChatFab.d.ts.map +0 -1
  88. package/dist/react/components/ChatFab.js.map +0 -1
  89. package/dist/react/components/Composer.d.ts.map +0 -1
  90. package/dist/react/components/Composer.js.map +0 -1
  91. package/dist/react/components/ComposerDiscovery.d.ts.map +0 -1
  92. package/dist/react/components/ComposerDiscovery.js.map +0 -1
  93. package/dist/react/components/ConversationList.d.ts.map +0 -1
  94. package/dist/react/components/ConversationList.js.map +0 -1
  95. package/dist/react/components/ExtEventErrorBoundary.d.ts.map +0 -1
  96. package/dist/react/components/ExtEventErrorBoundary.js.map +0 -1
  97. package/dist/react/components/Icon.d.ts.map +0 -1
  98. package/dist/react/components/Icon.js.map +0 -1
  99. package/dist/react/components/JiniChatProvider.d.ts.map +0 -1
  100. package/dist/react/components/JiniChatProvider.js.map +0 -1
  101. package/dist/react/components/Markdown.d.ts.map +0 -1
  102. package/dist/react/components/Markdown.js.map +0 -1
  103. package/dist/react/components/McpUiSurfaceCard.d.ts.map +0 -1
  104. package/dist/react/components/McpUiSurfaceCard.js.map +0 -1
  105. package/dist/react/components/MessageList.d.ts.map +0 -1
  106. package/dist/react/components/MessageList.js.map +0 -1
  107. package/dist/react/components/MessageRow.d.ts.map +0 -1
  108. package/dist/react/components/MessageRow.js.map +0 -1
  109. package/dist/react/components/NextStepActions.d.ts.map +0 -1
  110. package/dist/react/components/NextStepActions.js.map +0 -1
  111. package/dist/react/components/QuestionForm.d.ts.map +0 -1
  112. package/dist/react/components/QuestionForm.js.map +0 -1
  113. package/dist/react/components/QuestionsPanel.d.ts.map +0 -1
  114. package/dist/react/components/QuestionsPanel.js.map +0 -1
  115. package/dist/react/components/TodoCard.d.ts.map +0 -1
  116. package/dist/react/components/TodoCard.js.map +0 -1
  117. package/dist/react/components/ToolCard.d.ts.map +0 -1
  118. package/dist/react/components/ToolCard.js.map +0 -1
  119. package/dist/react/components/composer-discovery.d.ts.map +0 -1
  120. package/dist/react/components/composer-discovery.js.map +0 -1
  121. package/dist/react/ext-event-renderer-registry.d.ts.map +0 -1
  122. package/dist/react/ext-event-renderer-registry.js.map +0 -1
  123. package/dist/react/features/chat-pane/agent-tools.d.ts.map +0 -1
  124. package/dist/react/features/chat-pane/agent-tools.js.map +0 -1
  125. package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts.map +0 -1
  126. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +0 -1
  127. package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +0 -1
  128. package/dist/react/features/chat-pane/components/ChatPane.js.map +0 -1
  129. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.d.ts.map +0 -1
  130. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.js.map +0 -1
  131. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.d.ts.map +0 -1
  132. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.js.map +0 -1
  133. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.d.ts.map +0 -1
  134. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.js.map +0 -1
  135. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +0 -1
  136. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +0 -1
  137. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.d.ts.map +0 -1
  138. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.js.map +0 -1
  139. package/dist/react/features/chat-pane/hooks/useChatPaneComposerPlaceholder.hooks.d.ts.map +0 -1
  140. package/dist/react/features/chat-pane/hooks/useChatPaneComposerPlaceholder.hooks.js.map +0 -1
  141. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.d.ts.map +0 -1
  142. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.js.map +0 -1
  143. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.d.ts.map +0 -1
  144. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.js.map +0 -1
  145. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +0 -1
  146. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.js.map +0 -1
  147. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +0 -1
  148. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.js.map +0 -1
  149. package/dist/react/features/chat-pane/index.d.ts.map +0 -1
  150. package/dist/react/features/chat-pane/index.js.map +0 -1
  151. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts +0 -12
  152. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts.map +0 -1
  153. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js +0 -102
  154. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js.map +0 -1
  155. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts +0 -10
  156. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts.map +0 -1
  157. package/dist/react/features/chat-pane/react/components/ChatPane.js +0 -137
  158. package/dist/react/features/chat-pane/react/components/ChatPane.js.map +0 -1
  159. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts +0 -133
  160. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts.map +0 -1
  161. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js +0 -258
  162. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js.map +0 -1
  163. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts +0 -66
  164. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts.map +0 -1
  165. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js +0 -223
  166. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js.map +0 -1
  167. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts +0 -38
  168. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts.map +0 -1
  169. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js +0 -252
  170. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js.map +0 -1
  171. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts +0 -26
  172. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts.map +0 -1
  173. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js +0 -60
  174. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js.map +0 -1
  175. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts +0 -25
  176. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +0 -1
  177. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js +0 -83
  178. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js.map +0 -1
  179. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts +0 -38
  180. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +0 -1
  181. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js +0 -184
  182. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js.map +0 -1
  183. package/dist/react/features/chat-pane/react/styles.d.ts +0 -2
  184. package/dist/react/features/chat-pane/react/styles.d.ts.map +0 -1
  185. package/dist/react/features/chat-pane/react/styles.js +0 -863
  186. package/dist/react/features/chat-pane/react/styles.js.map +0 -1
  187. package/dist/react/features/chat-pane/rules.d.ts.map +0 -1
  188. package/dist/react/features/chat-pane/rules.js.map +0 -1
  189. package/dist/react/features/chat-pane/styles.d.ts.map +0 -1
  190. package/dist/react/features/chat-pane/styles.js.map +0 -1
  191. package/dist/react/features/chat-pane/types.d.ts.map +0 -1
  192. package/dist/react/features/chat-pane/types.js.map +0 -1
  193. package/dist/react/features/model-picker/components/CredentialStatusBadge.d.ts.map +0 -1
  194. package/dist/react/features/model-picker/components/CredentialStatusBadge.js.map +0 -1
  195. package/dist/react/features/model-picker/components/ModelPicker.d.ts.map +0 -1
  196. package/dist/react/features/model-picker/components/ModelPicker.js.map +0 -1
  197. package/dist/react/features/model-picker/constants.d.ts.map +0 -1
  198. package/dist/react/features/model-picker/constants.js.map +0 -1
  199. package/dist/react/features/model-picker/dependencies.d.ts.map +0 -1
  200. package/dist/react/features/model-picker/dependencies.js.map +0 -1
  201. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.d.ts.map +0 -1
  202. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.js.map +0 -1
  203. package/dist/react/features/model-picker/index.d.ts.map +0 -1
  204. package/dist/react/features/model-picker/index.js.map +0 -1
  205. package/dist/react/features/model-picker/ports.d.ts.map +0 -1
  206. package/dist/react/features/model-picker/ports.js.map +0 -1
  207. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts +0 -7
  208. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts.map +0 -1
  209. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js +0 -20
  210. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js.map +0 -1
  211. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts +0 -9
  212. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts.map +0 -1
  213. package/dist/react/features/model-picker/react/components/ModelPicker.js +0 -34
  214. package/dist/react/features/model-picker/react/components/ModelPicker.js.map +0 -1
  215. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts +0 -27
  216. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts.map +0 -1
  217. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js +0 -62
  218. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js.map +0 -1
  219. package/dist/react/features/model-picker/rules.d.ts.map +0 -1
  220. package/dist/react/features/model-picker/rules.js.map +0 -1
  221. package/dist/react/features/model-picker/types.d.ts.map +0 -1
  222. package/dist/react/features/model-picker/types.js.map +0 -1
  223. package/dist/react/hooks/attachment-preview-cache.d.ts.map +0 -1
  224. package/dist/react/hooks/attachment-preview-cache.js.map +0 -1
  225. package/dist/react/hooks/composer-draft-cache.d.ts.map +0 -1
  226. package/dist/react/hooks/composer-draft-cache.js.map +0 -1
  227. package/dist/react/hooks/context.d.ts.map +0 -1
  228. package/dist/react/hooks/context.js.map +0 -1
  229. package/dist/react/hooks/testing/fake-transport.d.ts.map +0 -1
  230. package/dist/react/hooks/testing/fake-transport.js.map +0 -1
  231. package/dist/react/hooks/useArtifactStream.d.ts.map +0 -1
  232. package/dist/react/hooks/useArtifactStream.js.map +0 -1
  233. package/dist/react/hooks/useChatFabDrag.d.ts.map +0 -1
  234. package/dist/react/hooks/useChatFabDrag.js.map +0 -1
  235. package/dist/react/hooks/useComposer.d.ts.map +0 -1
  236. package/dist/react/hooks/useComposer.js.map +0 -1
  237. package/dist/react/hooks/useConversation.d.ts.map +0 -1
  238. package/dist/react/hooks/useConversation.js.map +0 -1
  239. package/dist/react/hooks/useCopyToClipboard.d.ts.map +0 -1
  240. package/dist/react/hooks/useCopyToClipboard.js.map +0 -1
  241. package/dist/react/hooks/useExtEventGroups.d.ts.map +0 -1
  242. package/dist/react/hooks/useExtEventGroups.js.map +0 -1
  243. package/dist/react/hooks/useLatestOperation.d.ts.map +0 -1
  244. package/dist/react/hooks/useLatestOperation.js.map +0 -1
  245. package/dist/react/hooks/usePinnedTodos.d.ts.map +0 -1
  246. package/dist/react/hooks/usePinnedTodos.js.map +0 -1
  247. package/dist/react/hooks/useQuestionForms.d.ts.map +0 -1
  248. package/dist/react/hooks/useQuestionForms.js.map +0 -1
  249. package/dist/react/hooks/useRunStream.d.ts.map +0 -1
  250. package/dist/react/hooks/useRunStream.js.map +0 -1
  251. package/dist/react/hooks/useToolTimeline.d.ts.map +0 -1
  252. package/dist/react/hooks/useToolTimeline.js.map +0 -1
  253. package/dist/react/index.d.ts.map +0 -1
  254. package/dist/react/index.js.map +0 -1
  255. package/dist/react/message-blocks.d.ts.map +0 -1
  256. package/dist/react/message-blocks.js.map +0 -1
  257. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.d.ts.map +0 -1
  258. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.js.map +0 -1
  259. package/dist/react/poc-mcp-ui-official/create-poc-resource.d.ts.map +0 -1
  260. package/dist/react/poc-mcp-ui-official/create-poc-resource.js.map +0 -1
  261. package/dist/react/slots.d.ts.map +0 -1
  262. package/dist/react/slots.js.map +0 -1
  263. package/dist/react/tool-renderer-registry.d.ts.map +0 -1
  264. package/dist/react/tool-renderer-registry.js.map +0 -1
  265. package/dist/react/util/defined-props.d.ts.map +0 -1
  266. package/dist/react/util/defined-props.js.map +0 -1
@@ -1,184 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
- import { useLatestOperation } from '../../../../hooks/useLatestOperation.js';
3
- /**
4
- * Owns controlled/uncontrolled directory state and orchestrates the native
5
- * filesystem effects used by the packaged working-directory picker.
6
- *
7
- * Every async path runs through one {@link useLatestOperation} instance, so a validation still in
8
- * flight cannot clobber the result of the pick that replaced it, and a resolved promise arriving
9
- * after unmount writes nothing. `token.ensureCurrent()` is that check — it stands where a
10
- * `if (!mounted || stale) return;` guard used to sit after each await.
11
- *
12
- * @param options - Public value, change callback, and optional host I/O access.
13
- * @returns Current picker state plus actions consumed by {@link ChatPane}.
14
- * @throws Never. Native capability failures are exposed as
15
- * `workingDirectoryError` for package-owned validation UI.
16
- *
17
- * @complexity Time: O(r) when refreshing `r` recent paths; O(1) otherwise.
18
- * @complexity Space: O(r) for the package-owned recent-directory snapshot.
19
- * @overallScore 100/100
20
- */
21
- export function useChatPaneWorkingDirectory(options) {
22
- const controlled = options.workingDirectory !== undefined;
23
- const [uncontrolledWorkingDirectory, setUncontrolledWorkingDirectory] = useState(options.initialWorkingDirectory ?? null);
24
- const [recentDirectories, setRecentDirectories] = useState([]);
25
- const [workingDirectoryInvalid, setWorkingDirectoryInvalid] = useState(false);
26
- const [workingDirectoryPending, setWorkingDirectoryPending] = useState(false);
27
- const [workingDirectoryError, setWorkingDirectoryError] = useState(null);
28
- const operation = useLatestOperation();
29
- const observedDirectoryRef = useRef(undefined);
30
- const workingDirectory = controlled
31
- ? options.workingDirectory ?? null
32
- : uncontrolledWorkingDirectory;
33
- const reportWorkingDirectory = useCallback((directory) => {
34
- observedDirectoryRef.current = directory;
35
- if (!controlled)
36
- setUncontrolledWorkingDirectory(directory);
37
- options.onChangeWorkingDirectory?.(directory);
38
- }, [controlled, options.onChangeWorkingDirectory]);
39
- /** Shared by every action: a failed native call invalidates and stops pending. */
40
- const reportFailure = useCallback((error) => {
41
- setWorkingDirectoryError(error);
42
- setWorkingDirectoryPending(false);
43
- }, []);
44
- useEffect(() => {
45
- if (observedDirectoryRef.current === workingDirectory)
46
- return;
47
- observedDirectoryRef.current = workingDirectory;
48
- operation.supersede();
49
- const access = options.workingDirectoryAccess;
50
- setWorkingDirectoryError(null);
51
- if (workingDirectory === null || !access) {
52
- setWorkingDirectoryInvalid(false);
53
- setWorkingDirectoryPending(false);
54
- return;
55
- }
56
- let validationSettled = false;
57
- setWorkingDirectoryPending(true);
58
- void operation.run(async (token) => {
59
- const normalized = access.normalizeWorkingDirectory
60
- ? await access.normalizeWorkingDirectory(workingDirectory)
61
- : workingDirectory;
62
- token.ensureCurrent();
63
- if (normalized === null) {
64
- validationSettled = true;
65
- setWorkingDirectoryInvalid(true);
66
- setWorkingDirectoryPending(false);
67
- return;
68
- }
69
- const exists = await access.directoryExists(normalized);
70
- token.ensureCurrent();
71
- if (normalized !== workingDirectory)
72
- reportWorkingDirectory(normalized);
73
- validationSettled = true;
74
- setWorkingDirectoryInvalid(!exists);
75
- setWorkingDirectoryPending(false);
76
- }, (error) => {
77
- validationSettled = true;
78
- setWorkingDirectoryInvalid(true);
79
- reportFailure(error);
80
- });
81
- return () => {
82
- operation.supersede();
83
- // React Strict Mode replays this effect while preserving refs. Release
84
- // only the marker for the directory owned by this setup so its replay
85
- // starts fresh. Settled validations keep their marker so an unstable
86
- // host adapter object cannot trigger a validation/render loop.
87
- if (!validationSettled
88
- && observedDirectoryRef.current === workingDirectory) {
89
- observedDirectoryRef.current = undefined;
90
- }
91
- };
92
- }, [
93
- operation,
94
- options.workingDirectoryAccess,
95
- reportFailure,
96
- reportWorkingDirectory,
97
- workingDirectory,
98
- ]);
99
- const openWorkingDirectoryPicker = useCallback(async () => {
100
- const access = options.workingDirectoryAccess;
101
- if (!access)
102
- return;
103
- setWorkingDirectoryError(null);
104
- setWorkingDirectoryPending(true);
105
- await operation.run(async (token) => {
106
- const [recent, exists] = await Promise.all([
107
- access.recentDirectories(),
108
- workingDirectory === null
109
- ? Promise.resolve(true)
110
- : access.directoryExists(workingDirectory),
111
- ]);
112
- token.ensureCurrent();
113
- setRecentDirectories([...recent]);
114
- setWorkingDirectoryInvalid(!exists);
115
- setWorkingDirectoryPending(false);
116
- }, reportFailure);
117
- }, [operation, options.workingDirectoryAccess, reportFailure, workingDirectory]);
118
- const pickWorkingDirectory = useCallback(async () => {
119
- const access = options.workingDirectoryAccess;
120
- if (!access)
121
- return;
122
- setWorkingDirectoryError(null);
123
- setWorkingDirectoryPending(true);
124
- await operation.run(async (token) => {
125
- const selected = await access.pickWorkingDirectory(workingDirectory ?? undefined);
126
- token.ensureCurrent();
127
- if (selected === null) {
128
- setWorkingDirectoryPending(false);
129
- return;
130
- }
131
- const [exists, recent] = await Promise.all([
132
- access.directoryExists(selected),
133
- access.recentDirectories(),
134
- ]);
135
- token.ensureCurrent();
136
- reportWorkingDirectory(selected);
137
- setWorkingDirectoryInvalid(!exists);
138
- setRecentDirectories([...recent]);
139
- setWorkingDirectoryPending(false);
140
- }, reportFailure);
141
- }, [
142
- operation,
143
- options.workingDirectoryAccess,
144
- reportFailure,
145
- reportWorkingDirectory,
146
- workingDirectory,
147
- ]);
148
- const selectRecentDirectory = useCallback(async (directory) => {
149
- operation.supersede();
150
- setWorkingDirectoryError(null);
151
- const access = options.workingDirectoryAccess;
152
- if (!access) {
153
- reportWorkingDirectory(directory);
154
- return;
155
- }
156
- setWorkingDirectoryPending(true);
157
- await operation.run(async (token) => {
158
- const exists = await access.directoryExists(directory);
159
- token.ensureCurrent();
160
- reportWorkingDirectory(directory);
161
- setWorkingDirectoryInvalid(!exists);
162
- setWorkingDirectoryPending(false);
163
- }, reportFailure);
164
- }, [operation, options.workingDirectoryAccess, reportFailure, reportWorkingDirectory]);
165
- const clearWorkingDirectory = useCallback(() => {
166
- operation.supersede();
167
- reportWorkingDirectory(null);
168
- setWorkingDirectoryInvalid(false);
169
- setWorkingDirectoryPending(false);
170
- setWorkingDirectoryError(null);
171
- }, [operation, reportWorkingDirectory]);
172
- return {
173
- workingDirectory,
174
- recentDirectories,
175
- workingDirectoryInvalid,
176
- workingDirectoryPending,
177
- workingDirectoryError,
178
- openWorkingDirectoryPicker,
179
- pickWorkingDirectory,
180
- selectRecentDirectory,
181
- clearWorkingDirectory,
182
- };
183
- }
184
- //# sourceMappingURL=useChatPaneWorkingDirectory.hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useChatPaneWorkingDirectory.hooks.js","sourceRoot":"","sources":["../../../../../../src/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const CHAT_PANE_STYLES = "\n.jini-chat-pane {\n --jini-chat-bg: #faf9f7;\n --jini-chat-panel: #fdfcfa;\n --jini-chat-text: #1a1916;\n --jini-chat-text-strong: #0d0c0a;\n --jini-chat-muted: #74716b;\n --jini-chat-faint: #b3b0a8;\n --jini-chat-border: #e1e5eb;\n --jini-chat-border-strong: #c9d0da;\n --jini-chat-border-soft: #edf0f4;\n --jini-chat-subtle: #f4f5f7;\n --jini-chat-accent: #c96442;\n --jini-chat-accent-soft: #fbeee5;\n --bg-panel: var(--jini-chat-panel);\n --bg-subtle: var(--jini-chat-subtle);\n --border: var(--jini-chat-border);\n --border-strong: var(--jini-chat-border-strong);\n --text: var(--jini-chat-text);\n --text-strong: var(--jini-chat-text-strong);\n --text-muted: var(--jini-chat-muted);\n --danger: #e5484d;\n --radius: 8px;\n --radius-lg: 12px;\n position: relative;\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n overflow: hidden;\n color: var(--jini-chat-text);\n background: var(--jini-chat-bg);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei UI\", \"Noto Sans\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n font-size: 13.5px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.jini-chat-pane button,\n.jini-runtime-popover button,\n.jini-runtime-popover select {\n font: inherit;\n}\n.jini-chat-pane__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 74px;\n padding: 18px 22px 14px;\n border-bottom: 1px solid var(--jini-chat-border-soft);\n}\n.jini-chat-pane__heading { min-width: 0; }\n.jini-chat-pane__eyebrow {\n display: block;\n margin-bottom: 4px;\n color: var(--jini-chat-muted);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 10px;\n letter-spacing: .1em;\n text-transform: uppercase;\n}\n.jini-chat-pane__title {\n overflow: hidden;\n margin: 0;\n font-size: 21px;\n font-weight: 650;\n letter-spacing: -.025em;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane__new-thread {\n padding: 8px 12px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane__body {\n position: relative;\n min-height: 0;\n overflow: hidden;\n}\n.jini-chat-pane .jini-message-list {\n height: 100%;\n overflow-y: auto;\n /*\n * .jini-chat-pane__controls is an absolutely-positioned overlay (not a flex/grid sibling that\n * pushes this list up), so its real height has to be reserved here instead. Measured against a\n * live render: the composer + footer + working-directory row alone is already 179.75px, above\n * the 170px this used to reserve -- the last message's tail rendered clipped under the overlay as\n * a direct result. 240px adds real margin above that measurement rather than matching it exactly,\n * because the composer also grows conditionally (a suggestions row, an attachment tray) that\n * this measurement did not have present.\n */\n padding: 20px 22px 240px;\n scrollbar-width: thin;\n}\n.jini-chat-pane .jini-message {\n margin-bottom: 20px;\n color: var(--jini-chat-text);\n font-size: 14px;\n line-height: 1.62;\n}\n/*\n * Bubble on the content, not the row: MessageRow.tsx renders attachments as siblings of\n * .jini-message-content inside .jini-message-user, each with their own chip styling -- bubbling\n * the whole row would nest one background box inside another. This replaces a dead rule this file\n * shipped with (.jini-message-row[data-role=\"user\"] / .jini-message-row.user): MessageRow.tsx\n * has never rendered a jini-message-row class or a data-role attribute, and a user message's\n * root class is jini-message-user, not bare \"user\" -- the selector never matched anything real.\n */\n.jini-chat-pane .jini-message-user .jini-message-content {\n margin-left: auto;\n padding: 10px 13px;\n width: fit-content;\n max-width: 88%;\n background: var(--jini-chat-subtle);\n border-radius: 12px 12px 3px 12px;\n}\n.jini-chat-pane .jini-message-user .jini-message-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n justify-content: flex-end;\n margin-bottom: 4px;\n}\n.jini-chat-pane .jini-message-user .jini-message-attachment-chip {\n font-size: 11px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 999px;\n padding: 3px 10px;\n}\n.jini-chat-pane .jini-message-agent {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: .02em;\n text-transform: uppercase;\n color: var(--jini-chat-faint);\n margin-bottom: 4px;\n}\n.jini-chat-pane .jini-message-error { color: var(--danger); font-size: 13px; }\n.jini-chat-pane .jini-message-pending { color: var(--jini-chat-muted); font-size: 13px; font-style: italic; }\n.jini-chat-pane__controls {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 4;\n padding: 0 16px 14px;\n background: linear-gradient(to bottom, transparent, var(--jini-chat-bg) 22px);\n}\n.jini-chat-pane__suggestions {\n display: flex;\n gap: 8px;\n margin: 0 2px 8px;\n overflow-x: auto;\n}\n.jini-chat-pane__suggestion {\n flex: 0 0 auto;\n max-width: 290px;\n overflow: hidden;\n padding: 7px 11px;\n color: var(--jini-chat-muted);\n background: color-mix(in srgb, var(--jini-chat-panel) 92%, transparent);\n border: 1px solid var(--jini-chat-border);\n border-radius: 999px;\n font-size: 11px;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.jini-chat-pane__error {\n margin: 0 2px 8px;\n padding: 8px 10px;\n color: #8c2f20;\n background: #fff1ed;\n border: 1px solid #f2c8bb;\n border-radius: 8px;\n font-size: 12px;\n}\n.jini-chat-pane__status {\n margin: 0 2px 8px;\n padding: 8px 10px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n font-size: 12px;\n}\n.jini-chat-pane__drop-target {\n position: relative;\n margin: -8px -8px -8px;\n padding: 6px;\n border: 2px dashed transparent;\n border-radius: 16px;\n transition:\n background-color .14s ease,\n border-color .14s ease,\n box-shadow .14s ease;\n}\n.jini-chat-pane__drop-target.is-dragging-files {\n background: color-mix(in srgb, var(--jini-chat-accent-soft) 72%, transparent);\n border-color: var(--jini-chat-accent);\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--jini-chat-accent) 15%, transparent);\n}\n.jini-chat-pane__drop-target.is-dragging-files .jini-composer {\n background: color-mix(in srgb, var(--jini-chat-accent-soft) 58%, var(--jini-chat-panel));\n border-color: color-mix(in srgb, var(--jini-chat-accent) 68%, var(--jini-chat-border));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--jini-chat-accent) 10%, transparent);\n}\n.jini-chat-pane__drop-announcement {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n}\n.jini-chat-pane .jini-composer {\n position: relative;\n overflow: visible;\n padding: 0;\n background: var(--jini-chat-subtle);\n border: 1px solid var(--jini-chat-border);\n border-radius: 12px;\n box-shadow: none;\n transition: border-color .16s ease, box-shadow .16s ease;\n}\n.jini-chat-pane .jini-composer:focus-within {\n background: var(--jini-chat-panel);\n border-color: color-mix(in srgb, var(--jini-chat-accent) 22%, var(--jini-chat-border-strong));\n box-shadow: 0 1px 2px rgba(26, 25, 22, .06), 0 0 0 1px rgba(201, 100, 66, .06);\n}\n.jini-chat-pane .jini-composer-leading {\n padding: 8px 12px 0;\n}\n.jini-chat-pane .jini-attachment-tray {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n max-height: 88px;\n overflow-y: auto;\n padding: 8px 10px 0;\n scrollbar-width: thin;\n}\n.jini-chat-pane .jini-attachment-tray:empty { display: none; }\n.jini-chat-pane .jini-attachment-chip {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n min-width: 0;\n max-width: min(100%, 290px);\n height: 36px;\n padding: 3px 4px 3px 5px;\n color: var(--jini-chat-text);\n background: color-mix(in srgb, var(--jini-chat-panel) 88%, var(--jini-chat-subtle));\n border: 1px solid var(--jini-chat-border);\n border-radius: 9px;\n box-shadow: 0 1px 1px rgba(13, 12, 10, .025);\n}\n.jini-chat-pane .jini-attachment-chip-body {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: 7px;\n}\n.jini-chat-pane .jini-attachment-chip-icon {\n display: grid;\n flex: 0 0 auto;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-subtle);\n border-radius: 7px;\n}\n.jini-chat-pane .jini-attachment-chip-icon.is-image {\n color: var(--jini-chat-accent);\n background: var(--jini-chat-accent-soft);\n}\n.jini-chat-pane .jini-attachment-chip-copy {\n display: flex;\n min-width: 0;\n flex-direction: column;\n line-height: 1.15;\n}\n.jini-chat-pane .jini-attachment-chip-name {\n overflow: hidden;\n font-size: 11.5px;\n font-weight: 550;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-attachment-chip-size {\n color: var(--jini-chat-muted);\n font-size: 9.5px;\n}\n.jini-chat-pane .jini-attachment-remove {\n display: grid;\n flex: 0 0 auto;\n place-items: center;\n width: 25px;\n height: 25px;\n margin-left: 4px;\n padding: 0;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 0;\n border-radius: 7px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-attachment-remove:hover,\n.jini-chat-pane .jini-attachment-remove:focus-visible {\n color: var(--jini-chat-text-strong);\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-composer-input {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-height: 92px;\n resize: none;\n padding: 12px 14px 8px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n outline: 0;\n font-size: 13.5px;\n line-height: 1.6;\n}\n.jini-chat-pane .jini-composer-input::placeholder { color: var(--jini-chat-faint); }\n.jini-chat-pane .jini-composer-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 42px;\n gap: 6px;\n padding: 6px 8px 8px;\n border-top: 1px solid var(--jini-chat-border-soft);\n}\n.jini-chat-pane .jini-composer-attachment-picker { display: inline-flex; }\n.jini-chat-pane .jini-composer-file-input {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n}\n.jini-chat-pane .jini-composer-attach {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 1px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-composer-attach:hover:not(:disabled) {\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border-color: var(--jini-chat-border);\n}\n.jini-chat-pane .jini-composer-attach:disabled { opacity: .45; cursor: default; }\n.jini-composer-spinner,\n.jini-runtime-spinner { animation: jini-chat-spin .8s linear infinite; }\n@keyframes jini-chat-spin { to { transform: rotate(360deg); } }\n.jini-chat-pane .jini-composer-footer-accessories {\n display: flex;\n margin-left: auto;\n min-width: 0;\n}\n.jini-chat-pane .jini-composer-send {\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: white;\n background: var(--jini-chat-text-strong);\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-composer-send:disabled {\n color: #aaa59e;\n background: #ece8e2;\n cursor: default;\n}\n.jini-chat-pane__cancel {\n position: absolute;\n right: 48px;\n bottom: 22px;\n padding: 5px 9px;\n color: var(--jini-chat-muted);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 7px;\n cursor: pointer;\n}\n.jini-chat-pane__workdir {\n display: flex;\n align-items: center;\n gap: 7px;\n min-width: 0;\n padding: 5px 4px 0;\n color: var(--jini-chat-muted);\n font-size: 13px;\n}\n.jini-chat-pane__workdir code {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-picker {\n position: relative;\n display: inline-flex;\n align-items: flex-start;\n}\n.jini-chat-pane .jini-working-dir-trigger-row {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n.jini-chat-pane .jini-working-dir-trigger {\n appearance: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 6px;\n color: var(--jini-chat-muted);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n font-size: 13px;\n cursor: pointer;\n}\n.jini-chat-pane .jini-working-dir-trigger:hover,\n.jini-chat-pane .jini-working-dir-trigger:focus-visible {\n color: var(--jini-chat-text-strong);\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-working-dir-trigger.invalid { color: var(--danger); }\n.jini-chat-pane .jini-working-dir-trigger-icon { flex: 0 0 auto; opacity: .75; }\n.jini-chat-pane .jini-working-dir-trigger.invalid .jini-working-dir-trigger-icon {\n color: var(--danger);\n opacity: 1;\n}\n.jini-chat-pane .jini-working-dir-trigger-label {\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-trigger-chevron { flex: 0 0 auto; opacity: .55; }\n.jini-chat-pane .jini-working-dir-panel,\n.jini-chat-pane .jini-working-dir-flyout {\n position: absolute;\n z-index: 90;\n display: flex;\n flex-direction: column;\n min-width: 210px;\n padding: 5px;\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border-strong);\n border-radius: 12px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 10px 28px -10px rgba(0, 0, 0, .18);\n}\n.jini-chat-pane .jini-working-dir-panel {\n top: calc(100% + 6px);\n left: 0;\n}\n.jini-chat-pane .jini-working-dir-panel.up {\n top: auto;\n bottom: calc(100% + 6px);\n}\n.jini-chat-pane .jini-working-dir-item {\n appearance: none;\n display: flex;\n align-items: center;\n gap: 9px;\n width: 100%;\n min-height: 32px;\n padding: 0 9px;\n color: var(--jini-chat-text-strong);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n}\n.jini-chat-pane .jini-working-dir-item:hover,\n.jini-chat-pane .jini-working-dir-item:focus-visible,\n.jini-chat-pane .jini-working-dir-recent-item:hover,\n.jini-chat-pane .jini-working-dir-recent-item:focus-visible {\n background: var(--jini-chat-subtle);\n outline: none;\n}\n.jini-chat-pane .jini-working-dir-item-icon { flex: 0 0 auto; opacity: .8; }\n.jini-chat-pane .jini-working-dir-item > span {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-item-chevron { margin-left: auto; opacity: .55; }\n.jini-chat-pane .jini-working-dir-submenu-row { position: relative; }\n.jini-chat-pane .jini-working-dir-flyout {\n top: -5px;\n left: 100%;\n z-index: 91;\n min-width: 220px;\n max-width: 320px;\n margin-left: 4px;\n}\n.jini-chat-pane .jini-working-dir-flyout.up { top: auto; bottom: -5px; }\n.jini-chat-pane .jini-working-dir-flyout::before {\n position: absolute;\n top: 0;\n left: -8px;\n width: 8px;\n height: 100%;\n content: \"\";\n}\n.jini-chat-pane .jini-working-dir-recent-item {\n appearance: none;\n display: grid;\n grid-template-rows: auto auto;\n grid-template-columns: auto 1fr;\n align-items: center;\n width: 100%;\n min-height: 36px;\n padding: 4px 9px;\n color: var(--jini-chat-text-strong);\n background: transparent;\n border: 0;\n border-radius: 8px;\n font: inherit;\n text-align: left;\n cursor: pointer;\n column-gap: 9px;\n}\n.jini-chat-pane .jini-working-dir-recent-item .jini-working-dir-item-icon {\n grid-row: 1 / span 2;\n}\n.jini-chat-pane .jini-working-dir-recent-name,\n.jini-chat-pane .jini-working-dir-recent-path {\n grid-column: 2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-chat-pane .jini-working-dir-recent-name { font-size: 13px; }\n.jini-chat-pane .jini-working-dir-recent-path {\n color: var(--jini-chat-muted);\n font-size: 11px;\n opacity: .7;\n}\n.jini-chat-pane .jini-working-dir-empty {\n padding: 8px 10px;\n color: var(--jini-chat-muted);\n font-size: 12px;\n white-space: nowrap;\n opacity: .7;\n}\n.jini-runtime-picker { position: relative; }\n.jini-runtime-trigger {\n display: inline-grid;\n grid-template-columns: 24px 14px;\n align-items: center;\n gap: 7px;\n height: 32px;\n min-width: 0;\n padding: 3px 7px 3px 5px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n}\n.jini-runtime-trigger:hover { background: var(--jini-chat-subtle); }\n.jini-runtime-trigger__copy { display: none; }\n.jini-runtime-trigger__copy strong {\n overflow: hidden;\n max-width: 122px;\n font-size: 11px;\n font-weight: 650;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-trigger__copy small {\n overflow: hidden;\n max-width: 122px;\n color: var(--jini-chat-muted);\n font-size: 9px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-trigger__chevron { color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-agent-icon.agent-icon { flex: 0 0 auto; object-fit: contain; }\n.jini-runtime-agent-icon.agent-icon-mono {\n display: inline-block;\n background-color: currentColor;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-size: contain;\n mask-size: contain;\n}\n.jini-runtime-agent-icon.agent-icon-fallback {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #74716b;\n background: #f4f5f7;\n border: 1px solid #e1e5eb;\n border-radius: 6px;\n font-weight: 700;\n}\n.jini-runtime-popover {\n --jini-chat-panel: #fdfcfa;\n --jini-chat-text: #1a1916;\n --jini-chat-text-strong: #0d0c0a;\n --jini-chat-muted: #74716b;\n --jini-chat-faint: #b3b0a8;\n --jini-chat-border: #e1e5eb;\n --jini-chat-border-soft: #edf0f4;\n --jini-chat-subtle: #f4f5f7;\n box-sizing: border-box;\n padding: 8px;\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 12px;\n box-shadow: 0 18px 46px rgba(13, 12, 10, .15), 0 2px 8px rgba(13, 12, 10, .06);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei UI\", \"Noto Sans\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n font-size: 13.5px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n}\n.jini-runtime-popover__head {\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 10px 12px 12px;\n border-bottom: 1px solid var(--jini-chat-border-soft);\n}\n.jini-runtime-popover__head strong { color: var(--jini-chat-text-strong); font-size: 14px; font-weight: 650; }\n.jini-runtime-popover__head span { color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-mode,\n.jini-runtime-agent,\n.jini-runtime-rescan {\n display: flex;\n align-items: center;\n gap: 11px;\n box-sizing: border-box;\n width: 100%;\n min-height: 40px;\n padding: 8px 11px;\n color: var(--jini-chat-text);\n background: transparent;\n border: 0;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n}\n.jini-runtime-mode:hover,\n.jini-runtime-agent:hover:not(:disabled),\n.jini-runtime-rescan:hover:not(:disabled) { background: var(--jini-chat-subtle); }\n.jini-runtime-mode.is-active { font-weight: 650; }\n.jini-runtime-mode:disabled,\n.jini-runtime-agent:disabled,\n.jini-runtime-rescan:disabled { color: var(--jini-chat-faint); cursor: default; }\n.jini-runtime-mode__meta,\n.jini-runtime-agent__status {\n margin-left: auto;\n color: var(--jini-chat-muted);\n font-size: 12px;\n white-space: nowrap;\n}\n.jini-runtime-check { flex: 0 0 auto; color: var(--jini-chat-text); }\n.jini-runtime-section-label {\n padding: 12px 11px 5px;\n color: var(--jini-chat-faint);\n font-size: 11px;\n font-weight: 650;\n letter-spacing: .08em;\n text-transform: uppercase;\n}\n.jini-runtime-agent.is-active { background: transparent; }\n.jini-runtime-agent__copy {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n}\n.jini-runtime-agent__copy strong { font-size: 13.5px; font-weight: 500; }\n.jini-runtime-agent__copy small {\n overflow: hidden;\n color: #8b857e;\n font-size: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jini-runtime-empty { padding: 10px 11px; color: var(--jini-chat-muted); font-size: 12px; }\n.jini-runtime-models {\n display: flex;\n flex-direction: column;\n gap: 9px;\n margin-top: 5px;\n padding: 10px 11px 8px;\n border-top: 1px dashed var(--jini-chat-border);\n}\n.jini-runtime-select {\n display: flex;\n flex-direction: column;\n gap: 5px;\n color: var(--jini-chat-muted);\n font-size: 13px;\n}\n.jini-runtime-select select {\n box-sizing: border-box;\n width: 100%;\n min-height: 40px;\n padding: 7px 10px;\n color: var(--jini-chat-text);\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 8px;\n}\n/*\n * The BYOK model, rendered as a value rather than a control \u2014 see RuntimeByokDetails for why it\n * is not a disabled select. It occupies the same box the sibling selects do so the row still\n * reads as part of the same list, but carries no border: a bordered box with no affordance is\n * exactly the \"looks editable, isn't\" shape the plain text exists to avoid.\n */\n/*\n * The BYOK model list, which CustomSelect portals to document.body. runtimePopoverPosition puts\n * the runtime popover at z-index 1000; the shared .jini-select-menu default is 60, which is right\n * everywhere else and puts this menu behind the very popover that opened it. One above the\n * popover, not far above: it must clear its own surface and nothing else.\n */\n.jini-select-menu.jini-runtime-model-menu {\n z-index: 1001;\n}\n.jini-runtime-byok-model strong {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n min-height: 40px;\n padding: 7px 10px;\n color: var(--jini-chat-text);\n font-weight: 600;\n word-break: break-all;\n}\n/*\n * Tool-call cards (ToolCard.tsx) and the per-turn usage summary (MessageRow.tsx) ship no CSS of\n * their own \u2014 see this file's own header note on why the package supplies a default theme at all.\n * Collapsed by default (.op-card-head is the only always-visible part), so a run with a dozen tool\n * calls reads as a dozen one-line rows, not a page of raw JSON.\n */\n.jini-chat-pane .jini-message-tools {\n display: flex;\n flex-direction: column;\n gap: 6px;\n width: 100%;\n}\n.jini-chat-pane .op-card {\n border: 1px solid var(--jini-chat-border);\n border-radius: var(--radius);\n background: var(--jini-chat-subtle);\n overflow: hidden;\n font-size: 13px;\n}\n.jini-chat-pane .op-card-head {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n background: none;\n border: 0;\n font: inherit;\n text-align: left;\n cursor: pointer;\n color: inherit;\n}\n.jini-chat-pane .op-status { display: inline-flex; flex-shrink: 0; }\n.jini-chat-pane .op-status-ok { color: #4e875f; }\n.jini-chat-pane .op-status-error { color: var(--danger); }\n.jini-chat-pane .op-status-running { color: var(--jini-chat-accent); }\n.jini-chat-pane .op-title { font-weight: 600; flex-shrink: 0; }\n.jini-chat-pane .shimmer-text { opacity: .6; }\n.jini-chat-pane .op-meta {\n color: var(--jini-chat-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n min-width: 0;\n}\n.jini-chat-pane .op-expand-chev { flex-shrink: 0; color: var(--jini-chat-faint); }\n/* Collapsed by default: 0 max-height clips the inner content, no display:none \u2014 keeps the height\n transition instead of an instant jump cut. */\n.jini-chat-pane .accordion-collapsible { max-height: 0; overflow: hidden; transition: max-height .15s ease; }\n.jini-chat-pane .accordion-collapsible.open { max-height: 480px; overflow-y: auto; }\n.jini-chat-pane .accordion-collapsible-inner { padding: 0 10px 10px; }\n.jini-chat-pane .op-card-detail { display: flex; flex-direction: column; gap: 6px; }\n.jini-chat-pane .op-path,\n.jini-chat-pane .op-command,\n.jini-chat-pane .op-output {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 12px;\n background: var(--jini-chat-panel);\n border: 1px solid var(--jini-chat-border);\n border-radius: 6px;\n padding: 6px 8px;\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.jini-chat-pane .op-open {\n border: 1px solid var(--jini-chat-border-strong);\n border-radius: 6px;\n background: var(--jini-chat-panel);\n padding: 2px 8px;\n font-size: 11px;\n cursor: pointer;\n}\n/* The \"Done \u00B7 6m 29s \u00B7 2612 out \u00B7 $0.4028\" line \u2014 real numbers from the run's own kind:'usage' event. */\n.jini-chat-pane .jini-message-usage {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: var(--jini-chat-muted);\n margin-top: 2px;\n}\n.jini-chat-pane .jini-message-usage-dot { font-size: 8px; color: #4e875f; }\n@media (max-width: 560px) {\n .jini-chat-pane__header { padding-inline: 16px; }\n .jini-chat-pane .jini-message-list { padding-inline: 16px; }\n .jini-chat-pane__controls { padding-inline: 10px; }\n}\n";
2
- //# sourceMappingURL=styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/react/features/chat-pane/react/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,i9yBA61B5B,CAAC"}