@agimon-ai/po-web-dashboard 0.0.0-alpha.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 (924) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/core.cjs +222 -0
  5. package/dist/core.d.mts +21 -0
  6. package/dist/core.mjs +21 -0
  7. package/dist/index.cjs +546 -0
  8. package/dist/index.d.mts +81 -0
  9. package/dist/index.mjs +81 -0
  10. package/dist/testing.cjs +18 -0
  11. package/dist/testing.d.mts +6 -0
  12. package/dist/testing.mjs +6 -0
  13. package/dist/types/auth.cjs +20 -0
  14. package/dist/types/auth.cjs.map +1 -0
  15. package/dist/types/auth.d.mts +160 -0
  16. package/dist/types/auth.d.mts.map +1 -0
  17. package/dist/types/auth.mjs +19 -0
  18. package/dist/types/auth.mjs.map +1 -0
  19. package/dist/types/bridge.d.mts +18 -0
  20. package/dist/types/bridge.d.mts.map +1 -0
  21. package/dist/types/devProxy.cjs +41 -0
  22. package/dist/types/devProxy.cjs.map +1 -0
  23. package/dist/types/devProxy.d.mts +54 -0
  24. package/dist/types/devProxy.d.mts.map +1 -0
  25. package/dist/types/devProxy.mjs +39 -0
  26. package/dist/types/devProxy.mjs.map +1 -0
  27. package/dist/types/hub.cjs +220 -0
  28. package/dist/types/hub.cjs.map +1 -0
  29. package/dist/types/hub.d.mts +447 -0
  30. package/dist/types/hub.d.mts.map +1 -0
  31. package/dist/types/hub.mjs +179 -0
  32. package/dist/types/hub.mjs.map +1 -0
  33. package/dist/types/media.cjs +75 -0
  34. package/dist/types/media.cjs.map +1 -0
  35. package/dist/types/media.d.mts +22 -0
  36. package/dist/types/media.d.mts.map +1 -0
  37. package/dist/types/media.mjs +70 -0
  38. package/dist/types/media.mjs.map +1 -0
  39. package/dist/types/notification.cjs +19 -0
  40. package/dist/types/notification.cjs.map +1 -0
  41. package/dist/types/notification.d.mts +10 -0
  42. package/dist/types/notification.d.mts.map +1 -0
  43. package/dist/types/notification.mjs +19 -0
  44. package/dist/types/notification.mjs.map +1 -0
  45. package/dist/types/remoteAccess.cjs +92 -0
  46. package/dist/types/remoteAccess.cjs.map +1 -0
  47. package/dist/types/remoteAccess.d.mts +214 -0
  48. package/dist/types/remoteAccess.d.mts.map +1 -0
  49. package/dist/types/remoteAccess.mjs +68 -0
  50. package/dist/types/remoteAccess.mjs.map +1 -0
  51. package/dist/types/session.cjs +23 -0
  52. package/dist/types/session.cjs.map +1 -0
  53. package/dist/types/session.d.mts +29 -0
  54. package/dist/types/session.d.mts.map +1 -0
  55. package/dist/types/session.mjs +18 -0
  56. package/dist/types/session.mjs.map +1 -0
  57. package/dist/types/sessionMcp.d.mts +56 -0
  58. package/dist/types/sessionMcp.d.mts.map +1 -0
  59. package/dist/types/settings.cjs +18 -0
  60. package/dist/types/settings.cjs.map +1 -0
  61. package/dist/types/settings.d.mts +126 -0
  62. package/dist/types/settings.d.mts.map +1 -0
  63. package/dist/types/settings.mjs +12 -0
  64. package/dist/types/settings.mjs.map +1 -0
  65. package/dist/types.cjs +101 -0
  66. package/dist/types.d.mts +11 -0
  67. package/dist/types.mjs +9 -0
  68. package/dist/views.cjs +120 -0
  69. package/dist/views.d.mts +56 -0
  70. package/dist/views.mjs +56 -0
  71. package/dist/web/components/MascotMark.cjs +18 -0
  72. package/dist/web/components/MascotMark.cjs.map +1 -0
  73. package/dist/web/components/MascotMark.d.mts +9 -0
  74. package/dist/web/components/MascotMark.d.mts.map +1 -0
  75. package/dist/web/components/MascotMark.mjs +18 -0
  76. package/dist/web/components/MascotMark.mjs.map +1 -0
  77. package/dist/web/components/PluginSurface.cjs +15 -0
  78. package/dist/web/components/PluginSurface.cjs.map +1 -0
  79. package/dist/web/components/PluginSurface.d.mts +13 -0
  80. package/dist/web/components/PluginSurface.d.mts.map +1 -0
  81. package/dist/web/components/PluginSurface.mjs +15 -0
  82. package/dist/web/components/PluginSurface.mjs.map +1 -0
  83. package/dist/web/components/QrCode.cjs +37 -0
  84. package/dist/web/components/QrCode.cjs.map +1 -0
  85. package/dist/web/components/QrCode.d.mts +22 -0
  86. package/dist/web/components/QrCode.d.mts.map +1 -0
  87. package/dist/web/components/QrCode.mjs +37 -0
  88. package/dist/web/components/QrCode.mjs.map +1 -0
  89. package/dist/web/components/Remote.fixture.cjs +73 -0
  90. package/dist/web/components/Remote.fixture.cjs.map +1 -0
  91. package/dist/web/components/Remote.fixture.mjs +72 -0
  92. package/dist/web/components/Remote.fixture.mjs.map +1 -0
  93. package/dist/web/components/SessionMcp.cjs +279 -0
  94. package/dist/web/components/SessionMcp.cjs.map +1 -0
  95. package/dist/web/components/SessionMcp.d.mts +12 -0
  96. package/dist/web/components/SessionMcp.d.mts.map +1 -0
  97. package/dist/web/components/SessionMcp.mjs +278 -0
  98. package/dist/web/components/SessionMcp.mjs.map +1 -0
  99. package/dist/web/components/Story.fixture.cjs +124 -0
  100. package/dist/web/components/Story.fixture.cjs.map +1 -0
  101. package/dist/web/components/Story.fixture.d.mts +19 -0
  102. package/dist/web/components/Story.fixture.d.mts.map +1 -0
  103. package/dist/web/components/Story.fixture.mjs +119 -0
  104. package/dist/web/components/Story.fixture.mjs.map +1 -0
  105. package/dist/web/components/Template.fixture.cjs +67 -0
  106. package/dist/web/components/Template.fixture.cjs.map +1 -0
  107. package/dist/web/components/Template.fixture.d.mts +7 -0
  108. package/dist/web/components/Template.fixture.d.mts.map +1 -0
  109. package/dist/web/components/Template.fixture.mjs +65 -0
  110. package/dist/web/components/Template.fixture.mjs.map +1 -0
  111. package/dist/web/components/ToolRendererBoundary.cjs +23 -0
  112. package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
  113. package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
  114. package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
  115. package/dist/web/components/ToolRendererBoundary.mjs +23 -0
  116. package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
  117. package/dist/web/features/activity/ActivityDock.cjs +271 -0
  118. package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
  119. package/dist/web/features/activity/ActivityDock.d.mts +22 -0
  120. package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
  121. package/dist/web/features/activity/ActivityDock.mjs +271 -0
  122. package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
  123. package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
  124. package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
  125. package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
  126. package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
  127. package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
  128. package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
  129. package/dist/web/features/activity/ContextPanel.cjs +248 -0
  130. package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
  131. package/dist/web/features/activity/ContextPanel.d.mts +4 -0
  132. package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
  133. package/dist/web/features/activity/ContextPanel.mjs +248 -0
  134. package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
  135. package/dist/web/features/activity/DockTabs.cjs +47 -0
  136. package/dist/web/features/activity/DockTabs.cjs.map +1 -0
  137. package/dist/web/features/activity/DockTabs.d.mts +9 -0
  138. package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
  139. package/dist/web/features/activity/DockTabs.mjs +47 -0
  140. package/dist/web/features/activity/DockTabs.mjs.map +1 -0
  141. package/dist/web/features/connection/RefusedCard.cjs +76 -0
  142. package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
  143. package/dist/web/features/connection/RefusedCard.d.mts +5 -0
  144. package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
  145. package/dist/web/features/connection/RefusedCard.mjs +76 -0
  146. package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
  147. package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
  148. package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
  149. package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
  150. package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
  151. package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
  152. package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
  153. package/dist/web/features/leader/CommandPalette.cjs +390 -0
  154. package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
  155. package/dist/web/features/leader/CommandPalette.d.mts +14 -0
  156. package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
  157. package/dist/web/features/leader/CommandPalette.mjs +390 -0
  158. package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
  159. package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
  160. package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
  161. package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
  162. package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
  163. package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
  164. package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
  165. package/dist/web/features/remote/HandoverProgress.cjs +28 -0
  166. package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
  167. package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
  168. package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
  169. package/dist/web/features/remote/HandoverProgress.mjs +28 -0
  170. package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
  171. package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
  172. package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
  173. package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
  174. package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
  175. package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
  176. package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
  177. package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
  178. package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
  179. package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
  180. package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
  181. package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
  182. package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
  183. package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
  184. package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
  185. package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
  186. package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
  187. package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
  188. package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
  189. package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
  190. package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
  191. package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
  192. package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
  193. package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
  194. package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
  195. package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
  196. package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
  197. package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
  198. package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
  199. package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
  200. package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
  201. package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
  202. package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
  203. package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
  204. package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
  205. package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
  206. package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
  207. package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
  208. package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
  209. package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
  210. package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
  211. package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
  212. package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
  213. package/dist/web/features/selection/SelectionBar.cjs +401 -0
  214. package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
  215. package/dist/web/features/selection/SelectionBar.d.mts +14 -0
  216. package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
  217. package/dist/web/features/selection/SelectionBar.mjs +400 -0
  218. package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
  219. package/dist/web/features/session/AgentLockPanel.cjs +31 -0
  220. package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
  221. package/dist/web/features/session/AgentLockPanel.mjs +31 -0
  222. package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
  223. package/dist/web/features/session/Composer.cjs +808 -0
  224. package/dist/web/features/session/Composer.cjs.map +1 -0
  225. package/dist/web/features/session/Composer.d.mts +21 -0
  226. package/dist/web/features/session/Composer.d.mts.map +1 -0
  227. package/dist/web/features/session/Composer.mjs +806 -0
  228. package/dist/web/features/session/Composer.mjs.map +1 -0
  229. package/dist/web/features/session/ComposerPrompt.cjs +47 -0
  230. package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
  231. package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
  232. package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
  233. package/dist/web/features/session/ComposerPrompt.mjs +47 -0
  234. package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
  235. package/dist/web/features/session/DormantPanel.cjs +61 -0
  236. package/dist/web/features/session/DormantPanel.cjs.map +1 -0
  237. package/dist/web/features/session/DormantPanel.d.mts +8 -0
  238. package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
  239. package/dist/web/features/session/DormantPanel.mjs +61 -0
  240. package/dist/web/features/session/DormantPanel.mjs.map +1 -0
  241. package/dist/web/features/session/MentionPreviews.cjs +128 -0
  242. package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
  243. package/dist/web/features/session/MentionPreviews.d.mts +17 -0
  244. package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
  245. package/dist/web/features/session/MentionPreviews.mjs +127 -0
  246. package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
  247. package/dist/web/features/session/MessageMarkdown.cjs +20 -0
  248. package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
  249. package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
  250. package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
  251. package/dist/web/features/session/MessageMarkdown.mjs +20 -0
  252. package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
  253. package/dist/web/features/session/QueueSheet.cjs +189 -0
  254. package/dist/web/features/session/QueueSheet.cjs.map +1 -0
  255. package/dist/web/features/session/QueueSheet.d.mts +16 -0
  256. package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
  257. package/dist/web/features/session/QueueSheet.mjs +189 -0
  258. package/dist/web/features/session/QueueSheet.mjs.map +1 -0
  259. package/dist/web/features/session/SessionActivity.cjs +88 -0
  260. package/dist/web/features/session/SessionActivity.cjs.map +1 -0
  261. package/dist/web/features/session/SessionActivity.d.mts +16 -0
  262. package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
  263. package/dist/web/features/session/SessionActivity.mjs +87 -0
  264. package/dist/web/features/session/SessionActivity.mjs.map +1 -0
  265. package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
  266. package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
  267. package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
  268. package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
  269. package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
  270. package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
  271. package/dist/web/features/session/ThreadView.cjs +40 -0
  272. package/dist/web/features/session/ThreadView.cjs.map +1 -0
  273. package/dist/web/features/session/ThreadView.d.mts +18 -0
  274. package/dist/web/features/session/ThreadView.d.mts.map +1 -0
  275. package/dist/web/features/session/ThreadView.mjs +40 -0
  276. package/dist/web/features/session/ThreadView.mjs.map +1 -0
  277. package/dist/web/features/session/Timeline.cjs +620 -0
  278. package/dist/web/features/session/Timeline.cjs.map +1 -0
  279. package/dist/web/features/session/Timeline.d.mts +28 -0
  280. package/dist/web/features/session/Timeline.d.mts.map +1 -0
  281. package/dist/web/features/session/Timeline.mjs +619 -0
  282. package/dist/web/features/session/Timeline.mjs.map +1 -0
  283. package/dist/web/features/session/ToolCard.cjs +210 -0
  284. package/dist/web/features/session/ToolCard.cjs.map +1 -0
  285. package/dist/web/features/session/ToolCard.d.mts +16 -0
  286. package/dist/web/features/session/ToolCard.d.mts.map +1 -0
  287. package/dist/web/features/session/ToolCard.mjs +210 -0
  288. package/dist/web/features/session/ToolCard.mjs.map +1 -0
  289. package/dist/web/features/session/session.fixture.cjs +76 -0
  290. package/dist/web/features/session/session.fixture.cjs.map +1 -0
  291. package/dist/web/features/session/session.fixture.d.mts +6 -0
  292. package/dist/web/features/session/session.fixture.d.mts.map +1 -0
  293. package/dist/web/features/session/session.fixture.mjs +74 -0
  294. package/dist/web/features/session/session.fixture.mjs.map +1 -0
  295. package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
  296. package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
  297. package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
  298. package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
  299. package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
  300. package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
  301. package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
  302. package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
  303. package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
  304. package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
  305. package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
  306. package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
  307. package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
  308. package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
  309. package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
  310. package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
  311. package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
  312. package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
  313. package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
  314. package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
  315. package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
  316. package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
  317. package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
  318. package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
  319. package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
  320. package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
  321. package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
  322. package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
  323. package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
  324. package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
  325. package/dist/web/features/sessions/useSessionRail.cjs +302 -0
  326. package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
  327. package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
  328. package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
  329. package/dist/web/features/sessions/useSessionRail.mjs +302 -0
  330. package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
  331. package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
  332. package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
  333. package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
  334. package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
  335. package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
  336. package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
  337. package/dist/web/features/settings/ContributedSettings.cjs +257 -0
  338. package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
  339. package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
  340. package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
  341. package/dist/web/features/settings/ContributedSettings.mjs +257 -0
  342. package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
  343. package/dist/web/features/settings/ImageSettings.cjs +146 -0
  344. package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
  345. package/dist/web/features/settings/ImageSettings.d.mts +12 -0
  346. package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
  347. package/dist/web/features/settings/ImageSettings.mjs +146 -0
  348. package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
  349. package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
  350. package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
  351. package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
  352. package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
  353. package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
  354. package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
  355. package/dist/web/features/settings/NotificationSettings.cjs +69 -0
  356. package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
  357. package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
  358. package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
  359. package/dist/web/features/settings/NotificationSettings.mjs +69 -0
  360. package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
  361. package/dist/web/features/settings/PluginSettings.cjs +106 -0
  362. package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
  363. package/dist/web/features/settings/PluginSettings.d.mts +10 -0
  364. package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
  365. package/dist/web/features/settings/PluginSettings.mjs +106 -0
  366. package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
  367. package/dist/web/features/settings/ProviderSettings.cjs +323 -0
  368. package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
  369. package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
  370. package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
  371. package/dist/web/features/settings/ProviderSettings.mjs +323 -0
  372. package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
  373. package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
  374. package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
  375. package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
  376. package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
  377. package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
  378. package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
  379. package/dist/web/features/settings/RepositorySettings.cjs +318 -0
  380. package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
  381. package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
  382. package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
  383. package/dist/web/features/settings/RepositorySettings.mjs +318 -0
  384. package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
  385. package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
  386. package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
  387. package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
  388. package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
  389. package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
  390. package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
  391. package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
  392. package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
  393. package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
  394. package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
  395. package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
  396. package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
  397. package/dist/web/features/settings/SettingsMenu.cjs +135 -0
  398. package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
  399. package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
  400. package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
  401. package/dist/web/features/settings/SettingsMenu.mjs +135 -0
  402. package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
  403. package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
  404. package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
  405. package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
  406. package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
  407. package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
  408. package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
  409. package/dist/web/features/settings/TemplateSettings.cjs +177 -0
  410. package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
  411. package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
  412. package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
  413. package/dist/web/features/settings/TemplateSettings.mjs +177 -0
  414. package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
  415. package/dist/web/features/settings/TunnelSettings.cjs +182 -0
  416. package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
  417. package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
  418. package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
  419. package/dist/web/features/settings/TunnelSettings.mjs +182 -0
  420. package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
  421. package/dist/web/features/settings/settings.fixture.cjs +230 -0
  422. package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
  423. package/dist/web/features/settings/settings.fixture.d.mts +6 -0
  424. package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
  425. package/dist/web/features/settings/settings.fixture.mjs +223 -0
  426. package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
  427. package/dist/web/features/status/TopBar.cjs +200 -0
  428. package/dist/web/features/status/TopBar.cjs.map +1 -0
  429. package/dist/web/features/status/TopBar.d.mts +11 -0
  430. package/dist/web/features/status/TopBar.d.mts.map +1 -0
  431. package/dist/web/features/status/TopBar.mjs +200 -0
  432. package/dist/web/features/status/TopBar.mjs.map +1 -0
  433. package/dist/web/lib/authApi.cjs +77 -0
  434. package/dist/web/lib/authApi.cjs.map +1 -0
  435. package/dist/web/lib/authApi.d.mts +28 -0
  436. package/dist/web/lib/authApi.d.mts.map +1 -0
  437. package/dist/web/lib/authApi.mjs +72 -0
  438. package/dist/web/lib/authApi.mjs.map +1 -0
  439. package/dist/web/lib/browserNotifications.cjs +37 -0
  440. package/dist/web/lib/browserNotifications.cjs.map +1 -0
  441. package/dist/web/lib/browserNotifications.d.mts +12 -0
  442. package/dist/web/lib/browserNotifications.d.mts.map +1 -0
  443. package/dist/web/lib/browserNotifications.mjs +35 -0
  444. package/dist/web/lib/browserNotifications.mjs.map +1 -0
  445. package/dist/web/lib/browserTelemetry.cjs +158 -0
  446. package/dist/web/lib/browserTelemetry.cjs.map +1 -0
  447. package/dist/web/lib/browserTelemetry.d.mts +28 -0
  448. package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
  449. package/dist/web/lib/browserTelemetry.mjs +154 -0
  450. package/dist/web/lib/browserTelemetry.mjs.map +1 -0
  451. package/dist/web/lib/commands.cjs +176 -0
  452. package/dist/web/lib/commands.cjs.map +1 -0
  453. package/dist/web/lib/commands.d.mts +53 -0
  454. package/dist/web/lib/commands.d.mts.map +1 -0
  455. package/dist/web/lib/commands.mjs +153 -0
  456. package/dist/web/lib/commands.mjs.map +1 -0
  457. package/dist/web/lib/composerSubmissions.cjs +20 -0
  458. package/dist/web/lib/composerSubmissions.cjs.map +1 -0
  459. package/dist/web/lib/composerSubmissions.d.mts +7 -0
  460. package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
  461. package/dist/web/lib/composerSubmissions.mjs +19 -0
  462. package/dist/web/lib/composerSubmissions.mjs.map +1 -0
  463. package/dist/web/lib/composition.cjs +403 -0
  464. package/dist/web/lib/composition.cjs.map +1 -0
  465. package/dist/web/lib/composition.d.mts +137 -0
  466. package/dist/web/lib/composition.d.mts.map +1 -0
  467. package/dist/web/lib/composition.mjs +392 -0
  468. package/dist/web/lib/composition.mjs.map +1 -0
  469. package/dist/web/lib/contextComposition.cjs +132 -0
  470. package/dist/web/lib/contextComposition.cjs.map +1 -0
  471. package/dist/web/lib/contextComposition.d.mts +75 -0
  472. package/dist/web/lib/contextComposition.d.mts.map +1 -0
  473. package/dist/web/lib/contextComposition.mjs +127 -0
  474. package/dist/web/lib/contextComposition.mjs.map +1 -0
  475. package/dist/web/lib/contextDetailApi.cjs +61 -0
  476. package/dist/web/lib/contextDetailApi.cjs.map +1 -0
  477. package/dist/web/lib/contextDetailApi.d.mts +12 -0
  478. package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
  479. package/dist/web/lib/contextDetailApi.mjs +61 -0
  480. package/dist/web/lib/contextDetailApi.mjs.map +1 -0
  481. package/dist/web/lib/dashboardRenderers.cjs +9 -0
  482. package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
  483. package/dist/web/lib/dashboardRenderers.d.mts +12 -0
  484. package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
  485. package/dist/web/lib/dashboardRenderers.mjs +9 -0
  486. package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
  487. package/dist/web/lib/dashboardRoute.cjs +27 -0
  488. package/dist/web/lib/dashboardRoute.cjs.map +1 -0
  489. package/dist/web/lib/dashboardRoute.d.mts +29 -0
  490. package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
  491. package/dist/web/lib/dashboardRoute.mjs +26 -0
  492. package/dist/web/lib/dashboardRoute.mjs.map +1 -0
  493. package/dist/web/lib/dashboardTranscript.cjs +15 -0
  494. package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
  495. package/dist/web/lib/dashboardTranscript.d.mts +6 -0
  496. package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
  497. package/dist/web/lib/dashboardTranscript.mjs +14 -0
  498. package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
  499. package/dist/web/lib/devProxyApi.cjs +74 -0
  500. package/dist/web/lib/devProxyApi.cjs.map +1 -0
  501. package/dist/web/lib/devProxyApi.d.mts +21 -0
  502. package/dist/web/lib/devProxyApi.d.mts.map +1 -0
  503. package/dist/web/lib/devProxyApi.mjs +72 -0
  504. package/dist/web/lib/devProxyApi.mjs.map +1 -0
  505. package/dist/web/lib/fileMentions.cjs +30 -0
  506. package/dist/web/lib/fileMentions.cjs.map +1 -0
  507. package/dist/web/lib/fileMentions.d.mts +13 -0
  508. package/dist/web/lib/fileMentions.d.mts.map +1 -0
  509. package/dist/web/lib/fileMentions.mjs +29 -0
  510. package/dist/web/lib/fileMentions.mjs.map +1 -0
  511. package/dist/web/lib/hubApi.cjs +283 -0
  512. package/dist/web/lib/hubApi.cjs.map +1 -0
  513. package/dist/web/lib/hubApi.d.mts +109 -0
  514. package/dist/web/lib/hubApi.d.mts.map +1 -0
  515. package/dist/web/lib/hubApi.mjs +268 -0
  516. package/dist/web/lib/hubApi.mjs.map +1 -0
  517. package/dist/web/lib/leaderTree.cjs +150 -0
  518. package/dist/web/lib/leaderTree.cjs.map +1 -0
  519. package/dist/web/lib/leaderTree.d.mts +41 -0
  520. package/dist/web/lib/leaderTree.d.mts.map +1 -0
  521. package/dist/web/lib/leaderTree.mjs +149 -0
  522. package/dist/web/lib/leaderTree.mjs.map +1 -0
  523. package/dist/web/lib/livePush.cjs +97 -0
  524. package/dist/web/lib/livePush.cjs.map +1 -0
  525. package/dist/web/lib/livePush.d.mts +10 -0
  526. package/dist/web/lib/livePush.d.mts.map +1 -0
  527. package/dist/web/lib/livePush.mjs +94 -0
  528. package/dist/web/lib/livePush.mjs.map +1 -0
  529. package/dist/web/lib/modelContextAdapter.cjs +63 -0
  530. package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
  531. package/dist/web/lib/modelContextAdapter.d.mts +11 -0
  532. package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
  533. package/dist/web/lib/modelContextAdapter.mjs +62 -0
  534. package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
  535. package/dist/web/lib/piTransport.cjs +103 -0
  536. package/dist/web/lib/piTransport.cjs.map +1 -0
  537. package/dist/web/lib/piTransport.d.mts +8 -0
  538. package/dist/web/lib/piTransport.d.mts.map +1 -0
  539. package/dist/web/lib/piTransport.mjs +102 -0
  540. package/dist/web/lib/piTransport.mjs.map +1 -0
  541. package/dist/web/lib/pluginCompositions.cjs +57 -0
  542. package/dist/web/lib/pluginCompositions.cjs.map +1 -0
  543. package/dist/web/lib/pluginCompositions.d.mts +37 -0
  544. package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
  545. package/dist/web/lib/pluginCompositions.mjs +52 -0
  546. package/dist/web/lib/pluginCompositions.mjs.map +1 -0
  547. package/dist/web/lib/pluginRegistry.cjs +675 -0
  548. package/dist/web/lib/pluginRegistry.cjs.map +1 -0
  549. package/dist/web/lib/pluginRegistry.d.mts +155 -0
  550. package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
  551. package/dist/web/lib/pluginRegistry.mjs +633 -0
  552. package/dist/web/lib/pluginRegistry.mjs.map +1 -0
  553. package/dist/web/lib/pluginScopes.cjs +48 -0
  554. package/dist/web/lib/pluginScopes.cjs.map +1 -0
  555. package/dist/web/lib/pluginScopes.d.mts +8 -0
  556. package/dist/web/lib/pluginScopes.d.mts.map +1 -0
  557. package/dist/web/lib/pluginScopes.mjs +47 -0
  558. package/dist/web/lib/pluginScopes.mjs.map +1 -0
  559. package/dist/web/lib/pluginSlotProps.cjs +83 -0
  560. package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
  561. package/dist/web/lib/pluginSlotProps.d.mts +21 -0
  562. package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
  563. package/dist/web/lib/pluginSlotProps.mjs +82 -0
  564. package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
  565. package/dist/web/lib/promptFocus.cjs +30 -0
  566. package/dist/web/lib/promptFocus.cjs.map +1 -0
  567. package/dist/web/lib/promptFocus.d.mts +7 -0
  568. package/dist/web/lib/promptFocus.d.mts.map +1 -0
  569. package/dist/web/lib/promptFocus.mjs +29 -0
  570. package/dist/web/lib/promptFocus.mjs.map +1 -0
  571. package/dist/web/lib/protocolHubSocket.cjs +107 -0
  572. package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
  573. package/dist/web/lib/protocolHubSocket.d.mts +18 -0
  574. package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
  575. package/dist/web/lib/protocolHubSocket.mjs +107 -0
  576. package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
  577. package/dist/web/lib/protocolTimeline.cjs +86 -0
  578. package/dist/web/lib/protocolTimeline.cjs.map +1 -0
  579. package/dist/web/lib/protocolTimeline.d.mts +9 -0
  580. package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
  581. package/dist/web/lib/protocolTimeline.mjs +85 -0
  582. package/dist/web/lib/protocolTimeline.mjs.map +1 -0
  583. package/dist/web/lib/qrMatrix.cjs +37 -0
  584. package/dist/web/lib/qrMatrix.cjs.map +1 -0
  585. package/dist/web/lib/qrMatrix.d.mts +5 -0
  586. package/dist/web/lib/qrMatrix.d.mts.map +1 -0
  587. package/dist/web/lib/qrMatrix.mjs +35 -0
  588. package/dist/web/lib/qrMatrix.mjs.map +1 -0
  589. package/dist/web/lib/remoteApi.cjs +100 -0
  590. package/dist/web/lib/remoteApi.cjs.map +1 -0
  591. package/dist/web/lib/remoteApi.d.mts +45 -0
  592. package/dist/web/lib/remoteApi.d.mts.map +1 -0
  593. package/dist/web/lib/remoteApi.mjs +92 -0
  594. package/dist/web/lib/remoteApi.mjs.map +1 -0
  595. package/dist/web/lib/sealedSession.cjs +81 -0
  596. package/dist/web/lib/sealedSession.cjs.map +1 -0
  597. package/dist/web/lib/sealedSession.d.mts +24 -0
  598. package/dist/web/lib/sealedSession.d.mts.map +1 -0
  599. package/dist/web/lib/sealedSession.mjs +75 -0
  600. package/dist/web/lib/sealedSession.mjs.map +1 -0
  601. package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
  602. package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
  603. package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
  604. package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
  605. package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
  606. package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
  607. package/dist/web/lib/sessionAsset.cjs +45 -0
  608. package/dist/web/lib/sessionAsset.cjs.map +1 -0
  609. package/dist/web/lib/sessionAsset.d.mts +17 -0
  610. package/dist/web/lib/sessionAsset.d.mts.map +1 -0
  611. package/dist/web/lib/sessionAsset.mjs +44 -0
  612. package/dist/web/lib/sessionAsset.mjs.map +1 -0
  613. package/dist/web/lib/sessionAvatar.cjs +18 -0
  614. package/dist/web/lib/sessionAvatar.cjs.map +1 -0
  615. package/dist/web/lib/sessionAvatar.d.mts +10 -0
  616. package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
  617. package/dist/web/lib/sessionAvatar.mjs +18 -0
  618. package/dist/web/lib/sessionAvatar.mjs.map +1 -0
  619. package/dist/web/lib/sessionMcpApi.cjs +120 -0
  620. package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
  621. package/dist/web/lib/sessionMcpApi.d.mts +27 -0
  622. package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
  623. package/dist/web/lib/sessionMcpApi.mjs +114 -0
  624. package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
  625. package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
  626. package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
  627. package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
  628. package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
  629. package/dist/web/lib/sessionModel.cjs +970 -0
  630. package/dist/web/lib/sessionModel.cjs.map +1 -0
  631. package/dist/web/lib/sessionModel.d.mts +254 -0
  632. package/dist/web/lib/sessionModel.d.mts.map +1 -0
  633. package/dist/web/lib/sessionModel.mjs +958 -0
  634. package/dist/web/lib/sessionModel.mjs.map +1 -0
  635. package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
  636. package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
  637. package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
  638. package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
  639. package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
  640. package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
  641. package/dist/web/lib/sessionRailModel.cjs +107 -0
  642. package/dist/web/lib/sessionRailModel.cjs.map +1 -0
  643. package/dist/web/lib/sessionRailModel.d.mts +38 -0
  644. package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
  645. package/dist/web/lib/sessionRailModel.mjs +104 -0
  646. package/dist/web/lib/sessionRailModel.mjs.map +1 -0
  647. package/dist/web/lib/sessionSummary.cjs +58 -0
  648. package/dist/web/lib/sessionSummary.cjs.map +1 -0
  649. package/dist/web/lib/sessionSummary.d.mts +39 -0
  650. package/dist/web/lib/sessionSummary.d.mts.map +1 -0
  651. package/dist/web/lib/sessionSummary.mjs +54 -0
  652. package/dist/web/lib/sessionSummary.mjs.map +1 -0
  653. package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
  654. package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
  655. package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
  656. package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
  657. package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
  658. package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
  659. package/dist/web/lib/settingsApi.cjs +237 -0
  660. package/dist/web/lib/settingsApi.cjs.map +1 -0
  661. package/dist/web/lib/settingsApi.d.mts +57 -0
  662. package/dist/web/lib/settingsApi.d.mts.map +1 -0
  663. package/dist/web/lib/settingsApi.mjs +230 -0
  664. package/dist/web/lib/settingsApi.mjs.map +1 -0
  665. package/dist/web/lib/settingsDraft.cjs +48 -0
  666. package/dist/web/lib/settingsDraft.cjs.map +1 -0
  667. package/dist/web/lib/settingsDraft.d.mts +28 -0
  668. package/dist/web/lib/settingsDraft.d.mts.map +1 -0
  669. package/dist/web/lib/settingsDraft.mjs +45 -0
  670. package/dist/web/lib/settingsDraft.mjs.map +1 -0
  671. package/dist/web/lib/settingsSections.cjs +108 -0
  672. package/dist/web/lib/settingsSections.cjs.map +1 -0
  673. package/dist/web/lib/settingsSections.d.mts +36 -0
  674. package/dist/web/lib/settingsSections.d.mts.map +1 -0
  675. package/dist/web/lib/settingsSections.mjs +105 -0
  676. package/dist/web/lib/settingsSections.mjs.map +1 -0
  677. package/dist/web/lib/statusLine.cjs +82 -0
  678. package/dist/web/lib/statusLine.cjs.map +1 -0
  679. package/dist/web/lib/statusLine.d.mts +27 -0
  680. package/dist/web/lib/statusLine.d.mts.map +1 -0
  681. package/dist/web/lib/statusLine.mjs +79 -0
  682. package/dist/web/lib/statusLine.mjs.map +1 -0
  683. package/dist/web/lib/stepUp.cjs +41 -0
  684. package/dist/web/lib/stepUp.cjs.map +1 -0
  685. package/dist/web/lib/stepUp.d.mts +18 -0
  686. package/dist/web/lib/stepUp.d.mts.map +1 -0
  687. package/dist/web/lib/stepUp.mjs +41 -0
  688. package/dist/web/lib/stepUp.mjs.map +1 -0
  689. package/dist/web/lib/templateCatalog.cjs +123 -0
  690. package/dist/web/lib/templateCatalog.cjs.map +1 -0
  691. package/dist/web/lib/templateCatalog.d.mts +38 -0
  692. package/dist/web/lib/templateCatalog.d.mts.map +1 -0
  693. package/dist/web/lib/templateCatalog.mjs +118 -0
  694. package/dist/web/lib/templateCatalog.mjs.map +1 -0
  695. package/dist/web/lib/threadRenderer.cjs +25 -0
  696. package/dist/web/lib/threadRenderer.cjs.map +1 -0
  697. package/dist/web/lib/threadRenderer.d.mts +17 -0
  698. package/dist/web/lib/threadRenderer.d.mts.map +1 -0
  699. package/dist/web/lib/threadRenderer.mjs +23 -0
  700. package/dist/web/lib/threadRenderer.mjs.map +1 -0
  701. package/dist/web/lib/timelineGroups.cjs +83 -0
  702. package/dist/web/lib/timelineGroups.cjs.map +1 -0
  703. package/dist/web/lib/timelineGroups.d.mts +36 -0
  704. package/dist/web/lib/timelineGroups.d.mts.map +1 -0
  705. package/dist/web/lib/timelineGroups.mjs +81 -0
  706. package/dist/web/lib/timelineGroups.mjs.map +1 -0
  707. package/dist/web/lib/toolCompletionTabs.cjs +98 -0
  708. package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
  709. package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
  710. package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
  711. package/dist/web/lib/toolCompletionTabs.mjs +98 -0
  712. package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
  713. package/dist/web/lib/toolMessageProps.cjs +19 -0
  714. package/dist/web/lib/toolMessageProps.cjs.map +1 -0
  715. package/dist/web/lib/toolMessageProps.d.mts +7 -0
  716. package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
  717. package/dist/web/lib/toolMessageProps.mjs +19 -0
  718. package/dist/web/lib/toolMessageProps.mjs.map +1 -0
  719. package/dist/web/lib/toolPrompt.cjs +44 -0
  720. package/dist/web/lib/toolPrompt.cjs.map +1 -0
  721. package/dist/web/lib/toolPrompt.d.mts +34 -0
  722. package/dist/web/lib/toolPrompt.d.mts.map +1 -0
  723. package/dist/web/lib/toolPrompt.mjs +44 -0
  724. package/dist/web/lib/toolPrompt.mjs.map +1 -0
  725. package/dist/web/lib/transport.cjs +57 -0
  726. package/dist/web/lib/transport.cjs.map +1 -0
  727. package/dist/web/lib/transport.d.mts +40 -0
  728. package/dist/web/lib/transport.d.mts.map +1 -0
  729. package/dist/web/lib/transport.mjs +50 -0
  730. package/dist/web/lib/transport.mjs.map +1 -0
  731. package/dist/web/lib/useSessionMcp.cjs +65 -0
  732. package/dist/web/lib/useSessionMcp.cjs.map +1 -0
  733. package/dist/web/lib/useSessionMcp.d.mts +15 -0
  734. package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
  735. package/dist/web/lib/useSessionMcp.mjs +65 -0
  736. package/dist/web/lib/useSessionMcp.mjs.map +1 -0
  737. package/dist/web/lib/webauthnClient.cjs +110 -0
  738. package/dist/web/lib/webauthnClient.cjs.map +1 -0
  739. package/dist/web/lib/webauthnClient.d.mts +32 -0
  740. package/dist/web/lib/webauthnClient.d.mts.map +1 -0
  741. package/dist/web/lib/webauthnClient.mjs +106 -0
  742. package/dist/web/lib/webauthnClient.mjs.map +1 -0
  743. package/dist/web/lib/webmcpSimulator.cjs +105 -0
  744. package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
  745. package/dist/web/lib/webmcpSimulator.mjs +105 -0
  746. package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
  747. package/dist/web/stores/captureStore.cjs +137 -0
  748. package/dist/web/stores/captureStore.cjs.map +1 -0
  749. package/dist/web/stores/captureStore.d.mts +13 -0
  750. package/dist/web/stores/captureStore.d.mts.map +1 -0
  751. package/dist/web/stores/captureStore.mjs +133 -0
  752. package/dist/web/stores/captureStore.mjs.map +1 -0
  753. package/dist/web/stores/composerStore.cjs +390 -0
  754. package/dist/web/stores/composerStore.cjs.map +1 -0
  755. package/dist/web/stores/composerStore.d.mts +101 -0
  756. package/dist/web/stores/composerStore.d.mts.map +1 -0
  757. package/dist/web/stores/composerStore.mjs +370 -0
  758. package/dist/web/stores/composerStore.mjs.map +1 -0
  759. package/dist/web/stores/composerSubmissionStore.cjs +88 -0
  760. package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
  761. package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
  762. package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
  763. package/dist/web/stores/composerSubmissionStore.mjs +87 -0
  764. package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
  765. package/dist/web/stores/dashboardStateStore.cjs +35 -0
  766. package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
  767. package/dist/web/stores/dashboardStateStore.d.mts +11 -0
  768. package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
  769. package/dist/web/stores/dashboardStateStore.mjs +33 -0
  770. package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
  771. package/dist/web/stores/devProxyStore.cjs +76 -0
  772. package/dist/web/stores/devProxyStore.cjs.map +1 -0
  773. package/dist/web/stores/devProxyStore.d.mts +25 -0
  774. package/dist/web/stores/devProxyStore.d.mts.map +1 -0
  775. package/dist/web/stores/devProxyStore.mjs +73 -0
  776. package/dist/web/stores/devProxyStore.mjs.map +1 -0
  777. package/dist/web/stores/dialogDraftStore.cjs +38 -0
  778. package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
  779. package/dist/web/stores/dialogDraftStore.d.mts +13 -0
  780. package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
  781. package/dist/web/stores/dialogDraftStore.mjs +36 -0
  782. package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
  783. package/dist/web/stores/fileLinkModesStore.cjs +20 -0
  784. package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
  785. package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
  786. package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
  787. package/dist/web/stores/fileLinkModesStore.mjs +20 -0
  788. package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
  789. package/dist/web/stores/menuStore.cjs +85 -0
  790. package/dist/web/stores/menuStore.cjs.map +1 -0
  791. package/dist/web/stores/menuStore.d.mts +42 -0
  792. package/dist/web/stores/menuStore.d.mts.map +1 -0
  793. package/dist/web/stores/menuStore.mjs +79 -0
  794. package/dist/web/stores/menuStore.mjs.map +1 -0
  795. package/dist/web/stores/newSessionStore.cjs +93 -0
  796. package/dist/web/stores/newSessionStore.cjs.map +1 -0
  797. package/dist/web/stores/newSessionStore.d.mts +30 -0
  798. package/dist/web/stores/newSessionStore.d.mts.map +1 -0
  799. package/dist/web/stores/newSessionStore.mjs +86 -0
  800. package/dist/web/stores/newSessionStore.mjs.map +1 -0
  801. package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
  802. package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
  803. package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
  804. package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
  805. package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
  806. package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
  807. package/dist/web/stores/paletteStore.cjs +37 -0
  808. package/dist/web/stores/paletteStore.cjs.map +1 -0
  809. package/dist/web/stores/paletteStore.d.mts +14 -0
  810. package/dist/web/stores/paletteStore.d.mts.map +1 -0
  811. package/dist/web/stores/paletteStore.mjs +34 -0
  812. package/dist/web/stores/paletteStore.mjs.map +1 -0
  813. package/dist/web/stores/railDialogStore.cjs +105 -0
  814. package/dist/web/stores/railDialogStore.cjs.map +1 -0
  815. package/dist/web/stores/railDialogStore.d.mts +32 -0
  816. package/dist/web/stores/railDialogStore.d.mts.map +1 -0
  817. package/dist/web/stores/railDialogStore.mjs +97 -0
  818. package/dist/web/stores/railDialogStore.mjs.map +1 -0
  819. package/dist/web/stores/remoteAccessStore.cjs +216 -0
  820. package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
  821. package/dist/web/stores/remoteAccessStore.d.mts +48 -0
  822. package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
  823. package/dist/web/stores/remoteAccessStore.mjs +202 -0
  824. package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
  825. package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
  826. package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
  827. package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
  828. package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
  829. package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
  830. package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
  831. package/dist/web/stores/sessionStore.cjs +610 -0
  832. package/dist/web/stores/sessionStore.cjs.map +1 -0
  833. package/dist/web/stores/sessionStore.d.mts +116 -0
  834. package/dist/web/stores/sessionStore.d.mts.map +1 -0
  835. package/dist/web/stores/sessionStore.mjs +568 -0
  836. package/dist/web/stores/sessionStore.mjs.map +1 -0
  837. package/dist/web/stores/sessionsStore.cjs +272 -0
  838. package/dist/web/stores/sessionsStore.cjs.map +1 -0
  839. package/dist/web/stores/sessionsStore.d.mts +74 -0
  840. package/dist/web/stores/sessionsStore.d.mts.map +1 -0
  841. package/dist/web/stores/sessionsStore.mjs +257 -0
  842. package/dist/web/stores/sessionsStore.mjs.map +1 -0
  843. package/dist/web/stores/settingsDraftStore.cjs +138 -0
  844. package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
  845. package/dist/web/stores/settingsDraftStore.d.mts +27 -0
  846. package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
  847. package/dist/web/stores/settingsDraftStore.mjs +132 -0
  848. package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
  849. package/dist/web/stores/templateStore.cjs +136 -0
  850. package/dist/web/stores/templateStore.cjs.map +1 -0
  851. package/dist/web/stores/templateStore.d.mts +20 -0
  852. package/dist/web/stores/templateStore.d.mts.map +1 -0
  853. package/dist/web/stores/templateStore.mjs +131 -0
  854. package/dist/web/stores/templateStore.mjs.map +1 -0
  855. package/dist/web/stores/themeStore.cjs +42 -0
  856. package/dist/web/stores/themeStore.cjs.map +1 -0
  857. package/dist/web/stores/themeStore.d.mts +20 -0
  858. package/dist/web/stores/themeStore.d.mts.map +1 -0
  859. package/dist/web/stores/themeStore.mjs +39 -0
  860. package/dist/web/stores/themeStore.mjs.map +1 -0
  861. package/dist/web/stores/threadStore.cjs +122 -0
  862. package/dist/web/stores/threadStore.cjs.map +1 -0
  863. package/dist/web/stores/threadStore.d.mts +24 -0
  864. package/dist/web/stores/threadStore.d.mts.map +1 -0
  865. package/dist/web/stores/threadStore.mjs +114 -0
  866. package/dist/web/stores/threadStore.mjs.map +1 -0
  867. package/dist/web/stores/toolPromptStore.cjs +15 -0
  868. package/dist/web/stores/toolPromptStore.cjs.map +1 -0
  869. package/dist/web/stores/toolPromptStore.d.mts +23 -0
  870. package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
  871. package/dist/web/stores/toolPromptStore.mjs +14 -0
  872. package/dist/web/stores/toolPromptStore.mjs.map +1 -0
  873. package/dist/web/stores/transientTabsStore.cjs +66 -0
  874. package/dist/web/stores/transientTabsStore.cjs.map +1 -0
  875. package/dist/web/stores/transientTabsStore.d.mts +21 -0
  876. package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
  877. package/dist/web/stores/transientTabsStore.mjs +59 -0
  878. package/dist/web/stores/transientTabsStore.mjs.map +1 -0
  879. package/dist/web/stores/uiStore.cjs +47 -0
  880. package/dist/web/stores/uiStore.cjs.map +1 -0
  881. package/dist/web/stores/uiStore.d.mts +18 -0
  882. package/dist/web/stores/uiStore.d.mts.map +1 -0
  883. package/dist/web/stores/uiStore.mjs +45 -0
  884. package/dist/web/stores/uiStore.mjs.map +1 -0
  885. package/dist/web/stores/useOpenTab.cjs +31 -0
  886. package/dist/web/stores/useOpenTab.cjs.map +1 -0
  887. package/dist/web/stores/useOpenTab.d.mts +9 -0
  888. package/dist/web/stores/useOpenTab.d.mts.map +1 -0
  889. package/dist/web/stores/useOpenTab.mjs +31 -0
  890. package/dist/web/stores/useOpenTab.mjs.map +1 -0
  891. package/dist/web/stores/usePluginSlotProps.cjs +115 -0
  892. package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
  893. package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
  894. package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
  895. package/dist/web/stores/usePluginSlotProps.mjs +115 -0
  896. package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
  897. package/dist/web/stores/useToolPrompt.cjs +42 -0
  898. package/dist/web/stores/useToolPrompt.cjs.map +1 -0
  899. package/dist/web/stores/useToolPrompt.d.mts +14 -0
  900. package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
  901. package/dist/web/stores/useToolPrompt.mjs +42 -0
  902. package/dist/web/stores/useToolPrompt.mjs.map +1 -0
  903. package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
  904. package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
  905. package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
  906. package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
  907. package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
  908. package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
  909. package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
  910. package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
  911. package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
  912. package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
  913. package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
  914. package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
  915. package/dist/web/stores/workspacesStore.cjs +83 -0
  916. package/dist/web/stores/workspacesStore.cjs.map +1 -0
  917. package/dist/web/stores/workspacesStore.d.mts +17 -0
  918. package/dist/web/stores/workspacesStore.d.mts.map +1 -0
  919. package/dist/web/stores/workspacesStore.mjs +78 -0
  920. package/dist/web/stores/workspacesStore.mjs.map +1 -0
  921. package/llms.txt +3 -0
  922. package/package.json +107 -0
  923. package/styles/dashboard.css +2 -0
  924. package/styles/preview.css +3 -0
