@talk2view/sdk 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +336 -69
  2. package/dist/assistant-ui/convert.d.ts +40 -0
  3. package/dist/assistant-ui/convert.d.ts.map +1 -0
  4. package/dist/assistant-ui/convert.js +113 -0
  5. package/dist/assistant-ui/convert.js.map +1 -0
  6. package/dist/assistant-ui/dictation.d.ts +39 -0
  7. package/dist/assistant-ui/dictation.d.ts.map +1 -0
  8. package/dist/assistant-ui/dictation.js +128 -0
  9. package/dist/assistant-ui/dictation.js.map +1 -0
  10. package/dist/assistant-ui/index.d.ts +43 -0
  11. package/dist/assistant-ui/index.d.ts.map +1 -0
  12. package/dist/assistant-ui/index.js +227 -0
  13. package/dist/assistant-ui/index.js.map +1 -0
  14. package/dist/auth.d.ts +38 -3
  15. package/dist/auth.d.ts.map +1 -1
  16. package/dist/auth.js +101 -16
  17. package/dist/auth.js.map +1 -1
  18. package/dist/chat/auth-gate.d.ts +42 -0
  19. package/dist/chat/auth-gate.d.ts.map +1 -0
  20. package/dist/chat/auth-gate.js +93 -0
  21. package/dist/chat/auth-gate.js.map +1 -0
  22. package/dist/chat/chat.d.ts +36 -0
  23. package/dist/chat/chat.d.ts.map +1 -0
  24. package/dist/chat/chat.js +124 -0
  25. package/dist/chat/chat.js.map +1 -0
  26. package/dist/chat/composer-extras.d.ts +23 -0
  27. package/dist/chat/composer-extras.d.ts.map +1 -0
  28. package/dist/chat/composer-extras.js +48 -0
  29. package/dist/chat/composer-extras.js.map +1 -0
  30. package/dist/chat/hooks/use-attachment-src.d.ts +2 -0
  31. package/dist/chat/hooks/use-attachment-src.d.ts.map +1 -0
  32. package/dist/chat/hooks/use-attachment-src.js +38 -0
  33. package/dist/chat/hooks/use-attachment-src.js.map +1 -0
  34. package/dist/chat/hooks/use-copy-to-clipboard.d.ts +8 -0
  35. package/dist/chat/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  36. package/dist/chat/hooks/use-copy-to-clipboard.js +16 -0
  37. package/dist/chat/hooks/use-copy-to-clipboard.js.map +1 -0
  38. package/dist/chat/index.d.ts +32 -0
  39. package/dist/chat/index.d.ts.map +1 -0
  40. package/dist/chat/index.js +35 -0
  41. package/dist/chat/index.js.map +1 -0
  42. package/dist/chat/inject-styles.d.ts +2 -0
  43. package/dist/chat/inject-styles.d.ts.map +1 -0
  44. package/dist/chat/inject-styles.js +23 -0
  45. package/dist/chat/inject-styles.js.map +1 -0
  46. package/dist/chat/launcher.d.ts +37 -0
  47. package/dist/chat/launcher.d.ts.map +1 -0
  48. package/dist/chat/launcher.js +343 -0
  49. package/dist/chat/launcher.js.map +1 -0
  50. package/dist/chat/lib/cn.d.ts +19 -0
  51. package/dist/chat/lib/cn.d.ts.map +1 -0
  52. package/dist/chat/lib/cn.js +20 -0
  53. package/dist/chat/lib/cn.js.map +1 -0
  54. package/dist/chat/lib/dictation-phase.d.ts +9 -0
  55. package/dist/chat/lib/dictation-phase.d.ts.map +1 -0
  56. package/dist/chat/lib/dictation-phase.js +33 -0
  57. package/dist/chat/lib/dictation-phase.js.map +1 -0
  58. package/dist/chat/lib/guard.d.ts +4 -0
  59. package/dist/chat/lib/guard.d.ts.map +1 -0
  60. package/dist/chat/lib/guard.js +41 -0
  61. package/dist/chat/lib/guard.js.map +1 -0
  62. package/dist/chat/lib/launcher-variant.d.ts +33 -0
  63. package/dist/chat/lib/launcher-variant.d.ts.map +1 -0
  64. package/dist/chat/lib/launcher-variant.js +109 -0
  65. package/dist/chat/lib/launcher-variant.js.map +1 -0
  66. package/dist/chat/lib/portal-host.d.ts +13 -0
  67. package/dist/chat/lib/portal-host.d.ts.map +1 -0
  68. package/dist/chat/lib/portal-host.js +58 -0
  69. package/dist/chat/lib/portal-host.js.map +1 -0
  70. package/dist/chat/markdown.d.ts +32 -0
  71. package/dist/chat/markdown.d.ts.map +1 -0
  72. package/dist/chat/markdown.js +18 -0
  73. package/dist/chat/markdown.js.map +1 -0
  74. package/dist/chat/provider.d.ts +113 -0
  75. package/dist/chat/provider.d.ts.map +1 -0
  76. package/dist/chat/provider.js +176 -0
  77. package/dist/chat/provider.js.map +1 -0
  78. package/dist/chat/tool-fallback.d.ts +39 -0
  79. package/dist/chat/tool-fallback.d.ts.map +1 -0
  80. package/dist/chat/tool-fallback.js +167 -0
  81. package/dist/chat/tool-fallback.js.map +1 -0
  82. package/dist/chat/ui/avatar.d.ts +12 -0
  83. package/dist/chat/ui/avatar.d.ts.map +1 -0
  84. package/dist/chat/ui/avatar.js +24 -0
  85. package/dist/chat/ui/avatar.js.map +1 -0
  86. package/dist/chat/ui/button.d.ts +9 -0
  87. package/dist/chat/ui/button.d.ts.map +1 -0
  88. package/dist/chat/ui/button.js +35 -0
  89. package/dist/chat/ui/button.js.map +1 -0
  90. package/dist/chat/ui/collapsible.d.ts +6 -0
  91. package/dist/chat/ui/collapsible.d.ts.map +1 -0
  92. package/dist/chat/ui/collapsible.js +13 -0
  93. package/dist/chat/ui/collapsible.js.map +1 -0
  94. package/dist/chat/ui/dialog.d.ts +18 -0
  95. package/dist/chat/ui/dialog.d.ts.map +1 -0
  96. package/dist/chat/ui/dialog.js +42 -0
  97. package/dist/chat/ui/dialog.js.map +1 -0
  98. package/dist/chat/ui/input.d.ts +4 -0
  99. package/dist/chat/ui/input.d.ts.map +1 -0
  100. package/dist/chat/ui/input.js +8 -0
  101. package/dist/chat/ui/input.js.map +1 -0
  102. package/dist/chat/ui/skeleton.d.ts +3 -0
  103. package/dist/chat/ui/skeleton.d.ts.map +1 -0
  104. package/dist/chat/ui/skeleton.js +7 -0
  105. package/dist/chat/ui/skeleton.js.map +1 -0
  106. package/dist/chat/ui/textarea.d.ts +4 -0
  107. package/dist/chat/ui/textarea.d.ts.map +1 -0
  108. package/dist/chat/ui/textarea.js +7 -0
  109. package/dist/chat/ui/textarea.js.map +1 -0
  110. package/dist/chat/ui/tooltip.d.ts +7 -0
  111. package/dist/chat/ui/tooltip.d.ts.map +1 -0
  112. package/dist/chat/ui/tooltip.js +22 -0
  113. package/dist/chat/ui/tooltip.js.map +1 -0
  114. package/dist/chat/vendor/attachment.aui.d.ts +5 -0
  115. package/dist/chat/vendor/attachment.aui.d.ts.map +1 -0
  116. package/dist/chat/vendor/attachment.aui.js +79 -0
  117. package/dist/chat/vendor/attachment.aui.js.map +1 -0
  118. package/dist/chat/vendor/file.d.ts +41 -0
  119. package/dist/chat/vendor/file.d.ts.map +1 -0
  120. package/dist/chat/vendor/file.js +137 -0
  121. package/dist/chat/vendor/file.js.map +1 -0
  122. package/dist/chat/vendor/follow-up-suggestions.aui.d.ts +3 -0
  123. package/dist/chat/vendor/follow-up-suggestions.aui.d.ts.map +1 -0
  124. package/dist/chat/vendor/follow-up-suggestions.aui.js +45 -0
  125. package/dist/chat/vendor/follow-up-suggestions.aui.js.map +1 -0
  126. package/dist/chat/vendor/image.d.ts +47 -0
  127. package/dist/chat/vendor/image.d.ts.map +1 -0
  128. package/dist/chat/vendor/image.js +258 -0
  129. package/dist/chat/vendor/image.js.map +1 -0
  130. package/dist/chat/vendor/markdown-text.d.ts +8 -0
  131. package/dist/chat/vendor/markdown-text.d.ts.map +1 -0
  132. package/dist/chat/vendor/markdown-text.js +73 -0
  133. package/dist/chat/vendor/markdown-text.js.map +1 -0
  134. package/dist/chat/vendor/reasoning.aui.d.ts +22 -0
  135. package/dist/chat/vendor/reasoning.aui.d.ts.map +1 -0
  136. package/dist/chat/vendor/reasoning.aui.js +56 -0
  137. package/dist/chat/vendor/reasoning.aui.js.map +1 -0
  138. package/dist/chat/vendor/reasoning.d.ts +35 -0
  139. package/dist/chat/vendor/reasoning.d.ts.map +1 -0
  140. package/dist/chat/vendor/reasoning.js +112 -0
  141. package/dist/chat/vendor/reasoning.js.map +1 -0
  142. package/dist/chat/vendor/thread-list.aui.d.ts +37 -0
  143. package/dist/chat/vendor/thread-list.aui.d.ts.map +1 -0
  144. package/dist/chat/vendor/thread-list.aui.js +154 -0
  145. package/dist/chat/vendor/thread-list.aui.js.map +1 -0
  146. package/dist/chat/vendor/thread.aui.d.ts +47 -0
  147. package/dist/chat/vendor/thread.aui.d.ts.map +1 -0
  148. package/dist/chat/vendor/thread.aui.js +176 -0
  149. package/dist/chat/vendor/thread.aui.js.map +1 -0
  150. package/dist/chat/vendor/tool-fallback.aui.d.ts +39 -0
  151. package/dist/chat/vendor/tool-fallback.aui.d.ts.map +1 -0
  152. package/dist/chat/vendor/tool-fallback.aui.js +251 -0
  153. package/dist/chat/vendor/tool-fallback.aui.js.map +1 -0
  154. package/dist/chat/vendor/tool-group.aui.d.ts +34 -0
  155. package/dist/chat/vendor/tool-group.aui.d.ts.map +1 -0
  156. package/dist/chat/vendor/tool-group.aui.js +60 -0
  157. package/dist/chat/vendor/tool-group.aui.js.map +1 -0
  158. package/dist/chat/vendor/tooltip-icon-button.d.ts +8 -0
  159. package/dist/chat/vendor/tooltip-icon-button.d.ts.map +1 -0
  160. package/dist/chat/vendor/tooltip-icon-button.js +11 -0
  161. package/dist/chat/vendor/tooltip-icon-button.js.map +1 -0
  162. package/dist/chat/views/account.d.ts +6 -0
  163. package/dist/chat/views/account.d.ts.map +1 -0
  164. package/dist/chat/views/account.js +128 -0
  165. package/dist/chat/views/account.js.map +1 -0
  166. package/dist/chat/views/settings.d.ts +2 -0
  167. package/dist/chat/views/settings.d.ts.map +1 -0
  168. package/dist/chat/views/settings.js +104 -0
  169. package/dist/chat/views/settings.js.map +1 -0
  170. package/dist/chat/views/thread-list.d.ts +10 -0
  171. package/dist/chat/views/thread-list.d.ts.map +1 -0
  172. package/dist/chat/views/thread-list.js +21 -0
  173. package/dist/chat/views/thread-list.js.map +1 -0
  174. package/dist/chat/welcome.d.ts +10 -0
  175. package/dist/chat/welcome.d.ts.map +1 -0
  176. package/dist/chat/welcome.js +9 -0
  177. package/dist/chat/welcome.js.map +1 -0
  178. package/dist/chat-css.d.ts +1 -0
  179. package/dist/chat-css.js +1 -0
  180. package/dist/chat.css +2 -0
  181. package/dist/chat.isolated.css +3819 -0
  182. package/dist/chat.raw.css +3829 -0
  183. package/dist/client.d.ts +1 -1
  184. package/dist/client.d.ts.map +1 -1
  185. package/dist/client.js +4 -4
  186. package/dist/client.js.map +1 -1
  187. package/dist/errors.d.ts +5 -3
  188. package/dist/errors.d.ts.map +1 -1
  189. package/dist/errors.js +28 -6
  190. package/dist/errors.js.map +1 -1
  191. package/dist/index.d.ts +68 -13
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +236 -35
  194. package/dist/index.js.map +1 -1
  195. package/dist/react/T2VProvider.d.ts +2 -2
  196. package/dist/react/T2VProvider.d.ts.map +1 -1
  197. package/dist/react/T2VProvider.js +1 -1
  198. package/dist/react/T2VProvider.js.map +1 -1
  199. package/dist/react/index.d.ts +14 -14
  200. package/dist/react/index.d.ts.map +1 -1
  201. package/dist/react/index.js +7 -7
  202. package/dist/react/index.js.map +1 -1
  203. package/dist/react/usePartnerConfig.d.ts +1 -1
  204. package/dist/react/usePartnerConfig.d.ts.map +1 -1
  205. package/dist/react/usePartnerConfig.js +1 -1
  206. package/dist/react/usePartnerConfig.js.map +1 -1
  207. package/dist/react/useT2VAuth.d.ts +8 -1
  208. package/dist/react/useT2VAuth.d.ts.map +1 -1
  209. package/dist/react/useT2VAuth.js +25 -6
  210. package/dist/react/useT2VAuth.js.map +1 -1
  211. package/dist/react/useT2VChat.d.ts +3 -3
  212. package/dist/react/useT2VChat.d.ts.map +1 -1
  213. package/dist/react/useT2VChat.js +1 -1
  214. package/dist/react/useT2VChat.js.map +1 -1
  215. package/dist/react/useT2VTools.d.ts +1 -1
  216. package/dist/react/useT2VTools.d.ts.map +1 -1
  217. package/dist/react/useT2VTools.js +1 -1
  218. package/dist/react/useT2VTools.js.map +1 -1
  219. package/dist/react/useUserPreferences.d.ts +1 -1
  220. package/dist/react/useUserPreferences.d.ts.map +1 -1
  221. package/dist/react/useUserPreferences.js +1 -1
  222. package/dist/react/useUserPreferences.js.map +1 -1
  223. package/dist/sessions.d.ts +3 -3
  224. package/dist/sessions.d.ts.map +1 -1
  225. package/dist/sessions.js +6 -2
  226. package/dist/sessions.js.map +1 -1
  227. package/dist/skills.d.ts +2 -2
  228. package/dist/skills.d.ts.map +1 -1
  229. package/dist/streaming.d.ts +1 -1
  230. package/dist/streaming.d.ts.map +1 -1
  231. package/dist/tools.d.ts +2 -2
  232. package/dist/tools.d.ts.map +1 -1
  233. package/dist/types.d.ts +119 -2
  234. package/dist/types.d.ts.map +1 -1
  235. package/dist/ui/components/ApprovalCard.d.ts +1 -1
  236. package/dist/ui/components/ApprovalCard.d.ts.map +1 -1
  237. package/dist/ui/components/ChatHeader.js +1 -1
  238. package/dist/ui/components/ChatHeader.js.map +1 -1
  239. package/dist/ui/components/ChatPanel.d.ts +1 -1
  240. package/dist/ui/components/ChatPanel.d.ts.map +1 -1
  241. package/dist/ui/components/ChatPanel.js +14 -13
  242. package/dist/ui/components/ChatPanel.js.map +1 -1
  243. package/dist/ui/components/ChatWidget.d.ts +1 -1
  244. package/dist/ui/components/ChatWidget.d.ts.map +1 -1
  245. package/dist/ui/components/ChatWidget.js +2 -2
  246. package/dist/ui/components/ChatWidget.js.map +1 -1
  247. package/dist/ui/components/Composer.d.ts.map +1 -1
  248. package/dist/ui/components/Composer.js +13 -6
  249. package/dist/ui/components/Composer.js.map +1 -1
  250. package/dist/ui/components/LoginForm.d.ts.map +1 -1
  251. package/dist/ui/components/LoginForm.js +19 -5
  252. package/dist/ui/components/LoginForm.js.map +1 -1
  253. package/dist/ui/components/MarkdownRenderer.d.ts +4 -0
  254. package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
  255. package/dist/ui/components/MarkdownRenderer.js +7 -35
  256. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  257. package/dist/ui/components/MessageActions.js +1 -1
  258. package/dist/ui/components/MessageActions.js.map +1 -1
  259. package/dist/ui/components/MessageBubble.d.ts +1 -1
  260. package/dist/ui/components/MessageBubble.d.ts.map +1 -1
  261. package/dist/ui/components/MessageBubble.js +9 -9
  262. package/dist/ui/components/MessageBubble.js.map +1 -1
  263. package/dist/ui/components/MessageList.js +2 -2
  264. package/dist/ui/components/MessageList.js.map +1 -1
  265. package/dist/ui/components/SettingsPanel.js +4 -4
  266. package/dist/ui/components/SettingsPanel.js.map +1 -1
  267. package/dist/ui/components/Talk2View.d.ts +1 -1
  268. package/dist/ui/components/Talk2View.d.ts.map +1 -1
  269. package/dist/ui/components/Talk2View.js +16 -12
  270. package/dist/ui/components/Talk2View.js.map +1 -1
  271. package/dist/ui/components/ThinkingBlock.js +2 -2
  272. package/dist/ui/components/ThinkingBlock.js.map +1 -1
  273. package/dist/ui/components/WelcomeScreen.js +2 -2
  274. package/dist/ui/components/WelcomeScreen.js.map +1 -1
  275. package/dist/ui/context.d.ts +4 -2
  276. package/dist/ui/context.d.ts.map +1 -1
  277. package/dist/ui/context.js.map +1 -1
  278. package/dist/ui/index.d.ts +27 -26
  279. package/dist/ui/index.d.ts.map +1 -1
  280. package/dist/ui/index.js +21 -20
  281. package/dist/ui/index.js.map +1 -1
  282. package/dist/ui/safeMarkdown.d.ts +17 -0
  283. package/dist/ui/safeMarkdown.d.ts.map +1 -0
  284. package/dist/ui/safeMarkdown.js +196 -0
  285. package/dist/ui/safeMarkdown.js.map +1 -0
  286. package/dist/ui/theme.d.ts +1 -1
  287. package/dist/ui/theme.d.ts.map +1 -1
  288. package/dist/ui/utils.d.ts +1 -1
  289. package/dist/ui/utils.d.ts.map +1 -1
  290. package/package.json +64 -5
