@data-club/ai-hub 0.0.1

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 (344) hide show
  1. package/dist/auth/passwordPolicy.d.ts +55 -0
  2. package/dist/auth/passwordPolicy.d.ts.map +1 -0
  3. package/dist/auth/passwordPolicy.js +63 -0
  4. package/dist/auth/passwordPolicy.js.map +1 -0
  5. package/dist/auth/texts.d.ts +815 -0
  6. package/dist/auth/texts.d.ts.map +1 -0
  7. package/dist/auth/texts.js +429 -0
  8. package/dist/auth/texts.js.map +1 -0
  9. package/dist/client/AIHubClient.d.ts +1058 -0
  10. package/dist/client/AIHubClient.d.ts.map +1 -0
  11. package/dist/client/AIHubClient.js +950 -0
  12. package/dist/client/AIHubClient.js.map +1 -0
  13. package/dist/client/index.d.ts +11 -0
  14. package/dist/client/index.d.ts.map +1 -0
  15. package/dist/client/index.js +9 -0
  16. package/dist/client/index.js.map +1 -0
  17. package/dist/client/sseParser.d.ts +41 -0
  18. package/dist/client/sseParser.d.ts.map +1 -0
  19. package/dist/client/sseParser.js +153 -0
  20. package/dist/client/sseParser.js.map +1 -0
  21. package/dist/client/tokenStorage.d.ts +56 -0
  22. package/dist/client/tokenStorage.d.ts.map +1 -0
  23. package/dist/client/tokenStorage.js +116 -0
  24. package/dist/client/tokenStorage.js.map +1 -0
  25. package/dist/components/AgentsPicker/index.d.ts +70 -0
  26. package/dist/components/AgentsPicker/index.d.ts.map +1 -0
  27. package/dist/components/AgentsPicker/index.js +63 -0
  28. package/dist/components/AgentsPicker/index.js.map +1 -0
  29. package/dist/components/AuthGate/index.d.ts +79 -0
  30. package/dist/components/AuthGate/index.d.ts.map +1 -0
  31. package/dist/components/AuthGate/index.js +61 -0
  32. package/dist/components/AuthGate/index.js.map +1 -0
  33. package/dist/components/CacheBadge/index.d.ts +88 -0
  34. package/dist/components/CacheBadge/index.d.ts.map +1 -0
  35. package/dist/components/CacheBadge/index.js +127 -0
  36. package/dist/components/CacheBadge/index.js.map +1 -0
  37. package/dist/components/ChangePassword/index.d.ts +109 -0
  38. package/dist/components/ChangePassword/index.d.ts.map +1 -0
  39. package/dist/components/ChangePassword/index.js +142 -0
  40. package/dist/components/ChangePassword/index.js.map +1 -0
  41. package/dist/components/ChatShell/ShellHeader.d.ts +44 -0
  42. package/dist/components/ChatShell/ShellHeader.d.ts.map +1 -0
  43. package/dist/components/ChatShell/ShellHeader.js +14 -0
  44. package/dist/components/ChatShell/ShellHeader.js.map +1 -0
  45. package/dist/components/ChatShell/UserMenu.d.ts +48 -0
  46. package/dist/components/ChatShell/UserMenu.d.ts.map +1 -0
  47. package/dist/components/ChatShell/UserMenu.js +86 -0
  48. package/dist/components/ChatShell/UserMenu.js.map +1 -0
  49. package/dist/components/ChatShell/index.d.ts +98 -0
  50. package/dist/components/ChatShell/index.d.ts.map +1 -0
  51. package/dist/components/ChatShell/index.js +124 -0
  52. package/dist/components/ChatShell/index.js.map +1 -0
  53. package/dist/components/DataClubAIHub/index.d.ts +132 -0
  54. package/dist/components/DataClubAIHub/index.d.ts.map +1 -0
  55. package/dist/components/DataClubAIHub/index.js +124 -0
  56. package/dist/components/DataClubAIHub/index.js.map +1 -0
  57. package/dist/components/DataClubAIHubAdmin/AgentEditorModal.d.ts +89 -0
  58. package/dist/components/DataClubAIHubAdmin/AgentEditorModal.d.ts.map +1 -0
  59. package/dist/components/DataClubAIHubAdmin/AgentEditorModal.js +199 -0
  60. package/dist/components/DataClubAIHubAdmin/AgentEditorModal.js.map +1 -0
  61. package/dist/components/DataClubAIHubAdmin/AgentsPage.d.ts +33 -0
  62. package/dist/components/DataClubAIHubAdmin/AgentsPage.d.ts.map +1 -0
  63. package/dist/components/DataClubAIHubAdmin/AgentsPage.js +137 -0
  64. package/dist/components/DataClubAIHubAdmin/AgentsPage.js.map +1 -0
  65. package/dist/components/DataClubAIHubAdmin/CreateUserModal.d.ts +50 -0
  66. package/dist/components/DataClubAIHubAdmin/CreateUserModal.d.ts.map +1 -0
  67. package/dist/components/DataClubAIHubAdmin/CreateUserModal.js +93 -0
  68. package/dist/components/DataClubAIHubAdmin/CreateUserModal.js.map +1 -0
  69. package/dist/components/DataClubAIHubAdmin/PasswordRevealModal.d.ts +49 -0
  70. package/dist/components/DataClubAIHubAdmin/PasswordRevealModal.d.ts.map +1 -0
  71. package/dist/components/DataClubAIHubAdmin/PasswordRevealModal.js +94 -0
  72. package/dist/components/DataClubAIHubAdmin/PasswordRevealModal.js.map +1 -0
  73. package/dist/components/DataClubAIHubAdmin/ResetPasswordModal.d.ts +37 -0
  74. package/dist/components/DataClubAIHubAdmin/ResetPasswordModal.d.ts.map +1 -0
  75. package/dist/components/DataClubAIHubAdmin/ResetPasswordModal.js +44 -0
  76. package/dist/components/DataClubAIHubAdmin/ResetPasswordModal.js.map +1 -0
  77. package/dist/components/DataClubAIHubAdmin/RotatingMessageEditorModal.d.ts +56 -0
  78. package/dist/components/DataClubAIHubAdmin/RotatingMessageEditorModal.d.ts.map +1 -0
  79. package/dist/components/DataClubAIHubAdmin/RotatingMessageEditorModal.js +158 -0
  80. package/dist/components/DataClubAIHubAdmin/RotatingMessageEditorModal.js.map +1 -0
  81. package/dist/components/DataClubAIHubAdmin/RotatingMessagesPage.d.ts +29 -0
  82. package/dist/components/DataClubAIHubAdmin/RotatingMessagesPage.d.ts.map +1 -0
  83. package/dist/components/DataClubAIHubAdmin/RotatingMessagesPage.js +183 -0
  84. package/dist/components/DataClubAIHubAdmin/RotatingMessagesPage.js.map +1 -0
  85. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.d.ts +38 -0
  86. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.d.ts.map +1 -0
  87. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js +294 -0
  88. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js.map +1 -0
  89. package/dist/components/DataClubAIHubAdmin/SettingsPage.d.ts +36 -0
  90. package/dist/components/DataClubAIHubAdmin/SettingsPage.d.ts.map +1 -0
  91. package/dist/components/DataClubAIHubAdmin/SettingsPage.js +373 -0
  92. package/dist/components/DataClubAIHubAdmin/SettingsPage.js.map +1 -0
  93. package/dist/components/DataClubAIHubAdmin/UsersPage.d.ts +47 -0
  94. package/dist/components/DataClubAIHubAdmin/UsersPage.d.ts.map +1 -0
  95. package/dist/components/DataClubAIHubAdmin/UsersPage.js +233 -0
  96. package/dist/components/DataClubAIHubAdmin/UsersPage.js.map +1 -0
  97. package/dist/components/DataClubAIHubAdmin/index.d.ts +87 -0
  98. package/dist/components/DataClubAIHubAdmin/index.d.ts.map +1 -0
  99. package/dist/components/DataClubAIHubAdmin/index.js +137 -0
  100. package/dist/components/DataClubAIHubAdmin/index.js.map +1 -0
  101. package/dist/components/DataClubAIHubLogin/index.d.ts +113 -0
  102. package/dist/components/DataClubAIHubLogin/index.d.ts.map +1 -0
  103. package/dist/components/DataClubAIHubLogin/index.js +123 -0
  104. package/dist/components/DataClubAIHubLogin/index.js.map +1 -0
  105. package/dist/components/EffortControl/index.d.ts +57 -0
  106. package/dist/components/EffortControl/index.d.ts.map +1 -0
  107. package/dist/components/EffortControl/index.js +84 -0
  108. package/dist/components/EffortControl/index.js.map +1 -0
  109. package/dist/components/Layout/index.d.ts +63 -0
  110. package/dist/components/Layout/index.d.ts.map +1 -0
  111. package/dist/components/Layout/index.js +45 -0
  112. package/dist/components/Layout/index.js.map +1 -0
  113. package/dist/components/MainColumn/index.d.ts +69 -0
  114. package/dist/components/MainColumn/index.d.ts.map +1 -0
  115. package/dist/components/MainColumn/index.js +47 -0
  116. package/dist/components/MainColumn/index.js.map +1 -0
  117. package/dist/components/MarkdownRenderer/index.d.ts +66 -0
  118. package/dist/components/MarkdownRenderer/index.d.ts.map +1 -0
  119. package/dist/components/MarkdownRenderer/index.js +153 -0
  120. package/dist/components/MarkdownRenderer/index.js.map +1 -0
  121. package/dist/components/MessageInput/index.d.ts +85 -0
  122. package/dist/components/MessageInput/index.d.ts.map +1 -0
  123. package/dist/components/MessageInput/index.js +139 -0
  124. package/dist/components/MessageInput/index.js.map +1 -0
  125. package/dist/components/MessageList/index.d.ts +156 -0
  126. package/dist/components/MessageList/index.d.ts.map +1 -0
  127. package/dist/components/MessageList/index.js +352 -0
  128. package/dist/components/MessageList/index.js.map +1 -0
  129. package/dist/components/ReasoningSelector/index.d.ts +77 -0
  130. package/dist/components/ReasoningSelector/index.d.ts.map +1 -0
  131. package/dist/components/ReasoningSelector/index.js +156 -0
  132. package/dist/components/ReasoningSelector/index.js.map +1 -0
  133. package/dist/components/ReasoningView/index.d.ts +94 -0
  134. package/dist/components/ReasoningView/index.d.ts.map +1 -0
  135. package/dist/components/ReasoningView/index.js +83 -0
  136. package/dist/components/ReasoningView/index.js.map +1 -0
  137. package/dist/components/ScrollToPresentButton/index.d.ts +54 -0
  138. package/dist/components/ScrollToPresentButton/index.d.ts.map +1 -0
  139. package/dist/components/ScrollToPresentButton/index.js +44 -0
  140. package/dist/components/ScrollToPresentButton/index.js.map +1 -0
  141. package/dist/components/SessionsPanel/SessionTitleModal.d.ts +79 -0
  142. package/dist/components/SessionsPanel/SessionTitleModal.d.ts.map +1 -0
  143. package/dist/components/SessionsPanel/SessionTitleModal.js +102 -0
  144. package/dist/components/SessionsPanel/SessionTitleModal.js.map +1 -0
  145. package/dist/components/SessionsPanel/index.d.ts +100 -0
  146. package/dist/components/SessionsPanel/index.d.ts.map +1 -0
  147. package/dist/components/SessionsPanel/index.js +176 -0
  148. package/dist/components/SessionsPanel/index.js.map +1 -0
  149. package/dist/components/SystemNotice/index.d.ts +66 -0
  150. package/dist/components/SystemNotice/index.d.ts.map +1 -0
  151. package/dist/components/SystemNotice/index.js +81 -0
  152. package/dist/components/SystemNotice/index.js.map +1 -0
  153. package/dist/components/ThemeSwitcher/index.d.ts +66 -0
  154. package/dist/components/ThemeSwitcher/index.d.ts.map +1 -0
  155. package/dist/components/ThemeSwitcher/index.js +73 -0
  156. package/dist/components/ThemeSwitcher/index.js.map +1 -0
  157. package/dist/components/ToolCallView/formatContent.d.ts +36 -0
  158. package/dist/components/ToolCallView/formatContent.d.ts.map +1 -0
  159. package/dist/components/ToolCallView/formatContent.js +53 -0
  160. package/dist/components/ToolCallView/formatContent.js.map +1 -0
  161. package/dist/components/ToolCallView/index.d.ts +120 -0
  162. package/dist/components/ToolCallView/index.d.ts.map +1 -0
  163. package/dist/components/ToolCallView/index.js +104 -0
  164. package/dist/components/ToolCallView/index.js.map +1 -0
  165. package/dist/components/TpmBanner/index.d.ts +53 -0
  166. package/dist/components/TpmBanner/index.d.ts.map +1 -0
  167. package/dist/components/TpmBanner/index.js +116 -0
  168. package/dist/components/TpmBanner/index.js.map +1 -0
  169. package/dist/components/TurnStatusIndicator/index.d.ts +77 -0
  170. package/dist/components/TurnStatusIndicator/index.d.ts.map +1 -0
  171. package/dist/components/TurnStatusIndicator/index.js +122 -0
  172. package/dist/components/TurnStatusIndicator/index.js.map +1 -0
  173. package/dist/components/internal/PasswordInput.d.ts +62 -0
  174. package/dist/components/internal/PasswordInput.d.ts.map +1 -0
  175. package/dist/components/internal/PasswordInput.js +42 -0
  176. package/dist/components/internal/PasswordInput.js.map +1 -0
  177. package/dist/context/AIHubContext.d.ts +220 -0
  178. package/dist/context/AIHubContext.d.ts.map +1 -0
  179. package/dist/context/AIHubContext.js +19 -0
  180. package/dist/context/AIHubContext.js.map +1 -0
  181. package/dist/context/AIHubProvider.d.ts +75 -0
  182. package/dist/context/AIHubProvider.d.ts.map +1 -0
  183. package/dist/context/AIHubProvider.js +954 -0
  184. package/dist/context/AIHubProvider.js.map +1 -0
  185. package/dist/context/index.d.ts +9 -0
  186. package/dist/context/index.d.ts.map +1 -0
  187. package/dist/context/index.js +9 -0
  188. package/dist/context/index.js.map +1 -0
  189. package/dist/context/theme.d.ts +43 -0
  190. package/dist/context/theme.d.ts.map +1 -0
  191. package/dist/context/theme.js +70 -0
  192. package/dist/context/theme.js.map +1 -0
  193. package/dist/context/useAIHub.d.ts +104 -0
  194. package/dist/context/useAIHub.d.ts.map +1 -0
  195. package/dist/context/useAIHub.js +63 -0
  196. package/dist/context/useAIHub.js.map +1 -0
  197. package/dist/context/useAIHubAuth.d.ts +44 -0
  198. package/dist/context/useAIHubAuth.d.ts.map +1 -0
  199. package/dist/context/useAIHubAuth.js +35 -0
  200. package/dist/context/useAIHubAuth.js.map +1 -0
  201. package/dist/index.d.ts +76 -0
  202. package/dist/index.d.ts.map +1 -0
  203. package/dist/index.js +57 -0
  204. package/dist/index.js.map +1 -0
  205. package/dist/primitives/index.d.ts +99 -0
  206. package/dist/primitives/index.d.ts.map +1 -0
  207. package/dist/primitives/index.js +97 -0
  208. package/dist/primitives/index.js.map +1 -0
  209. package/dist/state/affordances.d.ts +182 -0
  210. package/dist/state/affordances.d.ts.map +1 -0
  211. package/dist/state/affordances.js +189 -0
  212. package/dist/state/affordances.js.map +1 -0
  213. package/dist/state/stateReducer.d.ts +72 -0
  214. package/dist/state/stateReducer.d.ts.map +1 -0
  215. package/dist/state/stateReducer.js +122 -0
  216. package/dist/state/stateReducer.js.map +1 -0
  217. package/dist/stories/EffortControl.stories.d.ts +14 -0
  218. package/dist/stories/EffortControl.stories.d.ts.map +1 -0
  219. package/dist/stories/EffortControl.stories.js +43 -0
  220. package/dist/stories/EffortControl.stories.js.map +1 -0
  221. package/dist/stories/MarkdownRenderer.stories.d.ts +25 -0
  222. package/dist/stories/MarkdownRenderer.stories.d.ts.map +1 -0
  223. package/dist/stories/MarkdownRenderer.stories.js +178 -0
  224. package/dist/stories/MarkdownRenderer.stories.js.map +1 -0
  225. package/dist/stories/MessageBubble.stories.d.ts +21 -0
  226. package/dist/stories/MessageBubble.stories.d.ts.map +1 -0
  227. package/dist/stories/MessageBubble.stories.js +59 -0
  228. package/dist/stories/MessageBubble.stories.js.map +1 -0
  229. package/dist/stories/ReasoningView.stories.d.ts +18 -0
  230. package/dist/stories/ReasoningView.stories.d.ts.map +1 -0
  231. package/dist/stories/ReasoningView.stories.js +62 -0
  232. package/dist/stories/ReasoningView.stories.js.map +1 -0
  233. package/dist/stories/ScrollToPresentButton.stories.d.ts +18 -0
  234. package/dist/stories/ScrollToPresentButton.stories.d.ts.map +1 -0
  235. package/dist/stories/ScrollToPresentButton.stories.js +34 -0
  236. package/dist/stories/ScrollToPresentButton.stories.js.map +1 -0
  237. package/dist/stories/SystemNotice.stories.d.ts +17 -0
  238. package/dist/stories/SystemNotice.stories.d.ts.map +1 -0
  239. package/dist/stories/SystemNotice.stories.js +42 -0
  240. package/dist/stories/SystemNotice.stories.js.map +1 -0
  241. package/dist/stories/ThemeSwitcher.stories.d.ts +15 -0
  242. package/dist/stories/ThemeSwitcher.stories.d.ts.map +1 -0
  243. package/dist/stories/ThemeSwitcher.stories.js +35 -0
  244. package/dist/stories/ThemeSwitcher.stories.js.map +1 -0
  245. package/dist/stories/ToolCallView.stories.d.ts +20 -0
  246. package/dist/stories/ToolCallView.stories.d.ts.map +1 -0
  247. package/dist/stories/ToolCallView.stories.js +65 -0
  248. package/dist/stories/ToolCallView.stories.js.map +1 -0
  249. package/dist/stories/TpmBanner.stories.d.ts +24 -0
  250. package/dist/stories/TpmBanner.stories.d.ts.map +1 -0
  251. package/dist/stories/TpmBanner.stories.js +63 -0
  252. package/dist/stories/TpmBanner.stories.js.map +1 -0
  253. package/dist/stories/TurnStatusIndicator.stories.d.ts +25 -0
  254. package/dist/stories/TurnStatusIndicator.stories.d.ts.map +1 -0
  255. package/dist/stories/TurnStatusIndicator.stories.js +56 -0
  256. package/dist/stories/TurnStatusIndicator.stories.js.map +1 -0
  257. package/dist/stories/_mockProvider.d.ts +44 -0
  258. package/dist/stories/_mockProvider.d.ts.map +1 -0
  259. package/dist/stories/_mockProvider.js +84 -0
  260. package/dist/stories/_mockProvider.js.map +1 -0
  261. package/dist/types.d.ts +787 -0
  262. package/dist/types.d.ts.map +1 -0
  263. package/dist/types.js +19 -0
  264. package/dist/types.js.map +1 -0
  265. package/dist/webcomponent/defineWebComponent.d.ts +106 -0
  266. package/dist/webcomponent/defineWebComponent.d.ts.map +1 -0
  267. package/dist/webcomponent/defineWebComponent.js +126 -0
  268. package/dist/webcomponent/defineWebComponent.js.map +1 -0
  269. package/dist/webcomponent/index.d.ts +7 -0
  270. package/dist/webcomponent/index.d.ts.map +1 -0
  271. package/dist/webcomponent/index.js +7 -0
  272. package/dist/webcomponent/index.js.map +1 -0
  273. package/package.json +63 -0
  274. package/src/__lint-canary__/step1-lint-canary.ts.disabled +28 -0
  275. package/src/auth/passwordPolicy.ts +75 -0
  276. package/src/auth/texts.ts +1294 -0
  277. package/src/client/AIHubClient.ts +1718 -0
  278. package/src/client/index.ts +30 -0
  279. package/src/client/sseParser.ts +168 -0
  280. package/src/client/tokenStorage.ts +131 -0
  281. package/src/components/AgentsPicker/index.tsx +147 -0
  282. package/src/components/AuthGate/index.tsx +132 -0
  283. package/src/components/CacheBadge/index.tsx +245 -0
  284. package/src/components/ChangePassword/index.tsx +375 -0
  285. package/src/components/ChatShell/ShellHeader.tsx +80 -0
  286. package/src/components/ChatShell/UserMenu.tsx +196 -0
  287. package/src/components/ChatShell/index.tsx +307 -0
  288. package/src/components/DataClubAIHub/index.tsx +300 -0
  289. package/src/components/DataClubAIHubAdmin/AgentEditorModal.tsx +505 -0
  290. package/src/components/DataClubAIHubAdmin/AgentsPage.tsx +342 -0
  291. package/src/components/DataClubAIHubAdmin/CreateUserModal.tsx +214 -0
  292. package/src/components/DataClubAIHubAdmin/PasswordRevealModal.tsx +204 -0
  293. package/src/components/DataClubAIHubAdmin/ResetPasswordModal.tsx +122 -0
  294. package/src/components/DataClubAIHubAdmin/RotatingMessageEditorModal.tsx +408 -0
  295. package/src/components/DataClubAIHubAdmin/RotatingMessagesPage.tsx +373 -0
  296. package/src/components/DataClubAIHubAdmin/SessionsOverviewPage.tsx +639 -0
  297. package/src/components/DataClubAIHubAdmin/SettingsPage.tsx +979 -0
  298. package/src/components/DataClubAIHubAdmin/UsersPage.tsx +495 -0
  299. package/src/components/DataClubAIHubAdmin/index.tsx +277 -0
  300. package/src/components/DataClubAIHubLogin/index.tsx +282 -0
  301. package/src/components/EffortControl/index.tsx +138 -0
  302. package/src/components/Layout/index.tsx +92 -0
  303. package/src/components/MainColumn/index.tsx +131 -0
  304. package/src/components/MarkdownRenderer/index.tsx +256 -0
  305. package/src/components/MessageInput/index.tsx +283 -0
  306. package/src/components/MessageList/index.tsx +753 -0
  307. package/src/components/ReasoningSelector/index.tsx +268 -0
  308. package/src/components/ReasoningView/index.tsx +183 -0
  309. package/src/components/ScrollToPresentButton/index.tsx +85 -0
  310. package/src/components/SessionsPanel/SessionTitleModal.tsx +256 -0
  311. package/src/components/SessionsPanel/index.tsx +406 -0
  312. package/src/components/SystemNotice/index.tsx +151 -0
  313. package/src/components/ThemeSwitcher/index.tsx +136 -0
  314. package/src/components/ToolCallView/formatContent.ts +50 -0
  315. package/src/components/ToolCallView/index.tsx +274 -0
  316. package/src/components/TpmBanner/index.tsx +172 -0
  317. package/src/components/TurnStatusIndicator/index.tsx +203 -0
  318. package/src/components/internal/PasswordInput.tsx +145 -0
  319. package/src/context/AIHubContext.ts +249 -0
  320. package/src/context/AIHubProvider.tsx +1084 -0
  321. package/src/context/index.ts +9 -0
  322. package/src/context/theme.ts +76 -0
  323. package/src/context/useAIHub.ts +151 -0
  324. package/src/context/useAIHubAuth.ts +65 -0
  325. package/src/index.ts +275 -0
  326. package/src/primitives/index.ts +101 -0
  327. package/src/state/affordances.ts +321 -0
  328. package/src/state/stateReducer.ts +131 -0
  329. package/src/stories/EffortControl.stories.tsx +63 -0
  330. package/src/stories/MarkdownRenderer.stories.tsx +201 -0
  331. package/src/stories/MessageBubble.stories.tsx +101 -0
  332. package/src/stories/ReasoningView.stories.tsx +81 -0
  333. package/src/stories/ScrollToPresentButton.stories.tsx +52 -0
  334. package/src/stories/SystemNotice.stories.tsx +59 -0
  335. package/src/stories/ThemeSwitcher.stories.tsx +55 -0
  336. package/src/stories/ToolCallView.stories.tsx +95 -0
  337. package/src/stories/TpmBanner.stories.tsx +93 -0
  338. package/src/stories/TurnStatusIndicator.stories.tsx +86 -0
  339. package/src/stories/_mockProvider.tsx +116 -0
  340. package/src/styles/CLASSES.md +356 -0
  341. package/src/styles/default.css +2937 -0
  342. package/src/types.ts +867 -0
  343. package/src/webcomponent/defineWebComponent.tsx +193 -0
  344. package/src/webcomponent/index.ts +11 -0