@@ -0,0 +1,135 @@
1
+ const require_settingsSections = require("../../lib/settingsSections.cjs");
2
+ let react = require("react");
3
+ let _tanstack_react_router = require("@tanstack/react-router");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
6
+ //#region src/web/features/settings/SettingsMenu.tsx
7
+ function SectionLinks({ active, sections, onNavigate, repositoryId }) {
8
+ return sections.map((section) => {
9
+ const current = section.id === active;
10
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.NavTab, {
11
+ asChild: true,
12
+ active: current,
13
+ className: "relative min-h-9 min-w-0 rounded-md px-3 py-2 text-doom-text focus-visible:ring-2 focus-visible:ring-doom-green data-[active=true]:bg-doom-panel data-[active=true]:font-semibold data-[active=true]:text-doom-hi data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:left-0 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-doom-green",
14
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_router.Link, {
15
+ to: "/settings/$section",
16
+ params: { section: section.id },
17
+ search: { workspace: repositoryId },
18
+ "data-testid": `settings-section-${section.id}`,
19
+ "aria-current": current ? "page" : void 0,
20
+ onClick: onNavigate,
21
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
22
+ className: "block truncate first-letter:uppercase",
23
+ children: section.label
24
+ })
25
+ })
26
+ }, section.id);
27
+ });
28
+ }
29
+ /** Host pages first, then what plugins added, so a reader knows who owns a setting. */
30
+ function SectionGroups(props) {
31
+ const { workspace, sections, ...links } = props;
32
+ const fromPlugin = (section) => section.contribution !== void 0 || section.panel !== void 0 || section.repositoryPanel !== void 0;
33
+ return [{
34
+ label: workspace,
35
+ sections: sections.filter((section) => !fromPlugin(section))
36
+ }, {
37
+ label: "from plugins",
38
+ sections: sections.filter(fromPlugin)
39
+ }].filter((group) => group.sections.length > 0).map((group, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40
+ className: `flex flex-col gap-0.5 ${index > 0 ? "pt-5" : ""}`,
41
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SectionLabel, {
42
+ className: "px-3 pb-2",
43
+ children: group.label
44
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SectionLinks, {
45
+ ...links,
46
+ sections: group.sections
47
+ })]
48
+ }, group.label));
49
+ }
50
+ function SettingsMenu({ active, workspace, repositoryId }) {
51
+ const [open, setOpen] = (0, react.useState)(false);
52
+ const sections = require_settingsSections.settingsSections(workspace);
53
+ const current = sections.find((section) => section.id === active) ?? sections[0];
54
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
55
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
56
+ className: "shrink-0 border-b border-doom-border bg-doom-panel/40 p-2 lg:hidden",
57
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.Button, {
58
+ variant: "outline",
59
+ size: "sm",
60
+ "data-testid": "settings-menu-open",
61
+ "aria-haspopup": "dialog",
62
+ "aria-expanded": open,
63
+ onClick: () => setOpen(true),
64
+ className: "h-auto w-full justify-between gap-3 px-3 py-2 text-left whitespace-normal",
65
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
66
+ className: "flex min-w-0 items-center gap-2.5",
67
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.GearIcon, { className: "h-3.5 w-3.5 shrink-0 text-doom-green" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
68
+ className: "flex min-w-0 flex-col gap-0.5",
69
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
70
+ className: "truncate text-base font-medium text-doom-hi first-letter:uppercase",
71
+ children: current?.label ?? workspace
72
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
73
+ className: "truncate text-sm font-normal text-doom-dim",
74
+ children: current?.detail
75
+ })]
76
+ })]
77
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.ChevronUpIcon, { className: "h-3.5 w-3.5 shrink-0 text-doom-faint" })]
78
+ })
79
+ }),
80
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
81
+ "data-testid": "settings-menu",
82
+ "aria-label": `${workspace} settings sections`,
83
+ className: "hidden w-56 shrink-0 flex-col overflow-y-auto border-r border-doom-border-soft px-3 py-6 lg:flex",
84
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SectionGroups, {
85
+ active,
86
+ workspace,
87
+ sections,
88
+ repositoryId
89
+ })
90
+ }),
91
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Dialog, {
92
+ open,
93
+ onOpenChange: setOpen,
94
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.DialogContent, {
95
+ width: "lg",
96
+ "data-testid": "settings-menu-sheet",
97
+ "aria-describedby": void 0,
98
+ className: "top-auto bottom-0 left-0 max-h-[min(72dvh,560px)] !w-full !max-w-none translate-x-0 translate-y-0 rounded-t-xl rounded-b-none border-x-0 border-b-0 data-[state=open]:animate-none lg:hidden",
99
+ children: [
100
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
101
+ "aria-hidden": true,
102
+ className: "mx-auto mt-2 h-1 w-10 shrink-0 rounded-full bg-doom-border"
103
+ }),
104
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.DialogHeader, {
105
+ dismissible: true,
106
+ closeLabel: "close settings menu",
107
+ className: "py-2.5",
108
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.DialogTitle, {
109
+ className: "first-letter:uppercase",
110
+ children: [workspace, " settings"]
111
+ })
112
+ }),
113
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.DialogBody, {
114
+ className: "gap-1 p-2 pb-[max(0.75rem,env(safe-area-inset-bottom))]",
115
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
116
+ "aria-label": `${workspace} settings sections`,
117
+ className: "flex flex-col",
118
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SectionGroups, {
119
+ active,
120
+ workspace,
121
+ sections,
122
+ repositoryId,
123
+ onNavigate: () => setOpen(false)
124
+ })
125
+ })
126
+ })
127
+ ]
128
+ })
129
+ })
130
+ ] });
131
+ }
132
+ //#endregion
133
+ exports.SettingsMenu = SettingsMenu;
134
+
135
+ //# sourceMappingURL=SettingsMenu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.cjs","names":["NavTab","Link","SectionLabel","useState","settingsSections","Button","GearIcon","ChevronUpIcon","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody"],"sources":["../../../../src/web/features/settings/SettingsMenu.tsx"],"sourcesContent":["import {\n Button,\n ChevronUpIcon,\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n GearIcon,\n NavTab,\n SectionLabel,\n} from '@agimon-ai/po-web-components';\nimport { Link } from '@tanstack/react-router';\nimport { useState } from 'react';\n\nimport { settingsSections, type SettingsSection, type SettingsWorkspace } from '../../lib/settingsSections';\n\nfunction SectionLinks({\n active,\n sections,\n onNavigate,\n repositoryId,\n}: {\n active: string | undefined;\n sections: readonly SettingsSection[];\n onNavigate?: () => void;\n repositoryId?: string;\n}) {\n return sections.map((section) => {\n const current = section.id === active;\n return (\n <NavTab\n key={section.id}\n asChild\n active={current}\n className=\"relative min-h-9 min-w-0 rounded-md px-3 py-2 text-doom-text focus-visible:ring-2 focus-visible:ring-doom-green data-[active=true]:bg-doom-panel data-[active=true]:font-semibold data-[active=true]:text-doom-hi data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:left-0 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-doom-green\"\n >\n <Link\n to=\"/settings/$section\"\n params={{ section: section.id }}\n search={{ workspace: repositoryId }}\n data-testid={`settings-section-${section.id}`}\n aria-current={current ? 'page' : undefined}\n onClick={onNavigate}\n >\n <span className=\"block truncate first-letter:uppercase\">{section.label}</span>\n </Link>\n </NavTab>\n );\n });\n}\n\n/** Host pages first, then what plugins added, so a reader knows who owns a setting. */\nfunction SectionGroups(props: {\n active: string | undefined;\n workspace: SettingsWorkspace;\n sections: readonly SettingsSection[];\n onNavigate?: () => void;\n repositoryId?: string;\n}) {\n const { workspace, sections, ...links } = props;\n const fromPlugin = (section: SettingsSection) =>\n section.contribution !== undefined || section.panel !== undefined || section.repositoryPanel !== undefined;\n const groups = [\n { label: workspace, sections: sections.filter((section) => !fromPlugin(section)) },\n { label: 'from plugins', sections: sections.filter(fromPlugin) },\n ].filter((group) => group.sections.length > 0);\n return groups.map((group, index) => (\n <div key={group.label} className={`flex flex-col gap-0.5 ${index > 0 ? 'pt-5' : ''}`}>\n <SectionLabel className=\"px-3 pb-2\">{group.label}</SectionLabel>\n <SectionLinks {...links} sections={group.sections} />\n </div>\n ));\n}\n\nexport function SettingsMenu({\n active,\n workspace,\n repositoryId,\n}: {\n active: string | undefined;\n workspace: SettingsWorkspace;\n repositoryId?: string;\n}) {\n const [open, setOpen] = useState(false);\n const sections = settingsSections(workspace);\n const current = sections.find((section) => section.id === active) ?? sections[0];\n\n return (\n <>\n <div className=\"shrink-0 border-b border-doom-border bg-doom-panel/40 p-2 lg:hidden\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-testid=\"settings-menu-open\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n className=\"h-auto w-full justify-between gap-3 px-3 py-2 text-left whitespace-normal\"\n >\n <span className=\"flex min-w-0 items-center gap-2.5\">\n <GearIcon className=\"h-3.5 w-3.5 shrink-0 text-doom-green\" />\n <span className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-base font-medium text-doom-hi first-letter:uppercase\">\n {current?.label ?? workspace}\n </span>\n <span className=\"truncate text-sm font-normal text-doom-dim\">{current?.detail}</span>\n </span>\n </span>\n <ChevronUpIcon className=\"h-3.5 w-3.5 shrink-0 text-doom-faint\" />\n </Button>\n </div>\n\n <nav\n data-testid=\"settings-menu\"\n aria-label={`${workspace} settings sections`}\n className=\"hidden w-56 shrink-0 flex-col overflow-y-auto border-r border-doom-border-soft px-3 py-6 lg:flex\"\n >\n <SectionGroups active={active} workspace={workspace} sections={sections} repositoryId={repositoryId} />\n </nav>\n\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent\n width=\"lg\"\n data-testid=\"settings-menu-sheet\"\n aria-describedby={undefined}\n className=\"top-auto bottom-0 left-0 max-h-[min(72dvh,560px)] !w-full !max-w-none translate-x-0 translate-y-0 rounded-t-xl rounded-b-none border-x-0 border-b-0 data-[state=open]:animate-none lg:hidden\"\n >\n <span aria-hidden className=\"mx-auto mt-2 h-1 w-10 shrink-0 rounded-full bg-doom-border\" />\n <DialogHeader dismissible closeLabel=\"close settings menu\" className=\"py-2.5\">\n <DialogTitle className=\"first-letter:uppercase\">{workspace} settings</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"gap-1 p-2 pb-[max(0.75rem,env(safe-area-inset-bottom))]\">\n <nav aria-label={`${workspace} settings sections`} className=\"flex flex-col\">\n <SectionGroups\n active={active}\n workspace={workspace}\n sections={sections}\n repositoryId={repositoryId}\n onNavigate={() => setOpen(false)}\n />\n </nav>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SettingsWorkspace } from "../../lib/settingsSections.mjs";
2
+ //#region src/web/features/settings/SettingsMenu.d.ts
3
+ export declare function SettingsMenu({ active, workspace, repositoryId }: {
4
+ active: string | undefined;
5
+ workspace: SettingsWorkspace;
6
+ repositoryId?: string;
7
+ }): import("react").JSX.Element;
8
+ //#endregion
9
+ //# sourceMappingURL=SettingsMenu.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.d.mts","names":[],"sources":["../../../../src/web/features/settings/SettingsMenu.tsx"],"mappings":";;wBA2EgB,eACd,QACA,WACA;EAEA;EACA,WAAW;EACX;oBACD,IAAA"}
@@ -0,0 +1,135 @@
1
+ import { settingsSections } from "../../lib/settingsSections.mjs";
2
+ import { useState } from "react";
3
+ import { Link } from "@tanstack/react-router";
4
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
+ import { Button, ChevronUpIcon, Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, GearIcon, NavTab, SectionLabel } from "@agimon-ai/po-web-components";
6
+ //#region src/web/features/settings/SettingsMenu.tsx
7
+ function SectionLinks({ active, sections, onNavigate, repositoryId }) {
8
+ return sections.map((section) => {
9
+ const current = section.id === active;
10
+ return /* @__PURE__ */ jsx(NavTab, {
11
+ asChild: true,
12
+ active: current,
13
+ className: "relative min-h-9 min-w-0 rounded-md px-3 py-2 text-doom-text focus-visible:ring-2 focus-visible:ring-doom-green data-[active=true]:bg-doom-panel data-[active=true]:font-semibold data-[active=true]:text-doom-hi data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:left-0 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-doom-green",
14
+ children: /* @__PURE__ */ jsx(Link, {
15
+ to: "/settings/$section",
16
+ params: { section: section.id },
17
+ search: { workspace: repositoryId },
18
+ "data-testid": `settings-section-${section.id}`,
19
+ "aria-current": current ? "page" : void 0,
20
+ onClick: onNavigate,
21
+ children: /* @__PURE__ */ jsx("span", {
22
+ className: "block truncate first-letter:uppercase",
23
+ children: section.label
24
+ })
25
+ })
26
+ }, section.id);
27
+ });
28
+ }
29
+ /** Host pages first, then what plugins added, so a reader knows who owns a setting. */
30
+ function SectionGroups(props) {
31
+ const { workspace, sections, ...links } = props;
32
+ const fromPlugin = (section) => section.contribution !== void 0 || section.panel !== void 0 || section.repositoryPanel !== void 0;
33
+ return [{
34
+ label: workspace,
35
+ sections: sections.filter((section) => !fromPlugin(section))
36
+ }, {
37
+ label: "from plugins",
38
+ sections: sections.filter(fromPlugin)
39
+ }].filter((group) => group.sections.length > 0).map((group, index) => /* @__PURE__ */ jsxs("div", {
40
+ className: `flex flex-col gap-0.5 ${index > 0 ? "pt-5" : ""}`,
41
+ children: [/* @__PURE__ */ jsx(SectionLabel, {
42
+ className: "px-3 pb-2",
43
+ children: group.label
44
+ }), /* @__PURE__ */ jsx(SectionLinks, {
45
+ ...links,
46
+ sections: group.sections
47
+ })]
48
+ }, group.label));
49
+ }
50
+ function SettingsMenu({ active, workspace, repositoryId }) {
51
+ const [open, setOpen] = useState(false);
52
+ const sections = settingsSections(workspace);
53
+ const current = sections.find((section) => section.id === active) ?? sections[0];
54
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
55
+ /* @__PURE__ */ jsx("div", {
56
+ className: "shrink-0 border-b border-doom-border bg-doom-panel/40 p-2 lg:hidden",
57
+ children: /* @__PURE__ */ jsxs(Button, {
58
+ variant: "outline",
59
+ size: "sm",
60
+ "data-testid": "settings-menu-open",
61
+ "aria-haspopup": "dialog",
62
+ "aria-expanded": open,
63
+ onClick: () => setOpen(true),
64
+ className: "h-auto w-full justify-between gap-3 px-3 py-2 text-left whitespace-normal",
65
+ children: [/* @__PURE__ */ jsxs("span", {
66
+ className: "flex min-w-0 items-center gap-2.5",
67
+ children: [/* @__PURE__ */ jsx(GearIcon, { className: "h-3.5 w-3.5 shrink-0 text-doom-green" }), /* @__PURE__ */ jsxs("span", {
68
+ className: "flex min-w-0 flex-col gap-0.5",
69
+ children: [/* @__PURE__ */ jsx("span", {
70
+ className: "truncate text-base font-medium text-doom-hi first-letter:uppercase",
71
+ children: current?.label ?? workspace
72
+ }), /* @__PURE__ */ jsx("span", {
73
+ className: "truncate text-sm font-normal text-doom-dim",
74
+ children: current?.detail
75
+ })]
76
+ })]
77
+ }), /* @__PURE__ */ jsx(ChevronUpIcon, { className: "h-3.5 w-3.5 shrink-0 text-doom-faint" })]
78
+ })
79
+ }),
80
+ /* @__PURE__ */ jsx("nav", {
81
+ "data-testid": "settings-menu",
82
+ "aria-label": `${workspace} settings sections`,
83
+ className: "hidden w-56 shrink-0 flex-col overflow-y-auto border-r border-doom-border-soft px-3 py-6 lg:flex",
84
+ children: /* @__PURE__ */ jsx(SectionGroups, {
85
+ active,
86
+ workspace,
87
+ sections,
88
+ repositoryId
89
+ })
90
+ }),
91
+ /* @__PURE__ */ jsx(Dialog, {
92
+ open,
93
+ onOpenChange: setOpen,
94
+ children: /* @__PURE__ */ jsxs(DialogContent, {
95
+ width: "lg",
96
+ "data-testid": "settings-menu-sheet",
97
+ "aria-describedby": void 0,
98
+ className: "top-auto bottom-0 left-0 max-h-[min(72dvh,560px)] !w-full !max-w-none translate-x-0 translate-y-0 rounded-t-xl rounded-b-none border-x-0 border-b-0 data-[state=open]:animate-none lg:hidden",
99
+ children: [
100
+ /* @__PURE__ */ jsx("span", {
101
+ "aria-hidden": true,
102
+ className: "mx-auto mt-2 h-1 w-10 shrink-0 rounded-full bg-doom-border"
103
+ }),
104
+ /* @__PURE__ */ jsx(DialogHeader, {
105
+ dismissible: true,
106
+ closeLabel: "close settings menu",
107
+ className: "py-2.5",
108
+ children: /* @__PURE__ */ jsxs(DialogTitle, {
109
+ className: "first-letter:uppercase",
110
+ children: [workspace, " settings"]
111
+ })
112
+ }),
113
+ /* @__PURE__ */ jsx(DialogBody, {
114
+ className: "gap-1 p-2 pb-[max(0.75rem,env(safe-area-inset-bottom))]",
115
+ children: /* @__PURE__ */ jsx("nav", {
116
+ "aria-label": `${workspace} settings sections`,
117
+ className: "flex flex-col",
118
+ children: /* @__PURE__ */ jsx(SectionGroups, {
119
+ active,
120
+ workspace,
121
+ sections,
122
+ repositoryId,
123
+ onNavigate: () => setOpen(false)
124
+ })
125
+ })
126
+ })
127
+ ]
128
+ })
129
+ })
130
+ ] });
131
+ }
132
+ //#endregion
133
+ export { SettingsMenu };
134
+
135
+ //# sourceMappingURL=SettingsMenu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.mjs","names":[],"sources":["../../../../src/web/features/settings/SettingsMenu.tsx"],"sourcesContent":["import {\n Button,\n ChevronUpIcon,\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n GearIcon,\n NavTab,\n SectionLabel,\n} from '@agimon-ai/po-web-components';\nimport { Link } from '@tanstack/react-router';\nimport { useState } from 'react';\n\nimport { settingsSections, type SettingsSection, type SettingsWorkspace } from '../../lib/settingsSections';\n\nfunction SectionLinks({\n active,\n sections,\n onNavigate,\n repositoryId,\n}: {\n active: string | undefined;\n sections: readonly SettingsSection[];\n onNavigate?: () => void;\n repositoryId?: string;\n}) {\n return sections.map((section) => {\n const current = section.id === active;\n return (\n <NavTab\n key={section.id}\n asChild\n active={current}\n className=\"relative min-h-9 min-w-0 rounded-md px-3 py-2 text-doom-text focus-visible:ring-2 focus-visible:ring-doom-green data-[active=true]:bg-doom-panel data-[active=true]:font-semibold data-[active=true]:text-doom-hi data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:left-0 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-doom-green\"\n >\n <Link\n to=\"/settings/$section\"\n params={{ section: section.id }}\n search={{ workspace: repositoryId }}\n data-testid={`settings-section-${section.id}`}\n aria-current={current ? 'page' : undefined}\n onClick={onNavigate}\n >\n <span className=\"block truncate first-letter:uppercase\">{section.label}</span>\n </Link>\n </NavTab>\n );\n });\n}\n\n/** Host pages first, then what plugins added, so a reader knows who owns a setting. */\nfunction SectionGroups(props: {\n active: string | undefined;\n workspace: SettingsWorkspace;\n sections: readonly SettingsSection[];\n onNavigate?: () => void;\n repositoryId?: string;\n}) {\n const { workspace, sections, ...links } = props;\n const fromPlugin = (section: SettingsSection) =>\n section.contribution !== undefined || section.panel !== undefined || section.repositoryPanel !== undefined;\n const groups = [\n { label: workspace, sections: sections.filter((section) => !fromPlugin(section)) },\n { label: 'from plugins', sections: sections.filter(fromPlugin) },\n ].filter((group) => group.sections.length > 0);\n return groups.map((group, index) => (\n <div key={group.label} className={`flex flex-col gap-0.5 ${index > 0 ? 'pt-5' : ''}`}>\n <SectionLabel className=\"px-3 pb-2\">{group.label}</SectionLabel>\n <SectionLinks {...links} sections={group.sections} />\n </div>\n ));\n}\n\nexport function SettingsMenu({\n active,\n workspace,\n repositoryId,\n}: {\n active: string | undefined;\n workspace: SettingsWorkspace;\n repositoryId?: string;\n}) {\n const [open, setOpen] = useState(false);\n const sections = settingsSections(workspace);\n const current = sections.find((section) => section.id === active) ?? sections[0];\n\n return (\n <>\n <div className=\"shrink-0 border-b border-doom-border bg-doom-panel/40 p-2 lg:hidden\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-testid=\"settings-menu-open\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n className=\"h-auto w-full justify-between gap-3 px-3 py-2 text-left whitespace-normal\"\n >\n <span className=\"flex min-w-0 items-center gap-2.5\">\n <GearIcon className=\"h-3.5 w-3.5 shrink-0 text-doom-green\" />\n <span className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-base font-medium text-doom-hi first-letter:uppercase\">\n {current?.label ?? workspace}\n </span>\n <span className=\"truncate text-sm font-normal text-doom-dim\">{current?.detail}</span>\n </span>\n </span>\n <ChevronUpIcon className=\"h-3.5 w-3.5 shrink-0 text-doom-faint\" />\n </Button>\n </div>\n\n <nav\n data-testid=\"settings-menu\"\n aria-label={`${workspace} settings sections`}\n className=\"hidden w-56 shrink-0 flex-col overflow-y-auto border-r border-doom-border-soft px-3 py-6 lg:flex\"\n >\n <SectionGroups active={active} workspace={workspace} sections={sections} repositoryId={repositoryId} />\n </nav>\n\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent\n width=\"lg\"\n data-testid=\"settings-menu-sheet\"\n aria-describedby={undefined}\n className=\"top-auto bottom-0 left-0 max-h-[min(72dvh,560px)] !w-full !max-w-none translate-x-0 translate-y-0 rounded-t-xl rounded-b-none border-x-0 border-b-0 data-[state=open]:animate-none lg:hidden\"\n >\n <span aria-hidden className=\"mx-auto mt-2 h-1 w-10 shrink-0 rounded-full bg-doom-border\" />\n <DialogHeader dismissible closeLabel=\"close settings menu\" className=\"py-2.5\">\n <DialogTitle className=\"first-letter:uppercase\">{workspace} settings</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"gap-1 p-2 pb-[max(0.75rem,env(safe-area-inset-bottom))]\">\n <nav aria-label={`${workspace} settings sections`} className=\"flex flex-col\">\n <SectionGroups\n active={active}\n workspace={workspace}\n sections={sections}\n repositoryId={repositoryId}\n onNavigate={() => setOpen(false)}\n />\n </nav>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ const require_sealedSession = require("../../lib/sealedSession.cjs");
2
+ const require_stepUp = require("../../lib/stepUp.cjs");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
5
+ //#region src/web/features/settings/SettingsPanelHost.tsx
6
+ /**
7
+ * The frame around a settings page a package draws itself.
8
+ *
9
+ * The host keeps the heading here rather than leaving it to the plugin, so a
10
+ * self-drawn page carries the same label and detail the menu showed and the
11
+ * reader does not have to trust each package to repeat them. Everything below
12
+ * the heading belongs to the package.
13
+ *
14
+ * The transport is the host's for the same reason the repository panel's is:
15
+ * only the host knows whether the page is being read over a tunnel, and a
16
+ * plugin calling bare fetch would send plaintext to the relay.
17
+ */
18
+ const requestThroughSealedSession = (input, init) => require_sealedSession.sealedHttpSession.fetch(input, init);
19
+ function SettingsPanelHost({ panel }) {
20
+ const Panel = panel.component;
21
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsPage, {
22
+ "data-testid": `settings-panel-${panel.id}`,
23
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsTitle, { children: panel.label }), panel.detail ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsDescription, { children: panel.detail }) : null] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Panel, {
24
+ request: requestThroughSealedSession,
25
+ requestWithStepUp: require_stepUp.fetchWithStepUp
26
+ })]
27
+ });
28
+ }
29
+ //#endregion
30
+ exports.SettingsPanelHost = SettingsPanelHost;
31
+
32
+ //# sourceMappingURL=SettingsPanelHost.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanelHost.cjs","names":["sealedHttpSession","SettingsPage","SettingsHeader","SettingsTitle","SettingsDescription","fetchWithStepUp"],"sources":["../../../../src/web/features/settings/SettingsPanelHost.tsx"],"sourcesContent":["import { SettingsDescription, SettingsHeader, SettingsPage, SettingsTitle } from '@agimon-ai/po-web-components';\n\nimport type { InstalledSettingsPanel } from '../../lib/pluginRegistry';\nimport { sealedHttpSession } from '../../lib/sealedSession';\nimport { fetchWithStepUp } from '../../lib/stepUp';\n\n/**\n * The frame around a settings page a package draws itself.\n *\n * The host keeps the heading here rather than leaving it to the plugin, so a\n * self-drawn page carries the same label and detail the menu showed and the\n * reader does not have to trust each package to repeat them. Everything below\n * the heading belongs to the package.\n *\n * The transport is the host's for the same reason the repository panel's is:\n * only the host knows whether the page is being read over a tunnel, and a\n * plugin calling bare fetch would send plaintext to the relay.\n */\n\nconst requestThroughSealedSession = (input: string, init?: RequestInit): Promise<Response> =>\n sealedHttpSession.fetch(input, init);\n\ninterface SettingsPanelHostProps {\n panel: InstalledSettingsPanel;\n}\n\nexport function SettingsPanelHost({ panel }: SettingsPanelHostProps) {\n const Panel = panel.component;\n return (\n <SettingsPage data-testid={`settings-panel-${panel.id}`}>\n <SettingsHeader>\n <SettingsTitle>{panel.label}</SettingsTitle>\n {panel.detail ? <SettingsDescription>{panel.detail}</SettingsDescription> : null}\n </SettingsHeader>\n <Panel request={requestThroughSealedSession} requestWithStepUp={fetchWithStepUp} />\n </SettingsPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,+BAA+B,OAAe,SAClDA,sBAAAA,kBAAkB,MAAM,OAAO,IAAI;AAMrC,SAAgB,kBAAkB,EAAE,SAAiC;CACnE,MAAM,QAAQ,MAAM;CACpB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,cAAD;EAAc,eAAa,kBAAkB,MAAM;EAAnD,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,6BAAAA,gBAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,eAAD,EAAA,UAAgB,MAAM,MAAqB,CAAA,GAC1C,MAAM,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,qBAAD,EAAA,UAAsB,MAAM,OAA4B,CAAA,IAAI,IAC9D,EAAA,CAAA,GAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAO,SAAS;GAA6B,mBAAmBC,eAAAA;EAAkB,CAAA,CACtE;;AAElB"}
@@ -0,0 +1,8 @@
1
+ import { InstalledSettingsPanel } from "../../lib/pluginRegistry.mjs";
2
+ //#region src/web/features/settings/SettingsPanelHost.d.ts
3
+ interface SettingsPanelHostProps {
4
+ panel: InstalledSettingsPanel;
5
+ }
6
+ export declare function SettingsPanelHost({ panel }: SettingsPanelHostProps): import("react").JSX.Element;
7
+ //#endregion
8
+ //# sourceMappingURL=SettingsPanelHost.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanelHost.d.mts","names":[],"sources":["../../../../src/web/features/settings/SettingsPanelHost.tsx"],"mappings":";;UAsBU;EACR,OAAO;;wBAGO,oBAAoB,SAAS,yCAAsB,IAAA"}
@@ -0,0 +1,32 @@
1
+ import { sealedHttpSession } from "../../lib/sealedSession.mjs";
2
+ import { fetchWithStepUp } from "../../lib/stepUp.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { SettingsDescription, SettingsHeader, SettingsPage, SettingsTitle } from "@agimon-ai/po-web-components";
5
+ //#region src/web/features/settings/SettingsPanelHost.tsx
6
+ /**
7
+ * The frame around a settings page a package draws itself.
8
+ *
9
+ * The host keeps the heading here rather than leaving it to the plugin, so a
10
+ * self-drawn page carries the same label and detail the menu showed and the
11
+ * reader does not have to trust each package to repeat them. Everything below
12
+ * the heading belongs to the package.
13
+ *
14
+ * The transport is the host's for the same reason the repository panel's is:
15
+ * only the host knows whether the page is being read over a tunnel, and a
16
+ * plugin calling bare fetch would send plaintext to the relay.
17
+ */
18
+ const requestThroughSealedSession = (input, init) => sealedHttpSession.fetch(input, init);
19
+ function SettingsPanelHost({ panel }) {
20
+ const Panel = panel.component;
21
+ return /* @__PURE__ */ jsxs(SettingsPage, {
22
+ "data-testid": `settings-panel-${panel.id}`,
23
+ children: [/* @__PURE__ */ jsxs(SettingsHeader, { children: [/* @__PURE__ */ jsx(SettingsTitle, { children: panel.label }), panel.detail ? /* @__PURE__ */ jsx(SettingsDescription, { children: panel.detail }) : null] }), /* @__PURE__ */ jsx(Panel, {
24
+ request: requestThroughSealedSession,
25
+ requestWithStepUp: fetchWithStepUp
26
+ })]
27
+ });
28
+ }
29
+ //#endregion
30
+ export { SettingsPanelHost };
31
+
32
+ //# sourceMappingURL=SettingsPanelHost.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanelHost.mjs","names":[],"sources":["../../../../src/web/features/settings/SettingsPanelHost.tsx"],"sourcesContent":["import { SettingsDescription, SettingsHeader, SettingsPage, SettingsTitle } from '@agimon-ai/po-web-components';\n\nimport type { InstalledSettingsPanel } from '../../lib/pluginRegistry';\nimport { sealedHttpSession } from '../../lib/sealedSession';\nimport { fetchWithStepUp } from '../../lib/stepUp';\n\n/**\n * The frame around a settings page a package draws itself.\n *\n * The host keeps the heading here rather than leaving it to the plugin, so a\n * self-drawn page carries the same label and detail the menu showed and the\n * reader does not have to trust each package to repeat them. Everything below\n * the heading belongs to the package.\n *\n * The transport is the host's for the same reason the repository panel's is:\n * only the host knows whether the page is being read over a tunnel, and a\n * plugin calling bare fetch would send plaintext to the relay.\n */\n\nconst requestThroughSealedSession = (input: string, init?: RequestInit): Promise<Response> =>\n sealedHttpSession.fetch(input, init);\n\ninterface SettingsPanelHostProps {\n panel: InstalledSettingsPanel;\n}\n\nexport function SettingsPanelHost({ panel }: SettingsPanelHostProps) {\n const Panel = panel.component;\n return (\n <SettingsPage data-testid={`settings-panel-${panel.id}`}>\n <SettingsHeader>\n <SettingsTitle>{panel.label}</SettingsTitle>\n {panel.detail ? <SettingsDescription>{panel.detail}</SettingsDescription> : null}\n </SettingsHeader>\n <Panel request={requestThroughSealedSession} requestWithStepUp={fetchWithStepUp} />\n </SettingsPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,+BAA+B,OAAe,SAClD,kBAAkB,MAAM,OAAO,IAAI;AAMrC,SAAgB,kBAAkB,EAAE,SAAiC;CACnE,MAAM,QAAQ,MAAM;CACpB,OACE,qBAAC,cAAD;EAAc,eAAa,kBAAkB,MAAM;EAAnD,UAAA,CACE,qBAAC,gBAAD,EAAA,UAAA,CACE,oBAAC,eAAD,EAAA,UAAgB,MAAM,MAAqB,CAAA,GAC1C,MAAM,SAAS,oBAAC,qBAAD,EAAA,UAAsB,MAAM,OAA4B,CAAA,IAAI,IAC9D,EAAA,CAAA,GAChB,oBAAC,OAAD;GAAO,SAAS;GAA6B,mBAAmB;EAAkB,CAAA,CACtE;;AAElB"}
@@ -0,0 +1,177 @@
1
+ const require_templateCatalog = require("../../lib/templateCatalog.cjs");
2
+ const require_pluginRegistry = require("../../lib/pluginRegistry.cjs");
3
+ const require_pluginCompositions = require("../../lib/pluginCompositions.cjs");
4
+ const require_templateStore = require("../../stores/templateStore.cjs");
5
+ const require_useWebPluginRegistry = require("../../stores/useWebPluginRegistry.cjs");
6
+ const require_workspacesStore = require("../../stores/workspacesStore.cjs");
7
+ const require_dashboardStateStore = require("../../stores/dashboardStateStore.cjs");
8
+ let _tanstack_react_store = require("@tanstack/react-store");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
11
+ //#region src/web/features/settings/TemplateSettings.tsx
12
+ const WORKSPACE_TARGET = "workspace:";
13
+ /** Select only admitted template contributions, and make the config write destination explicit. */
14
+ function TemplateSettings({ target, onTargetChange }) {
15
+ require_useWebPluginRegistry.useWebPluginRegistry();
16
+ const workspaces = (0, _tanstack_react_store.useStore)(require_workspacesStore.workspacesStore, (state) => state);
17
+ const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(10) : void 0;
18
+ const configuration = require_templateStore.useTemplateConfiguration(workspaceId);
19
+ const catalog = require_pluginRegistry.webTemplateCatalog(workspaceId === void 0 ? { scope: "global" } : {
20
+ scope: "workspace",
21
+ workspaceId
22
+ });
23
+ const configured = require_templateStore.configuredTemplate(configuration);
24
+ const resolved = require_templateCatalog.resolveWebTemplate(catalog.templates, configured);
25
+ const [draft, setDraft] = require_dashboardStateStore.useDashboardState("template/draft", null);
26
+ const choice = draft?.target === target ? draft.id : resolved.template?.id;
27
+ const busy = configuration.saving || configuration.loading;
28
+ const origin = configuration.config?.values["web.template"]?.origin ?? "default";
29
+ const missingWorkspace = workspaceId !== void 0 && workspaces.byId[workspaceId] === void 0;
30
+ const changed = choice !== void 0 && choice !== configured;
31
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSection, {
32
+ "data-testid": "template-settings",
33
+ children: [
34
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSectionHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionTitle, { children: "Layout" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionDescription, { children: "The arrangement Po opens with. Set it for everyone, or let one workspace choose its own." })] }),
35
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
36
+ className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2",
37
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38
+ id: "template-scope-label",
39
+ className: "text-sm text-doom-dim",
40
+ children: "Applies to"
41
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.Select, {
42
+ value: target,
43
+ onValueChange: (value) => {
44
+ onTargetChange(value);
45
+ setDraft(null);
46
+ },
47
+ disabled: configuration.saving,
48
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectTrigger, {
49
+ "aria-labelledby": "template-scope-label",
50
+ "data-testid": "template-scope",
51
+ className: "w-auto min-w-56 max-w-full",
52
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectValue, {})
53
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SelectContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectItem, {
54
+ value: "global",
55
+ children: "Global default"
56
+ }), workspaces.order.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SelectItem, {
57
+ value: `${WORKSPACE_TARGET}${id}`,
58
+ children: ["Workspace: ", workspaces.byId[id]?.root ?? id]
59
+ }, id))] })]
60
+ })]
61
+ }),
62
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.RadioGroup, {
63
+ "aria-label": "Layout",
64
+ value: choice ?? "",
65
+ onValueChange: (id) => setDraft({
66
+ target,
67
+ id
68
+ }),
69
+ className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
70
+ disabled: busy || missingWorkspace,
71
+ children: catalog.templates.map((template) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.RadioGroupCard, {
72
+ value: template.id,
73
+ "data-testid": `template-${template.id}`,
74
+ "data-selected": choice === template.id,
75
+ className: "flex items-start gap-2 rounded-lg p-4",
76
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
77
+ className: "flex min-w-0 flex-1 flex-col gap-1",
78
+ children: [
79
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
80
+ className: "text-base font-semibold text-doom-hi",
81
+ children: template.label
82
+ }),
83
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
84
+ className: "text-sm leading-relaxed text-doom-dim",
85
+ children: template.description
86
+ }),
87
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
88
+ className: "font-mono text-sm text-doom-dim",
89
+ children: template.pluginId
90
+ })
91
+ ]
92
+ }), choice === template.id ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
93
+ }, template.id))
94
+ }),
95
+ resolved.warning ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("output", {
96
+ className: "block text-sm text-doom-yellow",
97
+ children: resolved.warning
98
+ }) : null,
99
+ catalog.diagnostics.map((diagnostic, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("output", {
100
+ className: "block text-sm text-doom-yellow",
101
+ children: diagnostic.message
102
+ }, `${diagnostic.pluginId}:${index}`)),
103
+ configuration.error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
104
+ role: "alert",
105
+ "data-testid": "template-save-error",
106
+ className: "text-sm text-doom-red",
107
+ children: configuration.error
108
+ }) : null,
109
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsActions, { children: [
110
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
111
+ "data-testid": "template-save",
112
+ size: "sm",
113
+ variant: changed ? "primary" : "outline",
114
+ disabled: busy || missingWorkspace || choice === void 0 || configuration.config === void 0,
115
+ onClick: () => {
116
+ if (choice !== void 0) require_templateStore.saveTemplateDefault(choice, workspaceId).then((saved) => {
117
+ if (saved) {
118
+ setDraft(null);
119
+ require_pluginCompositions.reloadWebTemplateDecision();
120
+ }
121
+ });
122
+ },
123
+ children: configuration.saving ? "Saving…" : "Set as default"
124
+ }),
125
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
126
+ "data-testid": "template-inherit",
127
+ size: "sm",
128
+ variant: "ghost",
129
+ disabled: busy || missingWorkspace || configuration.config === void 0,
130
+ onClick: () => {
131
+ require_templateStore.saveTemplateDefault(null, workspaceId).then((saved) => {
132
+ if (saved) {
133
+ setDraft(null);
134
+ require_pluginCompositions.reloadWebTemplateDecision();
135
+ }
136
+ });
137
+ },
138
+ children: workspaceId === void 0 ? "Use automatic fallback" : "Inherit global default"
139
+ }),
140
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
141
+ "data-testid": "template-reload",
142
+ size: "sm",
143
+ variant: "ghost",
144
+ disabled: busy,
145
+ onClick: () => {
146
+ require_templateStore.refreshTemplateConfiguration(workspaceId).then(() => require_pluginCompositions.reloadWebTemplateDecision());
147
+ },
148
+ children: "Reload configuration"
149
+ })
150
+ ] }),
151
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsNote, {
152
+ "data-testid": "template-origin",
153
+ children: [
154
+ "Saved to",
155
+ " ",
156
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
157
+ className: "font-mono",
158
+ children: workspaceId === void 0 ? "~/.po/config.yaml" : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`
159
+ }),
160
+ ". Currently using",
161
+ " ",
162
+ configured === void 0 ? "automatic fallback" : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
163
+ className: "font-mono",
164
+ children: configured
165
+ }),
166
+ " (",
167
+ origin,
168
+ ")."
169
+ ]
170
+ })
171
+ ]
172
+ });
173
+ }
174
+ //#endregion
175
+ exports.TemplateSettings = TemplateSettings;
176
+
177
+ //# sourceMappingURL=TemplateSettings.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateSettings.cjs","names":["useStore","workspacesStore","useTemplateConfiguration","webTemplateCatalog","configuredTemplate","resolveWebTemplate","useDashboardState","SettingsSection","SettingsSectionHeader","SettingsSectionTitle","SettingsSectionDescription","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","RadioGroup","RadioGroupCard","CheckIcon","SettingsActions","Button","saveTemplateDefault","reloadWebTemplateDecision","refreshTemplateConfiguration","SettingsNote"],"sources":["../../../../src/web/features/settings/TemplateSettings.tsx"],"sourcesContent":["import {\n Button,\n CheckIcon,\n RadioGroup,\n RadioGroupCard,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SettingsActions,\n SettingsNote,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n} from '@agimon-ai/po-web-components';\nimport { useStore } from '@tanstack/react-store';\n\nimport { reloadWebTemplateDecision } from '../../lib/pluginCompositions';\nimport { webTemplateCatalog } from '../../lib/pluginRegistry';\nimport { resolveWebTemplate } from '../../lib/templateCatalog';\nimport { useDashboardState } from '../../stores/dashboardStateStore';\nimport {\n configuredTemplate,\n refreshTemplateConfiguration,\n saveTemplateDefault,\n useTemplateConfiguration,\n} from '../../stores/templateStore';\nimport { useWebPluginRegistry } from '../../stores/useWebPluginRegistry';\nimport { workspacesStore } from '../../stores/workspacesStore';\n\nconst WORKSPACE_TARGET = 'workspace:';\n/** Select only admitted template contributions, and make the config write destination explicit. */\nexport function TemplateSettings({\n target,\n onTargetChange,\n}: {\n target: string;\n onTargetChange: (target: string) => void;\n}) {\n useWebPluginRegistry();\n const workspaces = useStore(workspacesStore, (state) => state);\n const workspaceId = target.startsWith(WORKSPACE_TARGET) ? target.slice(WORKSPACE_TARGET.length) : undefined;\n const configuration = useTemplateConfiguration(workspaceId);\n const catalog = webTemplateCatalog(\n workspaceId === undefined ? { scope: 'global' } : { scope: 'workspace', workspaceId },\n );\n const configured = configuredTemplate(configuration);\n const resolved = resolveWebTemplate(catalog.templates, configured);\n const [draft, setDraft] = useDashboardState<{ target: string; id: string } | null>('template/draft', null);\n const choice = draft?.target === target ? draft.id : resolved.template?.id;\n const busy = configuration.saving || configuration.loading;\n const origin = configuration.config?.values['web.template']?.origin ?? 'default';\n const missingWorkspace = workspaceId !== undefined && workspaces.byId[workspaceId] === undefined;\n const changed = choice !== undefined && choice !== configured;\n return (\n <SettingsSection data-testid=\"template-settings\">\n <SettingsSectionHeader>\n <SettingsSectionTitle>Layout</SettingsSectionTitle>\n <SettingsSectionDescription>\n The arrangement Po opens with. Set it for everyone, or let one workspace choose its own.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2\">\n <span id=\"template-scope-label\" className=\"text-sm text-doom-dim\">\n Applies to\n </span>\n <Select\n value={target}\n onValueChange={(value) => {\n onTargetChange(value);\n setDraft(null);\n }}\n disabled={configuration.saving}\n >\n <SelectTrigger\n aria-labelledby=\"template-scope-label\"\n data-testid=\"template-scope\"\n className=\"w-auto min-w-56 max-w-full\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"global\">Global default</SelectItem>\n {workspaces.order.map((id) => (\n <SelectItem key={id} value={`${WORKSPACE_TARGET}${id}`}>\n Workspace: {workspaces.byId[id]?.root ?? id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <RadioGroup\n aria-label=\"Layout\"\n value={choice ?? ''}\n onValueChange={(id) => setDraft({ target, id })}\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\"\n disabled={busy || missingWorkspace}\n >\n {catalog.templates.map((template) => (\n <RadioGroupCard\n key={template.id}\n value={template.id}\n data-testid={`template-${template.id}`}\n data-selected={choice === template.id}\n className=\"flex items-start gap-2 rounded-lg p-4\"\n >\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-base font-semibold text-doom-hi\">{template.label}</span>\n <span className=\"text-sm leading-relaxed text-doom-dim\">{template.description}</span>\n <span className=\"font-mono text-sm text-doom-dim\">{template.pluginId}</span>\n </span>\n {choice === template.id ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </RadioGroupCard>\n ))}\n </RadioGroup>\n {resolved.warning ? <output className=\"block text-sm text-doom-yellow\">{resolved.warning}</output> : null}\n {catalog.diagnostics.map((diagnostic, index) => (\n <output key={`${diagnostic.pluginId}:${index}`} className=\"block text-sm text-doom-yellow\">\n {diagnostic.message}\n </output>\n ))}\n {configuration.error ? (\n <p role=\"alert\" data-testid=\"template-save-error\" className=\"text-sm text-doom-red\">\n {configuration.error}\n </p>\n ) : null}\n <SettingsActions>\n <Button\n data-testid=\"template-save\"\n size=\"sm\"\n variant={changed ? 'primary' : 'outline'}\n disabled={busy || missingWorkspace || choice === undefined || configuration.config === undefined}\n onClick={() => {\n if (choice !== undefined)\n void saveTemplateDefault(choice, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {configuration.saving ? 'Saving…' : 'Set as default'}\n </Button>\n <Button\n data-testid=\"template-inherit\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy || missingWorkspace || configuration.config === undefined}\n onClick={() => {\n void saveTemplateDefault(null, workspaceId).then((saved) => {\n if (saved) {\n setDraft(null);\n void reloadWebTemplateDecision();\n }\n });\n }}\n >\n {workspaceId === undefined ? 'Use automatic fallback' : 'Inherit global default'}\n </Button>\n <Button\n data-testid=\"template-reload\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => {\n void refreshTemplateConfiguration(workspaceId).then(() => reloadWebTemplateDecision());\n }}\n >\n Reload configuration\n </Button>\n </SettingsActions>\n <SettingsNote data-testid=\"template-origin\">\n Saved to{' '}\n <code className=\"font-mono\">\n {workspaceId === undefined\n ? '~/.po/config.yaml'\n : `${configuration.config?.repoRoot ?? workspaces.byId[workspaceId]?.root ?? workspaceId}/.po/config.yaml`}\n </code>\n . Currently using{' '}\n {configured === undefined ? 'automatic fallback' : <code className=\"font-mono\">{configured}</code>} ({origin}).\n </SettingsNote>\n </SettingsSection>\n );\n}\n"],"mappings":"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"}