@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,62 @@
1
+ import { ReasoningView } from "../components/ReasoningView/index.js";
2
+ const SAMPLE_REASONING = [
3
+ "The user is asking about the difference between a tool error and an",
4
+ "agent error. The §10.3 rule states that tool errors do NOT fail the",
5
+ "turn — phase reverts to model_text and the model gets a chance to",
6
+ "react. Only agent errors transition the turn to failed.",
7
+ ].join(" ");
8
+ const meta = {
9
+ title: "Affordances/ReasoningView",
10
+ component: ReasoningView,
11
+ parameters: {
12
+ docs: {
13
+ description: {
14
+ component: "Collapsible reasoning block. Default-collapsed; the header shows duration once known. Streaming mode replaces the body with a placeholder until deltas arrive.",
15
+ },
16
+ },
17
+ },
18
+ };
19
+ export default meta;
20
+ export const Collapsed = {
21
+ args: {
22
+ content: SAMPLE_REASONING,
23
+ durationSeconds: 2.4,
24
+ defaultExpanded: false,
25
+ },
26
+ };
27
+ export const Expanded = {
28
+ args: {
29
+ content: SAMPLE_REASONING,
30
+ durationSeconds: 2.4,
31
+ defaultExpanded: true,
32
+ },
33
+ };
34
+ export const Streaming = {
35
+ args: {
36
+ content: "",
37
+ streaming: true,
38
+ defaultExpanded: true,
39
+ },
40
+ parameters: {
41
+ docs: {
42
+ description: {
43
+ story: "While reasoning deltas are arriving, the duration is unknown and the body shows a placeholder until the first chunks land.",
44
+ },
45
+ },
46
+ },
47
+ };
48
+ export const WithDuration = {
49
+ args: {
50
+ content: SAMPLE_REASONING,
51
+ durationSeconds: 12.7,
52
+ defaultExpanded: true,
53
+ },
54
+ parameters: {
55
+ docs: {
56
+ description: {
57
+ story: "Longer reasoning — the header surfaces the wall-clock duration.",
58
+ },
59
+ },
60
+ },
61
+ };
62
+ //# sourceMappingURL=ReasoningView.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReasoningView.stories.js","sourceRoot":"","sources":["../../src/stories/ReasoningView.stories.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,MAAM,gBAAgB,GAAG;IACvB,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,yDAAyD;CAC1D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,IAAI,GAA+B;IACvC,KAAK,EAAE,2BAA2B;IAClC,SAAS,EAAE,aAAa;IACxB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,gKAAgK;aACnK;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE;QACJ,OAAO,EAAE,gBAAgB;QACzB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,OAAO,EAAE,gBAAgB;QACzB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EACH,4HAA4H;aAC/H;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,IAAI,EAAE;QACJ,OAAO,EAAE,gBAAgB;QACzB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;KACtB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EAAE,iEAAiE;aACzE;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Stories for `<ScrollToPresentButton />` — floating "↓ Jump to latest"
3
+ * button.
4
+ *
5
+ * The §10.4 predicate (`status === "running" && userScrolledAwayFromBottom`)
6
+ * is computed by the parent; the primitive itself only checks the
7
+ * `visible` prop.
8
+ *
9
+ * @see SPECIFICATIONS.md §10.4
10
+ */
11
+ import type { Meta, StoryObj } from "@storybook/react-vite";
12
+ import { ScrollToPresentButton } from "../components/ScrollToPresentButton/index.js";
13
+ declare const meta: Meta<typeof ScrollToPresentButton>;
14
+ export default meta;
15
+ type Story = StoryObj<typeof ScrollToPresentButton>;
16
+ export declare const Visible: Story;
17
+ export declare const Hidden: Story;
18
+ //# sourceMappingURL=ScrollToPresentButton.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollToPresentButton.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ScrollToPresentButton.stories.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAY5C,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAapB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { ScrollToPresentButton } from "../components/ScrollToPresentButton/index.js";
2
+ const meta = {
3
+ title: "Affordances/ScrollToPresentButton",
4
+ component: ScrollToPresentButton,
5
+ parameters: {
6
+ layout: "centered",
7
+ docs: {
8
+ description: {
9
+ component: "Floating button that appears when the user has scrolled away from the bottom during a running turn. The parent computes the predicate; the primitive only respects `visible`.",
10
+ },
11
+ },
12
+ },
13
+ };
14
+ export default meta;
15
+ export const Visible = {
16
+ args: {
17
+ visible: true,
18
+ onClick: () => undefined,
19
+ },
20
+ };
21
+ export const Hidden = {
22
+ args: {
23
+ visible: false,
24
+ onClick: () => undefined,
25
+ },
26
+ parameters: {
27
+ docs: {
28
+ description: {
29
+ story: "When `visible` is false the primitive returns `null` — there is no DOM element to inspect, but the story documents the contract.",
30
+ },
31
+ },
32
+ },
33
+ };
34
+ //# sourceMappingURL=ScrollToPresentButton.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollToPresentButton.stories.js","sourceRoot":"","sources":["../../src/stories/ScrollToPresentButton.stories.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,MAAM,IAAI,GAAuC;IAC/C,KAAK,EAAE,mCAAmC;IAC1C,SAAS,EAAE,qBAAqB;IAChC,UAAU,EAAE;QACV,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,+KAA+K;aAClL;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EACH,kIAAkI;aACrI;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Stories for `<SystemNotice />` — TPM wait / resumed / error banners.
3
+ *
4
+ * Pure presentational primitive — no context needed.
5
+ *
6
+ * @see SPECIFICATIONS.md §9.4 — system_notice events
7
+ */
8
+ import type { Meta, StoryObj } from "@storybook/react-vite";
9
+ import { SystemNotice } from "../components/SystemNotice/index.js";
10
+ declare const meta: Meta<typeof SystemNotice>;
11
+ export default meta;
12
+ type Story = StoryObj<typeof SystemNotice>;
13
+ export declare const TpmWait: Story;
14
+ export declare const Resumed: Story;
15
+ export declare const ErrorWithAction: Story;
16
+ export declare const ErrorNoAction: Story;
17
+ //# sourceMappingURL=SystemNotice.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemNotice.stories.d.ts","sourceRoot":"","sources":["../../src/stories/SystemNotice.stories.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAWnC,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAE3C,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAU7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { SystemNotice } from "../components/SystemNotice/index.js";
2
+ const meta = {
3
+ title: "Affordances/SystemNotice",
4
+ component: SystemNotice,
5
+ parameters: {
6
+ docs: {
7
+ description: {
8
+ component: "Banner for TPM-recovery + non-fatal errors. Variants: `tpm-wait` (countdown), `resumed` (transient flash), `error` (with optional retry button).",
9
+ },
10
+ },
11
+ },
12
+ };
13
+ export default meta;
14
+ export const TpmWait = {
15
+ args: {
16
+ variant: "tpm-wait",
17
+ message: "Provider rate-limited — retrying in 47s",
18
+ },
19
+ };
20
+ export const Resumed = {
21
+ args: {
22
+ variant: "resumed",
23
+ message: "Resumed.",
24
+ },
25
+ };
26
+ export const ErrorWithAction = {
27
+ args: {
28
+ variant: "error",
29
+ message: "Recovery exhausted — the model is unavailable. Try again in a moment.",
30
+ action: {
31
+ label: "Retry",
32
+ onClick: () => undefined,
33
+ },
34
+ },
35
+ };
36
+ export const ErrorNoAction = {
37
+ args: {
38
+ variant: "error",
39
+ message: "Something went wrong on the server. Contact your administrator.",
40
+ },
41
+ };
42
+ //# sourceMappingURL=SystemNotice.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemNotice.stories.js","sourceRoot":"","sources":["../../src/stories/SystemNotice.stories.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,MAAM,IAAI,GAA8B;IACtC,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,kJAAkJ;aACrJ;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,yCAAyC;KACnD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,UAAU;KACpB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAU;IACpC,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO;QAChB,OAAO,EACL,uEAAuE;QACzE,MAAM,EAAE;YACN,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;SACzB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,iEAAiE;KAC3E;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stories for `<ThemeSwitcher />` — sun/moon toggle, also renders
3
+ * nothing when the deployment has the switcher disabled.
4
+ *
5
+ * @see SPECIFICATIONS.md §7.6 — theme resolution
6
+ */
7
+ import type { Meta, StoryObj } from "@storybook/react-vite";
8
+ import { ThemeSwitcher } from "../components/ThemeSwitcher/index.js";
9
+ declare const meta: Meta<typeof ThemeSwitcher>;
10
+ export default meta;
11
+ type Story = StoryObj<typeof ThemeSwitcher>;
12
+ export declare const LightActive: Story;
13
+ export declare const DarkActive: Story;
14
+ export declare const SwitcherDisabled: Story;
15
+ //# sourceMappingURL=ThemeSwitcher.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeSwitcher.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ThemeSwitcher.stories.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAYrE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAWpC,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAE5C,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ThemeSwitcher } from "../components/ThemeSwitcher/index.js";
3
+ import { MockProvider } from "./_mockProvider.js";
4
+ function withProvider(opts) {
5
+ return (Story) => (_jsx(MockProvider, { opts: opts, children: _jsx(Story, {}) }));
6
+ }
7
+ const meta = {
8
+ title: "Affordances/ThemeSwitcher",
9
+ component: ThemeSwitcher,
10
+ parameters: {
11
+ docs: {
12
+ description: {
13
+ component: "Sun/moon switch that calls `setTheme()` on the provider. Renders nothing when `themeSwitcherEnabled === false`.",
14
+ },
15
+ },
16
+ },
17
+ };
18
+ export default meta;
19
+ export const LightActive = {
20
+ decorators: [withProvider({ theme: "light", themeSwitcherEnabled: true })],
21
+ };
22
+ export const DarkActive = {
23
+ decorators: [withProvider({ theme: "dark", themeSwitcherEnabled: true })],
24
+ };
25
+ export const SwitcherDisabled = {
26
+ decorators: [withProvider({ theme: "light", themeSwitcherEnabled: false })],
27
+ parameters: {
28
+ docs: {
29
+ description: {
30
+ story: "When the super_admin has disabled the switcher, the primitive renders `null` — there is nothing to inspect in the DOM.",
31
+ },
32
+ },
33
+ },
34
+ };
35
+ //# sourceMappingURL=ThemeSwitcher.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeSwitcher.stories.js","sourceRoot":"","sources":["../../src/stories/ThemeSwitcher.stories.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEzE,SAAS,YAAY,CAAC,IAAsB;IAC1C,OAAO,CAAC,KAA4B,EAAE,EAAE,CAAC,CACvC,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,YACtB,KAAC,KAAK,KAAG,GACI,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAA+B;IACvC,KAAK,EAAE,2BAA2B;IAClC,SAAS,EAAE,aAAa;IACxB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,iHAAiH;aACpH;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAU;IACrC,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EACH,wHAAwH;aAC3H;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Stories for `<ToolCallView />` — collapsible tool-call card.
3
+ *
4
+ * Per §10.3 a tool error does NOT fail the turn — the card stays as
5
+ * evidence of what happened. Stories cover running / done / error
6
+ * variants in both collapsed + expanded states.
7
+ *
8
+ * @see SPECIFICATIONS.md §9.3 — tool events
9
+ * @see SPECIFICATIONS.md §10.3 — tool error vs. agent error
10
+ */
11
+ import type { Meta, StoryObj } from "@storybook/react-vite";
12
+ import { ToolCallView } from "../components/ToolCallView/index.js";
13
+ declare const meta: Meta<typeof ToolCallView>;
14
+ export default meta;
15
+ type Story = StoryObj<typeof ToolCallView>;
16
+ export declare const RunningCollapsed: Story;
17
+ export declare const DoneCollapsed: Story;
18
+ export declare const DoneExpanded: Story;
19
+ export declare const ErrorExpanded: Story;
20
+ //# sourceMappingURL=ToolCallView.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCallView.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ToolCallView.stories.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAkBnE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAWnC,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAE3C,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAiB3B,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { ToolCallView } from "../components/ToolCallView/index.js";
2
+ const SAMPLE_INPUT = JSON.stringify({ query: "wire protocol §9.3", max_results: 5 }, null, 2);
3
+ const SAMPLE_OUTPUT = JSON.stringify({
4
+ results: [
5
+ { title: "9.3 — Tool events", url: "/docs/SPECIFICATIONS.md#tool-events" },
6
+ ],
7
+ }, null, 2);
8
+ const meta = {
9
+ title: "Affordances/ToolCallView",
10
+ component: ToolCallView,
11
+ parameters: {
12
+ docs: {
13
+ description: {
14
+ component: "Tool-call card showing name, status (running/done/error), and duration. Body holds input + output (or input + error). Default collapsed.",
15
+ },
16
+ },
17
+ },
18
+ };
19
+ export default meta;
20
+ export const RunningCollapsed = {
21
+ args: {
22
+ toolName: "search_docs",
23
+ status: "running",
24
+ input: SAMPLE_INPUT,
25
+ defaultExpanded: false,
26
+ },
27
+ };
28
+ export const DoneCollapsed = {
29
+ args: {
30
+ toolName: "search_docs",
31
+ status: "done",
32
+ input: SAMPLE_INPUT,
33
+ output: SAMPLE_OUTPUT,
34
+ durationSeconds: 1.8,
35
+ defaultExpanded: false,
36
+ },
37
+ };
38
+ export const DoneExpanded = {
39
+ args: {
40
+ toolName: "search_docs",
41
+ status: "done",
42
+ input: SAMPLE_INPUT,
43
+ output: SAMPLE_OUTPUT,
44
+ durationSeconds: 1.8,
45
+ defaultExpanded: true,
46
+ },
47
+ };
48
+ export const ErrorExpanded = {
49
+ args: {
50
+ toolName: "search_docs",
51
+ status: "error",
52
+ input: SAMPLE_INPUT,
53
+ error: "TimeoutError: upstream search took longer than 10s",
54
+ durationSeconds: 10.0,
55
+ defaultExpanded: true,
56
+ },
57
+ parameters: {
58
+ docs: {
59
+ description: {
60
+ story: "A tool-side failure surfaces in the card body. Per §10.3 the turn stays running — the model gets `tool_call_result {error}` and decides what to do next.",
61
+ },
62
+ },
63
+ },
64
+ };
65
+ //# sourceMappingURL=ToolCallView.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCallView.stories.js","sourceRoot":"","sources":["../../src/stories/ToolCallView.stories.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CACjC,EAAE,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,EAC/C,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAClC;IACE,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,qCAAqC,EAAE;KAC3E;CACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,IAAI,GAA8B;IACtC,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,0IAA0I;aAC7I;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,gBAAgB,GAAU;IACrC,IAAI,EAAE;QACJ,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,IAAI,EAAE;QACJ,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,oDAAoD;QAC3D,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;KACtB;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EACH,0JAA0J;aAC7J;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Stories for `<TpmBanner />` — TPM-recovery banner with live
3
+ * countdown.
4
+ *
5
+ * The banner reads state from the provider; we mount each story under
6
+ * `<MockProvider>` and feed a fixed `nowProvider` so the countdown
7
+ * shows a deterministic value (60s / 5s) regardless of wall-clock.
8
+ *
9
+ * The "exhausted" path is gated on `lastTurnError` containing the word
10
+ * "rate" (case-insensitive) per the component's matching rule.
11
+ *
12
+ * @see SPECIFICATIONS.md §6.5 — TPM recovery
13
+ * @see SPECIFICATIONS.md §10.4 — phase-bound predicates
14
+ */
15
+ import type { Meta, StoryObj } from "@storybook/react-vite";
16
+ import { TpmBanner } from "../components/TpmBanner/index.js";
17
+ declare const meta: Meta<typeof TpmBanner>;
18
+ export default meta;
19
+ type Story = StoryObj<typeof TpmBanner>;
20
+ export declare const WaitingPhase60sLeft: Story;
21
+ export declare const WaitingPhase5sLeft: Story;
22
+ export declare const Exhausted: Story;
23
+ export declare const NoBannerInIdleState: Story;
24
+ //# sourceMappingURL=TpmBanner.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TpmBanner.stories.d.ts","sourceRoot":"","sources":["../../src/stories/TpmBanner.stories.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAiB7D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAWhC,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;AAExC,eAAO,MAAM,mBAAmB,EAAE,KASjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAShC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KASvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAUjC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TpmBanner } from "../components/TpmBanner/index.js";
3
+ import { MockProvider } from "./_mockProvider.js";
4
+ /** Fixed "now" so the countdown is deterministic in the iframe. */
5
+ const NOW_MS = Date.parse("2026-05-13T12:00:00Z");
6
+ const RETRY_AT_60S = new Date(NOW_MS + 60_000).toISOString();
7
+ const RETRY_AT_5S = new Date(NOW_MS + 5_000).toISOString();
8
+ function withProvider(opts) {
9
+ return (Story) => (_jsx(MockProvider, { opts: opts, children: _jsx(Story, {}) }));
10
+ }
11
+ const meta = {
12
+ title: "Affordances/TpmBanner",
13
+ component: TpmBanner,
14
+ parameters: {
15
+ docs: {
16
+ description: {
17
+ component: "Specialization of SystemNotice that renders during waiting_provider, briefly flashes Resumed on recovery, and surfaces a Retry action on tpm_exhausted. Renders nothing otherwise.",
18
+ },
19
+ },
20
+ },
21
+ };
22
+ export default meta;
23
+ export const WaitingPhase60sLeft = {
24
+ decorators: [
25
+ withProvider({
26
+ status: "running",
27
+ phase: "waiting_provider",
28
+ tpm_retry_at: RETRY_AT_60S,
29
+ }),
30
+ ],
31
+ args: { nowProvider: () => NOW_MS },
32
+ };
33
+ export const WaitingPhase5sLeft = {
34
+ decorators: [
35
+ withProvider({
36
+ status: "running",
37
+ phase: "waiting_provider",
38
+ tpm_retry_at: RETRY_AT_5S,
39
+ }),
40
+ ],
41
+ args: { nowProvider: () => NOW_MS },
42
+ };
43
+ export const Exhausted = {
44
+ decorators: [
45
+ withProvider({
46
+ status: "failed",
47
+ phase: null,
48
+ lastTurnError: "Provider rate limit exhausted after 5 retries.",
49
+ }),
50
+ ],
51
+ args: { onRetry: () => undefined },
52
+ };
53
+ export const NoBannerInIdleState = {
54
+ decorators: [withProvider({ status: "idle", phase: null })],
55
+ parameters: {
56
+ docs: {
57
+ description: {
58
+ story: "When neither waiting_provider nor an exhausted error is present, the banner self-suppresses and renders nothing.",
59
+ },
60
+ },
61
+ },
62
+ };
63
+ //# sourceMappingURL=TpmBanner.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TpmBanner.stories.js","sourceRoot":"","sources":["../../src/stories/TpmBanner.stories.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEzE,mEAAmE;AACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAClD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAE3D,SAAS,YAAY,CAAC,IAAsB;IAC1C,OAAO,CAAC,KAA4B,EAAE,EAAE,CAAC,CACvC,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,YACtB,KAAC,KAAK,KAAG,GACI,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAA2B;IACnC,KAAK,EAAE,uBAAuB;IAC9B,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,oLAAoL;aACvL;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACxC,UAAU,EAAE;QACV,YAAY,CAAC;YACX,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,YAAY;SAC3B,CAAC;KACH;IACD,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAU;IACvC,UAAU,EAAE;QACV,YAAY,CAAC;YACX,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,WAAW;SAC1B,CAAC;KACH;IACD,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,UAAU,EAAE;QACV,YAAY,CAAC;YACX,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,gDAAgD;SAChE,CAAC;KACH;IACD,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACxC,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,KAAK,EACH,kHAAkH;aACrH;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Stories for `<TurnStatusIndicator />` — one per row of the §10.4
3
+ * turn-status table.
4
+ *
5
+ * Each story passes an explicit `state` prop AND wraps the component
6
+ * in `<MockProvider>`, because `TurnStatusIndicator` reads the context
7
+ * for the default but accepts the override prop for stories + tests.
8
+ *
9
+ * @see SPECIFICATIONS.md §10.4 — turn-status indicator table
10
+ */
11
+ import type { Meta, StoryObj } from "@storybook/react-vite";
12
+ import { TurnStatusIndicator } from "../components/TurnStatusIndicator/index.js";
13
+ declare const meta: Meta<typeof TurnStatusIndicator>;
14
+ export default meta;
15
+ type Story = StoryObj<typeof TurnStatusIndicator>;
16
+ export declare const Idle: Story;
17
+ export declare const Running_ModelText: Story;
18
+ export declare const Running_ModelReasoning: Story;
19
+ export declare const Running_ModelToolInput: Story;
20
+ export declare const Running_ToolExecuting: Story;
21
+ export declare const Running_WaitingProvider: Story;
22
+ export declare const Done: Story;
23
+ export declare const Cancelled: Story;
24
+ export declare const Failed: Story;
25
+ //# sourceMappingURL=TurnStatusIndicator.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnStatusIndicator.stories.d.ts","sourceRoot":"","sources":["../../src/stories/TurnStatusIndicator.stories.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAgBjF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAkB1C,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAEpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAEnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAErC,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TurnStatusIndicator } from "../components/TurnStatusIndicator/index.js";
3
+ import { MockProvider } from "./_mockProvider.js";
4
+ function makeState(status, phase) {
5
+ return {
6
+ status,
7
+ phase,
8
+ last_seq: -1,
9
+ turn_id: status !== "idle" ? "t-mock" : null,
10
+ session_id: null,
11
+ tpm_retry_at: null,
12
+ };
13
+ }
14
+ const meta = {
15
+ title: "Affordances/TurnStatusIndicator",
16
+ component: TurnStatusIndicator,
17
+ decorators: [
18
+ (Story) => (_jsx(MockProvider, { children: _jsx(Story, {}) })),
19
+ ],
20
+ parameters: {
21
+ docs: {
22
+ description: {
23
+ component: "Renders the active turn's (status, phase) as a colored dot + label. Pure function of state; see SPECIFICATIONS.md §10.4.",
24
+ },
25
+ },
26
+ },
27
+ };
28
+ export default meta;
29
+ export const Idle = {
30
+ args: { state: makeState("idle", null) },
31
+ };
32
+ export const Running_ModelText = {
33
+ args: { state: makeState("running", "model_text") },
34
+ };
35
+ export const Running_ModelReasoning = {
36
+ args: { state: makeState("running", "model_reasoning") },
37
+ };
38
+ export const Running_ModelToolInput = {
39
+ args: { state: makeState("running", "model_tool_input") },
40
+ };
41
+ export const Running_ToolExecuting = {
42
+ args: { state: makeState("running", "tool_executing") },
43
+ };
44
+ export const Running_WaitingProvider = {
45
+ args: { state: makeState("running", "waiting_provider") },
46
+ };
47
+ export const Done = {
48
+ args: { state: makeState("done", null) },
49
+ };
50
+ export const Cancelled = {
51
+ args: { state: makeState("cancelled", null) },
52
+ };
53
+ export const Failed = {
54
+ args: { state: makeState("failed", null) },
55
+ };
56
+ //# sourceMappingURL=TurnStatusIndicator.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnStatusIndicator.stories.js","sourceRoot":"","sources":["../../src/stories/TurnStatusIndicator.stories.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAGjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,SAAS,SAAS,CAAC,MAAkB,EAAE,KAA0B;IAC/D,OAAO;QACL,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,CAAC,CAAC;QACZ,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;QAC5C,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAqC;IAC7C,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,KAAC,YAAY,cACX,KAAC,KAAK,KAAG,GACI,CAChB;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,0HAA0H;aAC7H;SACF;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAU;IACtC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAU;IAC3C,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE;CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAU;IAC3C,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAU;IAC1C,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAU;IAC5C,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;CAC3C,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Minimal `<AIHubProvider>` stand-in for Storybook.
3
+ *
4
+ * The real provider boots a network client and a pile of `useEffect`s
5
+ * that fetch `/auth/me`, `/feature-toggles`, etc. — none of which work
6
+ * in the Storybook iframe. The stories only need the context shape
7
+ * (status / phase / theme / lastTurnError / messages / …) so we mount
8
+ * a hand-built `AIHubContextValue` directly.
9
+ *
10
+ * Mirrors the pattern in `__tests__/components/Affordances.test.tsx` so
11
+ * tests + stories share the same minimal context.
12
+ *
13
+ * @see packages/ai-hub/__tests__/components/Affordances.test.tsx
14
+ */
15
+ import { type ReactNode } from "react";
16
+ import { type AIHubContextValue } from "../context/AIHubContext.js";
17
+ import type { AIHubEffort } from "../client/AIHubClient.js";
18
+ import type { AIHubFeatureToggles, AIHubMessage, RunningPhase, TurnStatus } from "../types.js";
19
+ /** Options accepted by `<MockProvider>`. Everything is optional. */
20
+ export interface MockProviderOpts {
21
+ status?: TurnStatus;
22
+ phase?: RunningPhase | null;
23
+ tpm_retry_at?: string | null;
24
+ lastTurnError?: string | null;
25
+ themeSwitcherEnabled?: boolean;
26
+ theme?: "light" | "dark";
27
+ effort?: AIHubEffort;
28
+ messages?: AIHubMessage[];
29
+ streamingAssistantText?: string | null;
30
+ streamingReasoning?: string | null;
31
+ streamingToolCalls?: AIHubContextValue["streamingToolCalls"];
32
+ activeSessionId?: string | null;
33
+ featureToggles?: AIHubFeatureToggles | null;
34
+ }
35
+ /**
36
+ * Wraps `children` in a fully-populated `aiHubContext.Provider`. Every
37
+ * function-shaped field is a no-op; non-functional fields fall back to
38
+ * sensible defaults. The story decides which ones matter via `opts`.
39
+ */
40
+ export declare function MockProvider(props: {
41
+ opts?: MockProviderOpts;
42
+ children: ReactNode;
43
+ }): ReactNode;
44
+ //# sourceMappingURL=_mockProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_mockProvider.d.ts","sourceRoot":"","sources":["../../src/stories/_mockProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EAEZ,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC7C;AAiBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAiDZ"}