@@ -0,0 +1,373 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * `<AdminSettingsPage />` — the super_admin-only Settings sub-page mounted
4
+ * inside `<DataClubAIHubAdmin />` ([08-admin-settings.md]).
5
+ *
6
+ * Five independent sections, each with its own Save button — per the spec,
7
+ * "Don't make the user save all five sections together":
8
+ *
9
+ * 1. **Letta connection** — base URL, ADE URL, API key (masked + replaceable).
10
+ * 2. **Theme** — default theme + switcher-enabled checkbox.
11
+ * 3. **UI feature toggles** — the §8.4 toggle blob.
12
+ * 4. **Signing key** — rotate with `ROTATE`-typing friction. Rotating
13
+ * invalidates every JWT, including the calling super-admin's.
14
+ * 5. **Metrics scrape token** — rotate with the same friction. The new token
15
+ * is shown ONCE via a reveal modal; subsequent settings reads no longer
16
+ * expose it. Does NOT invalidate the calling JWT.
17
+ *
18
+ * Each section owns its own dirty-state and save handler; sibling sections
19
+ * never share state. This means a half-typed Letta URL won't be pushed when
20
+ * the admin clicks `Save toggles` in a different section.
21
+ *
22
+ * Visible to `super_admin` only — the parent shell hides the nav item for
23
+ * other roles and the server returns 403 for any other caller.
24
+ *
25
+ * @see SPECIFICATIONS.md §6.3.4 / §8.3 / §8.4 / §6.7 / §6.10
26
+ * @see ui-sketches/08-admin-settings.md
27
+ */
28
+ import { useEffect, useState } from "react";
29
+ import { useAIHub } from "../../context/useAIHub.js";
30
+ import { useAIHubAuth } from "../../context/useAIHubAuth.js";
31
+ /** All feature-toggle keys per §8.4. */
32
+ const ALL_TOGGLE_KEYS = [
33
+ "sessions_panel_enabled",
34
+ "sessions_panel_resizable",
35
+ "sessions_panel_collapsible",
36
+ "create_session_button_enabled",
37
+ "user_input_enabled",
38
+ "stop_button_enabled",
39
+ "tool_calls_visible",
40
+ "reasoning_visible",
41
+ "system_messages_visible",
42
+ "tpm_notice_visible",
43
+ "effort_control_visible",
44
+ "scroll_to_present_visible",
45
+ "turn_status_visible",
46
+ ];
47
+ /** Toggles grouped by the §8.4 visual grouping (purely organizational). */
48
+ const TOGGLE_GROUPS = [
49
+ {
50
+ groupLabelKey: "settingsTogglesGroupSessions",
51
+ keys: [
52
+ "sessions_panel_enabled",
53
+ "sessions_panel_resizable",
54
+ "sessions_panel_collapsible",
55
+ "create_session_button_enabled",
56
+ ],
57
+ },
58
+ {
59
+ groupLabelKey: "settingsTogglesGroupInput",
60
+ keys: ["user_input_enabled", "effort_control_visible"],
61
+ },
62
+ {
63
+ groupLabelKey: "settingsTogglesGroupAffordances",
64
+ keys: [
65
+ "stop_button_enabled",
66
+ "tool_calls_visible",
67
+ "reasoning_visible",
68
+ "system_messages_visible",
69
+ "tpm_notice_visible",
70
+ "scroll_to_present_visible",
71
+ "turn_status_visible",
72
+ ],
73
+ },
74
+ ];
75
+ /** Toggle defaults — every toggle is on by default per §8.4. */
76
+ function defaultToggleValue() {
77
+ return true;
78
+ }
79
+ /** Format ISO date as `YYYY-MM-DD (N days ago)`. */
80
+ function formatRotationStamp(iso) {
81
+ if (iso === null)
82
+ return null;
83
+ const ts = Date.parse(iso);
84
+ if (Number.isNaN(ts))
85
+ return iso;
86
+ const dateOnly = new Date(ts).toISOString().slice(0, 10);
87
+ const diffDays = Math.floor((Date.now() - ts) / (24 * 60 * 60 * 1000));
88
+ if (diffDays <= 0)
89
+ return `${dateOnly} (today)`;
90
+ if (diffDays === 1)
91
+ return `${dateOnly} (1 day ago)`;
92
+ return `${dateOnly} (${diffDays} days ago)`;
93
+ }
94
+ /** Renders the Settings sub-page. */
95
+ export function AdminSettingsPage(props) {
96
+ const { client } = useAIHub();
97
+ const [settings, setSettings] = useState(null);
98
+ const [loadError, setLoadError] = useState(null);
99
+ useEffect(() => {
100
+ let cancelled = false;
101
+ void (async () => {
102
+ try {
103
+ const result = await client.getAdminSettings();
104
+ if (!cancelled) {
105
+ setSettings(result);
106
+ setLoadError(null);
107
+ }
108
+ }
109
+ catch (err) {
110
+ if (!cancelled) {
111
+ setLoadError(err instanceof Error && err.message.length > 0
112
+ ? err.message
113
+ : props.texts.settingsGenericError);
114
+ }
115
+ }
116
+ })();
117
+ return () => {
118
+ cancelled = true;
119
+ };
120
+ }, [client, props.texts.settingsGenericError]);
121
+ function handleSectionSaved(next) {
122
+ setSettings(next);
123
+ }
124
+ return (_jsxs("div", { className: "data-club-ai-hub-admin__settings-page", "data-testid": "admin-settings-page", children: [_jsx("header", { className: "data-club-ai-hub-admin__page-header", children: _jsx("h1", { className: "data-club-ai-hub-admin__page-heading", "data-testid": "admin-settings-heading", children: props.texts.settingsHeading }) }), loadError !== null ? (_jsx("div", { className: "data-club-ai-hub-admin__error", role: "alert", "data-testid": "admin-settings-error", children: loadError })) : null, settings === null && loadError === null ? (_jsx("p", { className: "data-club-ai-hub-admin__loading", "data-testid": "admin-settings-loading", children: props.texts.settingsLoading })) : null, settings !== null ? (_jsxs(_Fragment, { children: [_jsx(LettaConnectionSection, { settings: settings, texts: props.texts, onSaved: handleSectionSaved }), _jsx(ThemeSection, { settings: settings, texts: props.texts, onSaved: handleSectionSaved }), _jsx(FeatureTogglesSection, { settings: settings, texts: props.texts, onSaved: (toggles) => handleSectionSaved({ ...settings, feature_toggles: toggles }) }), _jsx(SigningKeySection, { settings: settings, texts: props.texts, onRotated: (rotatedAt) => handleSectionSaved({
125
+ ...settings,
126
+ signing_key_rotated_at: rotatedAt,
127
+ }) }), _jsx(MetricsTokenSection, { settings: settings, texts: props.texts, onRotated: (rotatedAt) => handleSectionSaved({
128
+ ...settings,
129
+ metrics_scrape_token_rotated_at: rotatedAt,
130
+ }) })] })) : null] }));
131
+ }
132
+ function LettaConnectionSection(props) {
133
+ const { client } = useAIHub();
134
+ const [baseUrl, setBaseUrl] = useState(props.settings.letta_base_url ?? "");
135
+ const [adeUrl, setAdeUrl] = useState(props.settings.letta_ade_url ?? "");
136
+ // Empty string = leave-as-is; non-empty = replace.
137
+ const [apiKey, setApiKey] = useState("");
138
+ const [saving, setSaving] = useState(false);
139
+ const [flash, setFlash] = useState(null);
140
+ async function handleSave(event) {
141
+ event.preventDefault();
142
+ setSaving(true);
143
+ setFlash(null);
144
+ try {
145
+ const body = {};
146
+ // Compare against current to avoid stomping the existing value with the
147
+ // identical one. The server treats null + value identically, but the
148
+ // schema forbids `null + ""` so we coerce explicitly.
149
+ if (baseUrl !== (props.settings.letta_base_url ?? "")) {
150
+ body.lettaBaseUrl = baseUrl === "" ? null : baseUrl;
151
+ }
152
+ if (adeUrl !== (props.settings.letta_ade_url ?? "")) {
153
+ body.lettaAdeUrl = adeUrl === "" ? null : adeUrl;
154
+ }
155
+ if (apiKey !== "")
156
+ body.lettaApiKey = apiKey;
157
+ const next = await client.patchAdminSettings(body);
158
+ props.onSaved(next);
159
+ setApiKey("");
160
+ setFlash({ tone: "success", text: props.texts.settingsSaveSuccessFlash });
161
+ }
162
+ catch (err) {
163
+ setFlash({
164
+ tone: "error",
165
+ text: err instanceof Error && err.message.length > 0
166
+ ? err.message
167
+ : props.texts.settingsSaveGenericError,
168
+ });
169
+ }
170
+ finally {
171
+ setSaving(false);
172
+ }
173
+ }
174
+ // Clears the DB column (sends `letta_api_key: ""`), which makes the
175
+ // server fall back to env.LETTA_API_KEY at runtime per the
176
+ // resolveApiKey precedence in letta/client.ts. Same code path as the
177
+ // base/ADE URL nulling — only it targets the API-key column.
178
+ async function handleClearApiKeyOverride() {
179
+ setSaving(true);
180
+ setFlash(null);
181
+ try {
182
+ const next = await client.patchAdminSettings({ lettaApiKey: "" });
183
+ props.onSaved(next);
184
+ setFlash({ tone: "success", text: props.texts.settingsSaveSuccessFlash });
185
+ }
186
+ catch (err) {
187
+ setFlash({
188
+ tone: "error",
189
+ text: err instanceof Error && err.message.length > 0
190
+ ? err.message
191
+ : props.texts.settingsSaveGenericError,
192
+ });
193
+ }
194
+ finally {
195
+ setSaving(false);
196
+ }
197
+ }
198
+ return (_jsxs("section", { className: "data-club-ai-hub-admin__settings-section", "data-testid": "admin-settings-letta-section", children: [_jsx("h2", { className: "data-club-ai-hub-admin__settings-section-heading", children: props.texts.settingsLettaSectionHeading }), _jsxs("form", { onSubmit: (event) => void handleSave(event), noValidate: true, children: [_jsxs("label", { className: "data-club-ai-hub-admin__form-field", children: [_jsx("span", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsLettaBaseUrlLabel }), _jsx("input", { type: "url", className: "data-club-ai-hub-admin__form-input", "data-testid": "admin-settings-letta-base-url", value: baseUrl, onChange: (event) => setBaseUrl(event.target.value), disabled: saving })] }), _jsxs("label", { className: "data-club-ai-hub-admin__form-field", children: [_jsx("span", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsLettaAdeUrlLabel }), _jsx("input", { type: "url", className: "data-club-ai-hub-admin__form-input", "data-testid": "admin-settings-letta-ade-url", value: adeUrl, onChange: (event) => setAdeUrl(event.target.value), disabled: saving }), _jsx("span", { className: "data-club-ai-hub-admin__form-helper", children: props.texts.settingsLettaAdeUrlHelper })] }), _jsxs("label", { className: "data-club-ai-hub-admin__form-field", children: [_jsx("span", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsLettaApiKeyLabel }), _jsx("input", { type: "password", className: "data-club-ai-hub-admin__form-input", "data-testid": "admin-settings-letta-api-key", value: apiKey, placeholder: props.settings.letta_api_key_source === "db"
199
+ ? props.texts.settingsLettaApiKeyPlaceholder
200
+ : "", onChange: (event) => setApiKey(event.target.value), disabled: saving, autoComplete: "new-password" }), _jsx("span", { className: "data-club-ai-hub-admin__form-helper", "data-testid": "admin-settings-letta-api-key-helper", "data-source": props.settings.letta_api_key_source, children: props.settings.letta_api_key_source === "db"
201
+ ? props.texts.settingsLettaApiKeyDbHelper
202
+ : props.settings.letta_api_key_source === "env"
203
+ ? props.texts.settingsLettaApiKeyEnvHelper
204
+ : props.texts.settingsLettaApiKeyNoneHelper }), props.settings.letta_api_key_source === "db" ? (_jsx("button", { type: "button", className: "data-club-ai-hub-admin__button", "data-testid": "admin-settings-letta-api-key-clear", onClick: () => void handleClearApiKeyOverride(), disabled: saving, children: props.texts.settingsLettaApiKeyClearOverrideButton })) : null] }), flash !== null ? (_jsx("div", { className: flash.tone === "success"
205
+ ? "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--success"
206
+ : "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--error", "data-testid": "admin-settings-letta-flash", role: flash.tone === "error" ? "alert" : "status", children: flash.text })) : null, _jsx("button", { type: "submit", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--primary", "data-testid": "admin-settings-letta-save", disabled: saving, children: saving
207
+ ? props.texts.settingsSaveSavingButton
208
+ : props.texts.settingsSaveLettaButton })] })] }));
209
+ }
210
+ function ThemeSection(props) {
211
+ const { client } = useAIHub();
212
+ const [themeDefault, setThemeDefault] = useState(props.settings.theme.default);
213
+ const [switcherEnabled, setSwitcherEnabled] = useState(props.settings.theme.switcher_enabled);
214
+ const [saving, setSaving] = useState(false);
215
+ const [flash, setFlash] = useState(null);
216
+ async function handleSave(event) {
217
+ event.preventDefault();
218
+ setSaving(true);
219
+ setFlash(null);
220
+ try {
221
+ const next = await client.patchAdminSettings({
222
+ theme: { default: themeDefault, switcherEnabled },
223
+ });
224
+ props.onSaved(next);
225
+ setFlash({ tone: "success", text: props.texts.settingsSaveSuccessFlash });
226
+ }
227
+ catch (err) {
228
+ setFlash({
229
+ tone: "error",
230
+ text: err instanceof Error && err.message.length > 0
231
+ ? err.message
232
+ : props.texts.settingsSaveGenericError,
233
+ });
234
+ }
235
+ finally {
236
+ setSaving(false);
237
+ }
238
+ }
239
+ return (_jsxs("section", { className: "data-club-ai-hub-admin__settings-section", "data-testid": "admin-settings-theme-section", children: [_jsx("h2", { className: "data-club-ai-hub-admin__settings-section-heading", children: props.texts.settingsThemeSectionHeading }), _jsxs("form", { onSubmit: (event) => void handleSave(event), noValidate: true, children: [_jsxs("fieldset", { className: "data-club-ai-hub-admin__radio-group", children: [_jsx("legend", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsThemeDefaultLabel }), _jsxs("label", { className: "data-club-ai-hub-admin__radio", children: [_jsx("input", { type: "radio", name: "theme-default", value: "light", "data-testid": "admin-settings-theme-default-light", checked: themeDefault === "light", onChange: () => setThemeDefault("light"), disabled: saving }), _jsx("span", { children: props.texts.settingsThemeDefaultLight })] }), _jsxs("label", { className: "data-club-ai-hub-admin__radio", children: [_jsx("input", { type: "radio", name: "theme-default", value: "dark", "data-testid": "admin-settings-theme-default-dark", checked: themeDefault === "dark", onChange: () => setThemeDefault("dark"), disabled: saving }), _jsx("span", { children: props.texts.settingsThemeDefaultDark })] })] }), _jsxs("label", { className: "data-club-ai-hub-admin__checkbox", children: [_jsx("input", { type: "checkbox", "data-testid": "admin-settings-theme-switcher-enabled", checked: switcherEnabled, onChange: (event) => setSwitcherEnabled(event.target.checked), disabled: saving }), _jsx("span", { children: props.texts.settingsThemeSwitcherEnabledLabel })] }), _jsx("p", { className: "data-club-ai-hub-admin__form-helper", children: props.texts.settingsThemeSwitcherEnabledHelper }), flash !== null ? (_jsx("div", { className: flash.tone === "success"
240
+ ? "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--success"
241
+ : "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--error", "data-testid": "admin-settings-theme-flash", role: flash.tone === "error" ? "alert" : "status", children: flash.text })) : null, _jsx("button", { type: "submit", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--primary", "data-testid": "admin-settings-theme-save", disabled: saving, children: saving
242
+ ? props.texts.settingsSaveSavingButton
243
+ : props.texts.settingsSaveThemeButton })] })] }));
244
+ }
245
+ function FeatureTogglesSection(props) {
246
+ const { client } = useAIHub();
247
+ // The server's blob may omit keys (meaning "fall through to defaults"). The
248
+ // UI shows the effective value for the user — fill in defaults for any
249
+ // missing key. Save only sends the keys the user actually has toggled (in
250
+ // our case all of them, since the blob always carries all 13 once saved).
251
+ const [values, setValues] = useState(() => {
252
+ const initial = {};
253
+ for (const key of ALL_TOGGLE_KEYS) {
254
+ const fromServer = props.settings.feature_toggles[key];
255
+ initial[key] = typeof fromServer === "boolean" ? fromServer : defaultToggleValue();
256
+ }
257
+ return initial;
258
+ });
259
+ const [saving, setSaving] = useState(false);
260
+ const [flash, setFlash] = useState(null);
261
+ function toggle(key, value) {
262
+ setValues((prev) => ({ ...prev, [key]: value }));
263
+ }
264
+ async function handleSave(event) {
265
+ event.preventDefault();
266
+ setSaving(true);
267
+ setFlash(null);
268
+ try {
269
+ const body = {};
270
+ for (const key of ALL_TOGGLE_KEYS) {
271
+ body[key] = values[key];
272
+ }
273
+ const next = await client.patchAdminFeatureToggles(body);
274
+ props.onSaved(next);
275
+ setFlash({ tone: "success", text: props.texts.settingsSaveSuccessFlash });
276
+ }
277
+ catch (err) {
278
+ setFlash({
279
+ tone: "error",
280
+ text: err instanceof Error && err.message.length > 0
281
+ ? err.message
282
+ : props.texts.settingsSaveGenericError,
283
+ });
284
+ }
285
+ finally {
286
+ setSaving(false);
287
+ }
288
+ }
289
+ return (_jsxs("section", { className: "data-club-ai-hub-admin__settings-section", "data-testid": "admin-settings-toggles-section", children: [_jsx("h2", { className: "data-club-ai-hub-admin__settings-section-heading", children: props.texts.settingsTogglesSectionHeading }), _jsxs("form", { onSubmit: (event) => void handleSave(event), noValidate: true, children: [TOGGLE_GROUPS.map((group) => (_jsxs("fieldset", { className: "data-club-ai-hub-admin__toggle-group", children: [_jsx("legend", { className: "data-club-ai-hub-admin__form-label", children: props.texts[group.groupLabelKey] }), group.keys.map((key) => (_jsxs("label", { className: "data-club-ai-hub-admin__checkbox", children: [_jsx("input", { type: "checkbox", "data-testid": `admin-settings-toggle-${key}`, checked: Boolean(values[key]), onChange: (event) => toggle(key, event.target.checked), disabled: saving }), _jsx("code", { className: "data-club-ai-hub-admin__mono", children: key })] }, key)))] }, String(group.groupLabelKey)))), flash !== null ? (_jsx("div", { className: flash.tone === "success"
290
+ ? "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--success"
291
+ : "data-club-ai-hub-admin__flash data-club-ai-hub-admin__flash--error", "data-testid": "admin-settings-toggles-flash", role: flash.tone === "error" ? "alert" : "status", children: flash.text })) : null, _jsx("button", { type: "submit", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--primary", "data-testid": "admin-settings-toggles-save", disabled: saving, children: saving
292
+ ? props.texts.settingsSaveSavingButton
293
+ : props.texts.settingsTogglesSaveButton })] })] }));
294
+ }
295
+ function SigningKeySection(props) {
296
+ const { client } = useAIHub();
297
+ const auth = useAIHubAuth();
298
+ const [showModal, setShowModal] = useState(false);
299
+ const lastRotated = formatRotationStamp(props.settings.signing_key_rotated_at);
300
+ async function handleRotateConfirmed() {
301
+ await client.rotateAdminSigningKey();
302
+ // Rotating invalidates every JWT, including this caller's. The provider
303
+ // will see the 401 on the next request and route back to login; we
304
+ // accelerate that by calling logout right here so the UI doesn't sit on
305
+ // a stale token. Update the local card first for the milliseconds the
306
+ // modal is still on screen.
307
+ props.onRotated(new Date().toISOString());
308
+ setShowModal(false);
309
+ auth.logout();
310
+ }
311
+ return (_jsxs("section", { className: "data-club-ai-hub-admin__settings-section", "data-testid": "admin-settings-signing-key-section", children: [_jsx("h2", { className: "data-club-ai-hub-admin__settings-section-heading", children: props.texts.settingsSigningKeySectionHeading }), _jsx("p", { className: "data-club-ai-hub-admin__form-helper", children: lastRotated === null
312
+ ? props.texts.settingsSigningKeyNeverRotated
313
+ : props.texts.settingsSigningKeyLastRotated.replace("{date}", lastRotated) }), _jsx("p", { className: "data-club-ai-hub-admin__warning", "data-testid": "admin-settings-signing-key-warning", children: props.texts.settingsSigningKeyWarning }), _jsx("button", { type: "button", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--danger", "data-testid": "admin-settings-rotate-signing-key", onClick: () => setShowModal(true), children: props.texts.settingsRotateSigningKeyButton }), showModal ? (_jsx(RotateConfirmModal, { title: props.texts.settingsRotateSigningKeyModalTitle, body: props.texts.settingsRotateSigningKeyModalBody, texts: props.texts, testIdPrefix: "admin-settings-signing-key-modal", onConfirm: handleRotateConfirmed, onCancel: () => setShowModal(false) })) : null] }));
314
+ }
315
+ function MetricsTokenSection(props) {
316
+ const { client } = useAIHub();
317
+ const [showConfirm, setShowConfirm] = useState(false);
318
+ const [revealedToken, setRevealedToken] = useState(null);
319
+ const lastRotated = formatRotationStamp(props.settings.metrics_scrape_token_rotated_at);
320
+ async function handleRotateConfirmed() {
321
+ const { token } = await client.rotateAdminMetricsToken();
322
+ props.onRotated(new Date().toISOString());
323
+ setShowConfirm(false);
324
+ setRevealedToken(token);
325
+ }
326
+ return (_jsxs("section", { className: "data-club-ai-hub-admin__settings-section", "data-testid": "admin-settings-metrics-token-section", children: [_jsx("h2", { className: "data-club-ai-hub-admin__settings-section-heading", children: props.texts.settingsMetricsSectionHeading }), _jsx("p", { className: "data-club-ai-hub-admin__form-helper", children: lastRotated === null
327
+ ? props.texts.settingsMetricsNeverRotated
328
+ : props.texts.settingsMetricsLastRotated.replace("{date}", lastRotated) }), _jsx("p", { className: "data-club-ai-hub-admin__warning", "data-testid": "admin-settings-metrics-warning", children: props.texts.settingsMetricsWarning }), _jsx("button", { type: "button", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--danger", "data-testid": "admin-settings-rotate-metrics-token", onClick: () => setShowConfirm(true), children: props.texts.settingsRotateMetricsButton }), showConfirm ? (_jsx(RotateConfirmModal, { title: props.texts.settingsRotateMetricsModalTitle, body: props.texts.settingsRotateMetricsModalBody, texts: props.texts, testIdPrefix: "admin-settings-metrics-token-modal", onConfirm: handleRotateConfirmed, onCancel: () => setShowConfirm(false) })) : null, revealedToken !== null ? (_jsx(MetricsTokenRevealModal, { token: revealedToken, texts: props.texts, onClose: () => setRevealedToken(null) })) : null] }));
329
+ }
330
+ function RotateConfirmModal(props) {
331
+ const [typed, setTyped] = useState("");
332
+ const [submitting, setSubmitting] = useState(false);
333
+ const [error, setError] = useState(null);
334
+ const canConfirm = typed === props.texts.settingsRotateConfirmKeyword;
335
+ async function handleConfirm() {
336
+ if (!canConfirm)
337
+ return;
338
+ setSubmitting(true);
339
+ setError(null);
340
+ try {
341
+ await props.onConfirm();
342
+ }
343
+ catch (err) {
344
+ setError(err instanceof Error && err.message.length > 0
345
+ ? err.message
346
+ : props.texts.settingsRotateGenericError);
347
+ setSubmitting(false);
348
+ }
349
+ }
350
+ return (_jsx("div", { className: "data-club-ai-hub-admin__modal-backdrop", role: "presentation", onMouseDown: (event) => {
351
+ if (event.target === event.currentTarget && !submitting)
352
+ props.onCancel();
353
+ }, children: _jsxs("div", { className: "data-club-ai-hub-admin__modal", role: "dialog", "aria-modal": "true", "data-testid": props.testIdPrefix, children: [_jsx("h2", { className: "data-club-ai-hub-admin__modal-title", children: props.title }), _jsx("p", { className: "data-club-ai-hub-admin__modal-body", "data-testid": `${props.testIdPrefix}-body`, children: props.body }), _jsxs("label", { className: "data-club-ai-hub-admin__form-field", children: [_jsx("span", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsRotateConfirmInputLabel }), _jsx("input", { type: "text", className: "data-club-ai-hub-admin__form-input", "data-testid": `${props.testIdPrefix}-input`, value: typed, placeholder: props.texts.settingsRotateConfirmPlaceholder, onChange: (event) => setTyped(event.target.value), disabled: submitting, autoFocus: true })] }), error !== null ? (_jsx("div", { className: "data-club-ai-hub-admin__error", role: "alert", "data-testid": `${props.testIdPrefix}-error`, children: error })) : null, _jsxs("div", { className: "data-club-ai-hub-admin__modal-actions", children: [_jsx("button", { type: "button", className: "data-club-ai-hub-admin__button", "data-testid": `${props.testIdPrefix}-cancel`, onClick: props.onCancel, disabled: submitting, children: props.texts.agentModalCancelButton }), _jsx("button", { type: "button", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--danger", "data-testid": `${props.testIdPrefix}-confirm`, onClick: () => void handleConfirm(), disabled: !canConfirm || submitting, children: submitting
354
+ ? props.texts.settingsRotateConfirmingButton
355
+ : props.texts.settingsRotateConfirmButton })] })] }) }));
356
+ }
357
+ function MetricsTokenRevealModal(props) {
358
+ const [copied, setCopied] = useState(false);
359
+ async function handleCopy() {
360
+ try {
361
+ if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
362
+ await navigator.clipboard.writeText(props.token);
363
+ }
364
+ }
365
+ catch {
366
+ /* fall through — flash still fires to signal the click */
367
+ }
368
+ setCopied(true);
369
+ setTimeout(() => setCopied(false), 1800);
370
+ }
371
+ return (_jsx("div", { className: "data-club-ai-hub-admin__modal-backdrop", role: "presentation", children: _jsxs("div", { className: "data-club-ai-hub-admin__modal", role: "dialog", "aria-modal": "true", "data-testid": "admin-settings-metrics-reveal-modal", children: [_jsx("h2", { className: "data-club-ai-hub-admin__modal-title", children: props.texts.settingsMetricsRevealTitle }), _jsx("p", { className: "data-club-ai-hub-admin__warning", "data-testid": "admin-settings-metrics-reveal-warning", children: props.texts.settingsMetricsRevealWarning }), _jsxs("label", { className: "data-club-ai-hub-admin__form-field", children: [_jsx("span", { className: "data-club-ai-hub-admin__form-label", children: props.texts.settingsMetricsRevealTokenLabel }), _jsxs("div", { className: "data-club-ai-hub-admin__reveal-row", children: [_jsx("input", { type: "text", className: "data-club-ai-hub-admin__form-input data-club-ai-hub-admin__mono", "data-testid": "admin-settings-metrics-reveal-token", readOnly: true, value: props.token }), _jsx("button", { type: "button", className: "data-club-ai-hub-admin__button", "data-testid": "admin-settings-metrics-reveal-copy", "aria-label": props.texts.passwordRevealCopyAriaLabel, onClick: () => void handleCopy(), children: "\uD83D\uDCCB" })] }), copied ? (_jsx("span", { className: "data-club-ai-hub-admin__copied-flash", "data-testid": "admin-settings-metrics-reveal-copied", role: "status", children: props.texts.passwordRevealCopiedFlash })) : null] }), _jsx("div", { className: "data-club-ai-hub-admin__modal-actions", children: _jsx("button", { type: "button", className: "data-club-ai-hub-admin__button data-club-ai-hub-admin__button--primary", "data-testid": "admin-settings-metrics-reveal-done", onClick: props.onClose, children: props.texts.passwordRevealDoneButton }) })] }) }));
372
+ }
373
+ //# sourceMappingURL=SettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPage.js","sourceRoot":"","sources":["../../../src/components/DataClubAIHubAdmin/SettingsPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * `<AdminUsersPage />` — the Users sub-page mounted inside
3
+ * `<DataClubAIHubAdmin />` ([05-admin-users.md]).
4
+ *
5
+ * Shows every user in the deployment in `users_table`, with per-row
6
+ * actions (`[role▼]`, `[reset pw]`, 🗑). Disabled-action conditions per
7
+ * [05-admin-users.md]:
8
+ *
9
+ * - **Admin shield** — an `admin` caller sees the role dropdown / reset /
10
+ * delete disabled on every other admin's row and on every super_admin's
11
+ * row.
12
+ * - **Super-admin min-count** — actions on the only super_admin are
13
+ * disabled regardless of caller role.
14
+ * - **Self-protection** — delete is disabled on the caller's own row
15
+ * (server enforces too).
16
+ *
17
+ * The role dropdown's options are filtered by caller role — `admin` cannot
18
+ * promote to `super_admin`, so that option is omitted (the option is
19
+ * client-side filtered to mirror what the server enforces; passing it
20
+ * anyway would 403).
21
+ *
22
+ * Two-phase Create User and Reset Password flows: the Phase-1 dialog
23
+ * triggers the server call, which on success swaps in
24
+ * `<PasswordRevealModal />` as Phase 2. The password is held in this
25
+ * component's state until the admin clicks Done — once dismissed it is
26
+ * unrecoverable.
27
+ *
28
+ * @see SPECIFICATIONS.md §6.3.4 / §8.1 / §8.5
29
+ * @see ui-sketches/05-admin-users.md
30
+ */
31
+ import { type ReactNode } from "react";
32
+ import type { AIHubAdminTexts } from "../../auth/texts.js";
33
+ /**
34
+ * Props for `<AdminUsersPage />`.
35
+ */
36
+ export interface AdminUsersPageProps {
37
+ /** Resolved admin texts. */
38
+ texts: AIHubAdminTexts;
39
+ }
40
+ /**
41
+ * Renders the Users sub-page.
42
+ *
43
+ * @param props - see `AdminUsersPageProps`.
44
+ * @returns the rendered page.
45
+ */
46
+ export declare function AdminUsersPage(props: AdminUsersPageProps): ReactNode;
47
+ //# sourceMappingURL=UsersPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsersPage.d.ts","sourceRoot":"","sources":["../../../src/components/DataClubAIHubAdmin/UsersPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA2E3D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAiXpE"}