package/dist/auth.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Auth module — login, signup, refresh, logout, auth state management.
3
3
  */
4
- import type { T2VClient } from './client';
5
- import type { SignupOutcome, User } from './types';
4
+ import type { T2VClient } from './client.js';
5
+ import type { SignupOutcome, User } from './types.js';
6
6
  type AuthStateCallback = (user: User | null) => void;
7
+ export type PopupProvider = 'google' | 'apple';
7
8
  export declare class T2VAuth {
8
9
  private readonly client;
9
10
  private listeners;
@@ -15,9 +16,27 @@ export declare class T2VAuth {
15
16
  * we observe that here and flip this tab to logged-out too.
16
17
  */
17
18
  private readonly onStorage;
19
+ /** Whether the window listeners below are currently registered. */
20
+ private listening;
18
21
  constructor(client: T2VClient);
19
22
  /**
20
- * Remove the window event listeners registered in the constructor.
23
+ * Start listening for auth being cleared, in this tab and in others.
24
+ *
25
+ * Called from the constructor, so nobody normally calls it. It is public and
26
+ * idempotent for one case: a caller that has already called {@link destroy}
27
+ * and wants the instance working again. React's StrictMode runs an effect as
28
+ * setup → cleanup → setup, so a component that destroys the client it owns on
29
+ * cleanup would otherwise be left holding a client whose auth listeners have
30
+ * been torn off — cross-tab sign-out and `clearAuth()` silently stop reaching
31
+ * it, in development only, which makes it the worst kind of bug to chase.
32
+ * `listen()` and {@link destroy} are exact inverses, either way round and any
33
+ * number of times.
34
+ *
35
+ * Guarded for SSR/Node, where `window` is absent.
36
+ */
37
+ listen(): void;
38
+ /**
39
+ * Remove the window event listeners {@link listen} registered.
21
40
  * Call when disposing of this auth instance to avoid leaking listeners.
22
41
  */
23
42
  destroy(): void;
@@ -41,8 +60,24 @@ export declare class T2VAuth {
41
60
  */
42
61
  login(email: string, password: string): Promise<User>;
43
62
  private oauthAbort?;
63
+ private popupProviders;
64
+ /**
65
+ * Which popup sign-ins work from this page. They work on any https:// website;
66
+ * on one the partner has not registered, the end-user first sees a Talk2View
67
+ * screen naming the site (the partner's key is public — this is what stops
68
+ * another site quietly using it). Partners who only allow their registered
69
+ * websites get an empty list elsewhere. Never rejects.
70
+ */
71
+ getPopupProviders(): Promise<PopupProvider[]>;
44
72
  /** Sign in with Google via a popup (engine-mediated OAuth). */
45
73
  signInWithGoogle(): Promise<User>;
74
+ /**
75
+ * Sign in with Apple via a popup (engine-mediated OAuth). An account made
76
+ * with Apple in a native app has no password, so on the web this is its only
77
+ * way in. Needs an engine that offers Apple in the popup flow; an older one
78
+ * answers the popup with 404 and this rejects when the attempt expires.
79
+ */
80
+ signInWithApple(): Promise<User>;
46
81
  signInWithOAuth(provider: string): Promise<User>;
47
82
  private pollOAuthExchange;
48
83
  /** Abortable delay used by the OAuth poll loop. */
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAe1C,OAAO,KAAK,EAAgB,aAAa,EAAgC,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/F,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAqCrD,qBAAa,OAAO;IAqBN,OAAO,CAAC,QAAQ,CAAC,MAAM;IApBnC,OAAO,CAAC,SAAS,CAAqC;IAGtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;gBAE2B,MAAM,EAAE,SAAS;IAW9C;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf,oDAAoD;IAC9C,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,gEAAgE;IAChE,WAAW,IAAI,OAAO;IAItB;;;;;;;OAOG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCrE;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3D,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,+DAA+D;IACzD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoCxC,iBAAiB;IAqD/B,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;OAEG;IACH,OAAO,IAAI,IAAI,GAAG,IAAI;IAUtB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBpF;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAO1D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;CAKxB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAe7C,OAAO,KAAK,EAAgB,aAAa,EAAgC,IAAI,EAAE,MAAM,YAAY,CAAC;AAElG,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAqC/C,qBAAa,OAAO;IAwBN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBnC,OAAO,CAAC,SAAS,CAAqC;IAGtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAEF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;IAEF,mEAAmE;IACnE,OAAO,CAAC,SAAS,CAAS;gBAEG,MAAM,EAAE,SAAS;IAO9C;;;;;;;;;;;;;;OAcG;IACH,MAAM,IAAI,IAAI;IASd;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf,oDAAoD;IAC9C,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,gEAAgE;IAChE,WAAW,IAAI,OAAO;IAItB;;;;;;;OAOG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCrE;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3D,OAAO,CAAC,UAAU,CAAC,CAAkB;IAIrC,OAAO,CAAC,cAAc,CAAyC;IAE/D;;;;;;OAMG;IACH,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA4C7C,+DAA+D;IACzD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAoCxC,iBAAiB;IA4D/B,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;OAEG;IACH,OAAO,IAAI,IAAI,GAAG,IAAI;IAUtB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBpF;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAO1D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;CAKxB"}
package/dist/auth.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Auth module — login, signup, refresh, logout, auth state management.
3
3
  */
4
- import { AuthenticationError, T2VError } from './errors';
5
- import { ACCESS_TOKEN_STORAGE_KEY, clearAuth, getAccessToken, getIsAnonymous, getUser, hasValidTokens, setAccessToken, setIsAnonymous, setUserApiKey, setRefreshToken, setUser, } from './storage';
4
+ import { AuthenticationError, T2VError } from './errors.js';
5
+ import { ACCESS_TOKEN_STORAGE_KEY, clearAuth, getAccessToken, getIsAnonymous, getUser, hasValidTokens, setAccessToken, setIsAnonymous, setUserApiKey, setRefreshToken, setUser, } from './storage.js';
6
6
  // Refresh a token this many seconds before it actually expires, so a request
7
7
  // fired right at the boundary doesn't race the expiry against clock skew.
8
8
  const TOKEN_EXPIRY_SKEW_SECONDS = 30;
@@ -51,26 +51,49 @@ export class T2VAuth {
51
51
  this.notifyListeners(null);
52
52
  }
53
53
  };
54
+ /** Whether the window listeners below are currently registered. */
55
+ listening = false;
54
56
  constructor(client) {
55
57
  this.client = client;
56
- // Same-tab + cross-tab auth-cleared sync. Guarded for SSR/Node where
57
- // `window`/`localStorage` are absent.
58
- if (typeof window !== 'undefined') {
59
- // Same-tab custom event (e.g., from 401 handling via clearAuth()).
60
- window.addEventListener('talk2view_auth_cleared', this.onAuthCleared);
61
- // Cross-tab native storage event (a logout in a sibling tab).
62
- window.addEventListener('storage', this.onStorage);
63
- }
58
+ // Listening from construction, as this class always has: a plain
59
+ // `new Talk2View()` must keep syncing auth across tabs without anyone
60
+ // having to know that listen() exists.
61
+ this.listen();
62
+ }
63
+ /**
64
+ * Start listening for auth being cleared, in this tab and in others.
65
+ *
66
+ * Called from the constructor, so nobody normally calls it. It is public and
67
+ * idempotent for one case: a caller that has already called {@link destroy}
68
+ * and wants the instance working again. React's StrictMode runs an effect as
69
+ * setup → cleanup → setup, so a component that destroys the client it owns on
70
+ * cleanup would otherwise be left holding a client whose auth listeners have
71
+ * been torn off — cross-tab sign-out and `clearAuth()` silently stop reaching
72
+ * it, in development only, which makes it the worst kind of bug to chase.
73
+ * `listen()` and {@link destroy} are exact inverses, either way round and any
74
+ * number of times.
75
+ *
76
+ * Guarded for SSR/Node, where `window` is absent.
77
+ */
78
+ listen() {
79
+ if (this.listening || typeof window === 'undefined')
80
+ return;
81
+ // Same-tab custom event (e.g., from 401 handling via clearAuth()).
82
+ window.addEventListener('talk2view_auth_cleared', this.onAuthCleared);
83
+ // Cross-tab native storage event (a logout in a sibling tab).
84
+ window.addEventListener('storage', this.onStorage);
85
+ this.listening = true;
64
86
  }
65
87
  /**
66
- * Remove the window event listeners registered in the constructor.
88
+ * Remove the window event listeners {@link listen} registered.
67
89
  * Call when disposing of this auth instance to avoid leaking listeners.
68
90
  */
69
91
  destroy() {
70
- if (typeof window !== 'undefined') {
71
- window.removeEventListener('talk2view_auth_cleared', this.onAuthCleared);
72
- window.removeEventListener('storage', this.onStorage);
73
- }
92
+ if (!this.listening || typeof window === 'undefined')
93
+ return;
94
+ window.removeEventListener('talk2view_auth_cleared', this.onAuthCleared);
95
+ window.removeEventListener('storage', this.onStorage);
96
+ this.listening = false;
74
97
  }
75
98
  /** Start an anonymous demo session (no account). */
76
99
  async startAnonymous(opts) {
@@ -139,10 +162,65 @@ export class T2VAuth {
139
162
  // previous one so its loop can't linger as a "zombie" and reject a later
140
163
  // attempt with a stale "expired"/"window closed" error.
141
164
  oauthAbort;
165
+ // Cached across calls so mounting several forms on one page only asks the
166
+ // engine once. Never reset — the answer for this page load doesn't change.
167
+ popupProviders = null;
168
+ /**
169
+ * Which popup sign-ins work from this page. They work on any https:// website;
170
+ * on one the partner has not registered, the end-user first sees a Talk2View
171
+ * screen naming the site (the partner's key is public — this is what stops
172
+ * another site quietly using it). Partners who only allow their registered
173
+ * websites get an empty list elsewhere. Never rejects.
174
+ */
175
+ getPopupProviders() {
176
+ this.popupProviders ??= this.client
177
+ .request('/v1/auth/oauth/providers', {}, false)
178
+ .then((res) => {
179
+ if (typeof window !== 'undefined') {
180
+ const here = window.location.origin;
181
+ const where = 'Settings → Allowed websites in the Talk2View dashboard';
182
+ if (res.providers.length === 0 && res.reason === 'referrer_blocked') {
183
+ console.info(`[Talk2View] Google and Apple sign-in are hidden on ${here}: this page sends no Referer ` +
184
+ 'header, and the engine uses it to confirm which website opened the sign-in window. ' +
185
+ 'Set `Referrer-Policy: strict-origin-when-cross-origin` (the browser default) on the ' +
186
+ 'page that hosts the chat. Email and password sign-in is unaffected.');
187
+ }
188
+ else if (res.providers.length === 0 && res.reason === 'origin_not_registered') {
189
+ console.info(`[Talk2View] Google and Apple sign-in are hidden on ${here}. Popup sign-in needs an ` +
190
+ `https:// website (never localhost), and this partner only allows the websites it has ` +
191
+ `registered — add this one under ${where}. Email and password sign-in is unaffected.`);
192
+ }
193
+ else if (res.providers.length > 0 && res.listed === false) {
194
+ console.info(`[Talk2View] Google and Apple sign-in work on ${here}, but your users first see a ` +
195
+ `Talk2View screen asking them to confirm this website. Add it under ${where} to remove that screen.`);
196
+ }
197
+ }
198
+ return res.providers;
199
+ })
200
+ .catch((err) => {
201
+ // An engine that predates this endpoint offered Google unconditionally.
202
+ if (err instanceof T2VError && err.statusCode === 404)
203
+ return ['google'];
204
+ // Anything else (offline, a 5xx) says nothing about this website: offer
205
+ // nothing now, but let the next form that mounts ask again.
206
+ this.popupProviders = null;
207
+ return [];
208
+ });
209
+ return this.popupProviders;
210
+ }
142
211
  /** Sign in with Google via a popup (engine-mediated OAuth). */
143
212
  async signInWithGoogle() {
144
213
  return this.signInWithOAuth('google');
145
214
  }
215
+ /**
216
+ * Sign in with Apple via a popup (engine-mediated OAuth). An account made
217
+ * with Apple in a native app has no password, so on the web this is its only
218
+ * way in. Needs an engine that offers Apple in the popup flow; an older one
219
+ * answers the popup with 404 and this rejects when the attempt expires.
220
+ */
221
+ async signInWithApple() {
222
+ return this.signInWithOAuth('apple');
223
+ }
146
224
  async signInWithOAuth(provider) {
147
225
  if (typeof window === 'undefined') {
148
226
  throw new T2VError('OAuth sign-in requires a browser environment');
@@ -196,9 +274,16 @@ export class T2VAuth {
196
274
  // we poll until ready, the txn expires (→ 410 after it was seen), or the
197
275
  // 180s deadline (which matches the server-side txn TTL).
198
276
  let sawTxn = false;
277
+ // A sign-in that never starts — the popup was refused, or closed on the
278
+ // engine's check screen — never gets a transaction, so every poll is a 410.
279
+ // Long enough to read the check screen; far short of the full deadline.
280
+ const neverStartedMs = Date.now() + 90_000;
199
281
  while (Date.now() < deadlineMs) {
200
282
  if (signal.aborted)
201
283
  throw new AuthenticationError('Sign-in was cancelled.');
284
+ if (!sawTxn && Date.now() > neverStartedMs) {
285
+ throw new AuthenticationError('Sign-in didn’t start. Close the sign-in window and try again.');
286
+ }
202
287
  let ready = null;
203
288
  let missing = false;
204
289
  try {
@@ -228,7 +313,7 @@ export class T2VAuth {
228
313
  if (!missing)
229
314
  delay = Math.min(delay * 1.5, 4000);
230
315
  }
231
- throw new AuthenticationError('Google sign-in timed out.');
316
+ throw new AuthenticationError('Sign-in timed out. Please try again.');
232
317
  }
233
318
  /** Abortable delay used by the OAuth poll loop. */
234
319
  sleep(ms, signal) {
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { Talk2View } from '../index.js';
2
+ import type { User } from '../types.js';
3
+ /** Why the Account view opened by itself, if it did. */
4
+ export type AccountReason = 'guest-limit' | 'demo-limit' | null;
5
+ export declare const REASON_COPY: Record<Exclude<AccountReason, null>, string>;
6
+ export type AccountState = {
7
+ status: 'none' | 'guest' | 'signed-in';
8
+ user: User | null;
9
+ };
10
+ /** Who is using the chat. Re-renders on sign-in, sign-out and guest start. */
11
+ export declare function useAccount(client: Talk2View): AccountState;
12
+ /** Whether a guest has been turned away, and which way. */
13
+ export interface GuestLimits {
14
+ /** This guest has used their allowance. */
15
+ demoLimitReached: boolean;
16
+ /** The engine will not start a guest session at all. */
17
+ anonymousUnavailable: boolean;
18
+ }
19
+ /**
20
+ * Track the two ways a guest is turned away, for as long as the chat is on the
21
+ * page.
22
+ *
23
+ * It belongs to the provider, not to the view that reacts to it: the launcher's
24
+ * panel is unmounted until someone opens it, and the refusal usually arrives
25
+ * while it still is — the chat starts its guest session as soon as it mounts.
26
+ * State kept inside the panel would miss the event that is the reason to open
27
+ * the panel at all, and the visitor would land on a thread they cannot use.
28
+ */
29
+ export declare function useGuestLimits(client: Talk2View): GuestLimits;
30
+ export interface AuthGate {
31
+ /** Sign-in replaces the thread: the visitor cannot chat until they are in. */
32
+ gated: boolean;
33
+ /** What opened it by itself, for the banner. Null when the visitor did. */
34
+ reason: AccountReason;
35
+ account: AccountState;
36
+ }
37
+ /**
38
+ * The gate, computed exactly as `ChatPanel` in the SDK's `/ui` panel computes
39
+ * it, so the two chats agree about who may speak to the agent.
40
+ */
41
+ export declare function useAuthGate(client: Talk2View, allowAnonymous: boolean, limits: GuestLimits): AuthGate;
42
+ //# sourceMappingURL=auth-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-gate.d.ts","sourceRoot":"","sources":["../../src/chat/auth-gate.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC;AAEhE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAGpE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAUzF,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAkB1D;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAID;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CA4B7D;AAED,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,OAAO,EACvB,MAAM,EAAE,WAAW,GAClB,QAAQ,CAYV"}
@@ -0,0 +1,93 @@
1
+ 'use client';
2
+ /**
3
+ * Who is using the chat, and whether they have to sign in before they can.
4
+ *
5
+ * The rule is the one the SDK's own `/ui` panel has shipped with: a logged-out
6
+ * visitor is stopped when the integrator does not allow guests, or when the
7
+ * engine refuses to start a guest session; a guest is stopped once their
8
+ * allowance runs out. Everything else — a signed-in end-user, a guest with
9
+ * allowance left — goes straight to the thread.
10
+ */
11
+ import { useEffect, useState, useSyncExternalStore } from 'react';
12
+ export const REASON_COPY = {
13
+ 'guest-limit': 'Guest chat isn’t available right now. Sign in to keep going.',
14
+ 'demo-limit': 'You’ve reached the guest limit. Sign in or create a free account to keep going.',
15
+ };
16
+ const NONE = { status: 'none', user: null };
17
+ function readAccount(client) {
18
+ const user = client.auth.getUser();
19
+ if (!user)
20
+ return NONE;
21
+ return { status: client.auth.isAnonymous() ? 'guest' : 'signed-in', user };
22
+ }
23
+ /** Who is using the chat. Re-renders on sign-in, sign-out and guest start. */
24
+ export function useAccount(client) {
25
+ // getSnapshot must return a stable value between changes, so the state is
26
+ // cached here and replaced only when the auth layer says something changed.
27
+ const [store] = useState(() => {
28
+ let current = NONE;
29
+ return {
30
+ subscribe: (notify) => {
31
+ current = readAccount(client);
32
+ notify();
33
+ return client.auth.onAuthStateChange(() => {
34
+ current = readAccount(client);
35
+ notify();
36
+ });
37
+ },
38
+ get: () => current,
39
+ };
40
+ });
41
+ return useSyncExternalStore(store.subscribe, store.get, () => NONE);
42
+ }
43
+ const NO_LIMITS = { demoLimitReached: false, anonymousUnavailable: false };
44
+ /**
45
+ * Track the two ways a guest is turned away, for as long as the chat is on the
46
+ * page.
47
+ *
48
+ * It belongs to the provider, not to the view that reacts to it: the launcher's
49
+ * panel is unmounted until someone opens it, and the refusal usually arrives
50
+ * while it still is — the chat starts its guest session as soon as it mounts.
51
+ * State kept inside the panel would miss the event that is the reason to open
52
+ * the panel at all, and the visitor would land on a thread they cannot use.
53
+ */
54
+ export function useGuestLimits(client) {
55
+ const account = useAccount(client);
56
+ const [limits, setLimits] = useState(NO_LIMITS);
57
+ useEffect(() => {
58
+ const offs = [
59
+ client.on('demoLimitReached', () => setLimits((l) => (l.demoLimitReached ? l : { ...l, demoLimitReached: true }))),
60
+ client.on('anonymousUnavailable', () => setLimits((l) => (l.anonymousUnavailable ? l : { ...l, anonymousUnavailable: true }))),
61
+ ];
62
+ return () => offs.forEach((off) => off());
63
+ }, [client]);
64
+ // Signing in to a real account lifts the limit AND resumes what it interrupted:
65
+ // the core has already dropped the orphaned guest session, so the resend lands
66
+ // in a fresh one owned by the now-signed-in end-user.
67
+ const signedIn = account.status === 'signed-in';
68
+ const limited = limits.demoLimitReached || limits.anonymousUnavailable;
69
+ useEffect(() => {
70
+ if (!signedIn || !limited)
71
+ return;
72
+ setLimits(NO_LIMITS);
73
+ void client.retryLastMessage();
74
+ }, [client, signedIn, limited]);
75
+ return limits;
76
+ }
77
+ /**
78
+ * The gate, computed exactly as `ChatPanel` in the SDK's `/ui` panel computes
79
+ * it, so the two chats agree about who may speak to the agent.
80
+ */
81
+ export function useAuthGate(client, allowAnonymous, limits) {
82
+ const account = useAccount(client);
83
+ const { demoLimitReached, anonymousUnavailable } = limits;
84
+ // A guest counts as authenticated here, as they do in `/ui`: they have a
85
+ // session and may chat. `allowAnonymous` is what decides whether they get one.
86
+ const isAuthenticated = account.status !== 'none';
87
+ return {
88
+ gated: (!isAuthenticated && (!allowAnonymous || anonymousUnavailable)) || demoLimitReached,
89
+ reason: demoLimitReached ? 'demo-limit' : anonymousUnavailable ? 'guest-limit' : null,
90
+ account,
91
+ };
92
+ }
93
+ //# sourceMappingURL=auth-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-gate.js","sourceRoot":"","sources":["../../src/chat/auth-gate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `<Talk2ViewChat>` — the packaged chat, filling whatever box you put it in: a
3
+ * Word task pane, a partner's side panel, a page section.
4
+ *
5
+ * ```tsx
6
+ * import { Talk2ViewChat } from '@talk2view/sdk/chat';
7
+ * import '@talk2view/sdk/chat.css';
8
+ *
9
+ * <Talk2ViewChat partnerKey="pk_live_…" welcome={{ suggestions: ['What can you do?'] }} />
10
+ * ```
11
+ *
12
+ * The frame is ported from the website's assistant modal, minus the popover:
13
+ * a header of one-tap views over a thread that never unmounts, so switching to
14
+ * Settings and back keeps the conversation, the scroll position and any
15
+ * half-typed message.
16
+ */
17
+ import { type FC, type ReactNode } from 'react';
18
+ import { type Talk2ViewChatProps } from './provider.js';
19
+ /** Which pane the header is showing. */
20
+ export type ChatView = 'thread' | 'list' | 'settings' | 'account';
21
+ export declare function Talk2ViewChat(props: Talk2ViewChatProps): ReactNode;
22
+ export interface ChatShellProps {
23
+ /** A short line under the composer, e.g. terms. */
24
+ footer?: ReactNode;
25
+ /** Extra header buttons at the end of the row — the launcher's Close (Task 6). */
26
+ headerEnd?: ReactNode;
27
+ /** Drive the view from outside, e.g. the launcher opening on a notification. */
28
+ view?: ChatView;
29
+ onViewChange?: (view: ChatView) => void;
30
+ }
31
+ /**
32
+ * The frame without the outer `.t2v-chat` box, so the launcher (Task 6) can
33
+ * render the same thing inside its popover.
34
+ */
35
+ export declare const ChatShell: FC<ChatShellProps>;
36
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/chat/chat.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAML,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAStF,wCAAwC;AACxC,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AASlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAalE;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gFAAgF;IAChF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACzC;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAsFxC,CAAC"}
@@ -0,0 +1,124 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * `<Talk2ViewChat>` — the packaged chat, filling whatever box you put it in: a
5
+ * Word task pane, a partner's side panel, a page section.
6
+ *
7
+ * ```tsx
8
+ * import { Talk2ViewChat } from '@talk2view/sdk/chat';
9
+ * import '@talk2view/sdk/chat.css';
10
+ *
11
+ * <Talk2ViewChat partnerKey="pk_live_…" welcome={{ suggestions: ['What can you do?'] }} />
12
+ * ```
13
+ *
14
+ * The frame is ported from the website's assistant modal, minus the popover:
15
+ * a header of one-tap views over a thread that never unmounts, so switching to
16
+ * Settings and back keeps the conversation, the scroll position and any
17
+ * half-typed message.
18
+ */
19
+ import { useEffect, useMemo, useRef, useState, } from 'react';
20
+ import { HistoryIcon, PlusIcon, SettingsIcon, UserRoundIcon } from 'lucide-react';
21
+ import { ThreadListPrimitive, useAuiState } from '@assistant-ui/react';
22
+ import { Thread, ComposerExtrasContext } from './vendor/thread.aui.js';
23
+ import { TooltipIconButton } from './vendor/tooltip-icon-button.js';
24
+ import { cn } from './lib/cn.js';
25
+ import { ChatProvider, useChatContext } from './provider.js';
26
+ import { Welcome } from './welcome.js';
27
+ import { ComposerDictation } from './composer-extras.js';
28
+ import { ToolFallback, ToolGroup } from './tool-fallback.js';
29
+ import { useAuthGate } from './auth-gate.js';
30
+ import { AccountView } from './views/account.js';
31
+ import { SettingsView } from './views/settings.js';
32
+ import { ThreadListView } from './views/thread-list.js';
33
+ const VIEW_TITLES = {
34
+ thread: 'New Chat',
35
+ list: 'Threads',
36
+ settings: 'Settings',
37
+ account: 'Account',
38
+ };
39
+ export function Talk2ViewChat(props) {
40
+ const { className, fontFamily, footer } = props;
41
+ return (_jsx("div", { className: cn('t2v-chat', className),
42
+ // The host page's font unless the integrator names one; nothing is fetched.
43
+ style: fontFamily ? { ['--t2v-font']: fontFamily } : undefined, children: _jsx(ChatProvider, { ...props, children: _jsx(ChatShell, { footer: footer }) }) }));
44
+ }
45
+ /**
46
+ * The frame without the outer `.t2v-chat` box, so the launcher (Task 6) can
47
+ * render the same thing inside its popover.
48
+ */
49
+ export const ChatShell = ({ footer, headerEnd, view: given, onViewChange }) => {
50
+ const { client, features, behaviour, limits } = useChatContext();
51
+ const [own, setOwn] = useState('thread');
52
+ const gate = useAuthGate(client, behaviour.current.allowAnonymous, limits);
53
+ const chosen = given ?? own;
54
+ // Behind the gate the thread is not somewhere to go back to: Settings and the
55
+ // thread list stay reachable, but "back" lands on sign-in until there is an
56
+ // account behind it.
57
+ const view = gate.gated && chosen === 'thread' ? 'account' : chosen;
58
+ const setView = (next) => {
59
+ setOwn(next);
60
+ onViewChange?.(next);
61
+ };
62
+ // An approval stops the agent until somebody answers it, and the thread is
63
+ // `inert` whenever another view is open — so a card arriving while the
64
+ // end-user is in Settings or the thread list is on screen and unclickable,
65
+ // with nothing saying why. Bring the thread back.
66
+ //
67
+ // Account is the exception: it holds a half-typed sign-in, and throwing that
68
+ // away is a worse trade than a decision that waits a moment longer.
69
+ const latest = useRef({ view, setView });
70
+ latest.current = { view, setView };
71
+ useEffect(() => client.on('approvalChange', (approval) => {
72
+ const now = latest.current;
73
+ if (approval && now.view !== 'thread' && now.view !== 'account')
74
+ now.setView('thread');
75
+ }), [client]);
76
+ const components = useMemo(() => ({ Welcome, ToolFallback, ToolGroup }), []);
77
+ // The voice button replaces upstream's mic; the attach button goes when files
78
+ // are off, because upstream renders it whether or not the runtime takes one.
79
+ const extras = useMemo(() => ({ dictate: _jsx(ComposerDictation, {}), attachments: features.attachments }), [features.attachments]);
80
+ // Mounted once: switching views must not throw away the conversation, the
81
+ // scroll position or a half-typed message.
82
+ const thread = useMemo(() => (_jsx(ComposerExtrasContext.Provider, { value: extras, children: _jsx(Thread, { components: components }) })), [components, extras]);
83
+ return (_jsxs("div", { className: "t2v-chat-shell aui-root bg-popover text-popover-foreground flex h-full min-h-0 flex-col overflow-clip text-base antialiased", children: [_jsx(ChatHeader, { view: view, onViewChange: setView, end: headerEnd, signedIn: gate.account.status === 'signed-in' }), _jsxs("div", { className: "t2v-chat-body aui-modal-body relative min-h-0 flex-1", children: [_jsx("div", {
84
+ // An inline ref runs again on every render, which is what keeps this in
85
+ // step with the view. Inert, not unmounted: see `thread` above.
86
+ ref: (node) => {
87
+ if (node)
88
+ node.inert = view !== 'thread';
89
+ }, className: "aui-modal-thread h-full", children: thread }), view === 'list' && features.threadList && (_jsx(ThreadListView, { onSelect: () => setView('thread') })), view === 'settings' && features.settings && _jsx(SettingsView, {}), view === 'account' && (_jsx(AccountView, { reason: gate.reason, onSignedIn: () => setView('thread') }))] }), footer ? (_jsx("div", { className: "t2v-chat-footer text-muted-foreground border-foreground/10 shrink-0 border-t px-3.5 py-2 text-xs", children: footer })) : null] }));
90
+ };
91
+ const ChatHeader = ({ view, onViewChange, end, signedIn }) => {
92
+ const { features } = useChatContext();
93
+ const title = useAuiState((s) => s.threadListItem.title);
94
+ const hasThreads = useAuiState((s) => s.threads.threadIds.length > 0);
95
+ const titleRef = useRef(null);
96
+ const shownViewRef = useRef(view);
97
+ // Switching view moves the content under an unmoved focus ring; send focus to
98
+ // the heading so a screen reader announces what is now on screen — but only
99
+ // when focus was nowhere in particular, never stealing it from a control.
100
+ useEffect(() => {
101
+ if (shownViewRef.current === view)
102
+ return;
103
+ shownViewRef.current = view;
104
+ const heading = titleRef.current;
105
+ const active = document.activeElement;
106
+ if (active === document.body || active === heading?.closest("[role='dialog']")) {
107
+ heading?.focus();
108
+ }
109
+ }, [view]);
110
+ // A one-tap toggle: the button that opened a view closes it again.
111
+ const toggle = (target) => () => onViewChange(view === target ? 'thread' : target);
112
+ return (_jsxs("div", { className: "t2v-chat-header aui-modal-header border-foreground/10 flex h-11 shrink-0 items-center gap-2 border-b ps-3.5 pe-2", children: [_jsx("h2", { ref: titleRef, tabIndex: -1, className: "aui-modal-title min-w-0 flex-1 truncate text-[13px] font-medium outline-none", children: view === 'thread' ? title || VIEW_TITLES.thread : VIEW_TITLES[view] }), _jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [features.account && (_jsxs(TooltipIconButton
113
+ // "Account" in both states. An icon-only button's name should say
114
+ // where it goes, and "Sign in" here collided with the account form's
115
+ // own submit button — two controls, one name, two different actions.
116
+ , {
117
+ // "Account" in both states. An icon-only button's name should say
118
+ // where it goes, and "Sign in" here collided with the account form's
119
+ // own submit button — two controls, one name, two different actions.
120
+ tooltip: "Account", side: "bottom", "aria-pressed": view === 'account', className: cn(HEADER_BUTTON, 'relative'), onClick: toggle('account'), children: [_jsx(UserRoundIcon, { className: "size-3.5" }), signedIn ? (_jsx("span", { "aria-hidden": "true", className: "bg-primary absolute end-1 top-1 size-1.5 rounded-full max-sm:end-2 max-sm:top-2" })) : null] })), features.settings && (_jsx(TooltipIconButton, { tooltip: "Settings", side: "bottom", "aria-pressed": view === 'settings', className: HEADER_BUTTON, onClick: toggle('settings'), children: _jsx(SettingsIcon, { className: "size-3.5" }) })), features.threadList && (_jsx(TooltipIconButton, { tooltip: "Threads", side: "bottom", "aria-pressed": view === 'list', disabled: !hasThreads && view === 'thread', className: HEADER_BUTTON, onClick: toggle('list'), children: _jsx(HistoryIcon, { className: "size-3.5" }) })), _jsx(ThreadListPrimitive.New, { render: _jsx(TooltipIconButton, { tooltip: "New Thread", side: "bottom", className: HEADER_BUTTON, onClick: () => onViewChange('thread') }), children: _jsx(PlusIcon, { className: "size-3.5" }) }), end] })] }));
121
+ };
122
+ /* 28px on a mouse, 36px under a finger — the touch target, not the icon. */
123
+ const HEADER_BUTTON = 'text-muted-foreground hover:text-foreground aria-pressed:bg-muted aria-pressed:text-foreground size-7 max-sm:size-9 rounded-md p-0';
124
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/chat/chat.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GAIT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,cAAc,EAA2B,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,GAA6B;IAC5C,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChD,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QACpC,4EAA4E;QAC5E,KAAK,EAAE,UAAU,CAAC,CAAC,CAAE,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAoB,CAAC,CAAC,CAAC,SAAS,YAEjF,KAAC,YAAY,OAAK,KAAK,YACrB,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,GAAI,GAChB,GACX,CACP,CAAC;AACJ,CAAC;AAYD;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;IAChG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACjE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAW,QAAQ,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,CAAC;IAC5B,8EAA8E;IAC9E,4EAA4E;IAC5E,qBAAqB;IACrB,MAAM,IAAI,GAAa,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,MAAM,OAAO,GAAG,CAAC,IAAc,EAAE,EAAE;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,kDAAkD;IAClD,EAAE;IACF,6EAA6E;IAC7E,oEAAoE;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACnC,SAAS,CACP,GAAG,EAAE,CACH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzF,CAAC,CAAC,EACJ,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CAAmB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/F,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAC,iBAAiB,KAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAC7E,CAAC,QAAQ,CAAC,WAAW,CAAC,CACvB,CAAC;IACF,0EAA0E;IAC1E,2CAA2C;IAC3C,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,CACJ,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAC3C,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,GAAI,GACH,CAClC,EACD,CAAC,UAAU,EAAE,MAAM,CAAC,CACrB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,6HAA6H,aAC1I,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,GAC7C,EACF,eAAK,SAAS,EAAC,sDAAsD,aACnE;wBACE,wEAAwE;wBACxE,gEAAgE;wBAChE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;4BACZ,IAAI,IAAI;gCAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC;wBAC3C,CAAC,EACD,SAAS,EAAC,yBAAyB,YAElC,MAAM,GACH,EACL,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,CACzC,KAAC,cAAc,IAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAI,CACtD,EACA,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ,IAAI,KAAC,YAAY,KAAG,EAG5D,IAAI,KAAK,SAAS,IAAI,CACrB,KAAC,WAAW,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAI,CAC1E,IACG,EACL,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,kGAAkG,YAC9G,MAAM,GACH,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAKX,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAElC,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAC1C,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,mEAAmE;IACnE,MAAM,MAAM,GAAG,CAAC,MAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7F,OAAO,CACL,eAAK,SAAS,EAAC,kHAAkH,aAC/H,aACE,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAC,8EAA8E,YAEvF,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GACjE,EACL,eAAK,SAAS,EAAC,oCAAoC,aAChD,QAAQ,CAAC,OAAO,IAAI,CACnB,MAAC,iBAAiB;oBAChB,kEAAkE;oBAClE,qEAAqE;oBACrE,qEAAqE;;wBAFrE,kEAAkE;wBAClE,qEAAqE;wBACrE,qEAAqE;wBACrE,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,QAAQ,kBACC,IAAI,KAAK,SAAS,EAChC,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,EACxC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,aAE1B,KAAC,aAAa,IAAC,SAAS,EAAC,UAAU,GAAG,EAErC,QAAQ,CAAC,CAAC,CAAC,CACV,8BACc,MAAM,EAClB,SAAS,EAAC,iFAAiF,GAC3F,CACH,CAAC,CAAC,CAAC,IAAI,IACU,CACrB,EACA,QAAQ,CAAC,QAAQ,IAAI,CACpB,KAAC,iBAAiB,IAChB,OAAO,EAAC,UAAU,EAClB,IAAI,EAAC,QAAQ,kBACC,IAAI,KAAK,UAAU,EACjC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,YAE3B,KAAC,YAAY,IAAC,SAAS,EAAC,UAAU,GAAG,GACnB,CACrB,EACA,QAAQ,CAAC,UAAU,IAAI,CACtB,KAAC,iBAAiB,IAChB,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,QAAQ,kBACC,IAAI,KAAK,MAAM,EAC7B,QAAQ,EAAE,CAAC,UAAU,IAAI,IAAI,KAAK,QAAQ,EAC1C,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,YAEvB,KAAC,WAAW,IAAC,SAAS,EAAC,UAAU,GAAG,GAClB,CACrB,EACD,KAAC,mBAAmB,CAAC,GAAG,IACtB,MAAM,EACJ,KAAC,iBAAiB,IAChB,OAAO,EAAC,YAAY,EACpB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,GACrC,YAGJ,KAAC,QAAQ,IAAC,SAAS,EAAC,UAAU,GAAG,GACT,EACzB,GAAG,IACA,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,aAAa,GACjB,oIAAoI,CAAC"}