@yadsh/dsh-qa-surface 0.13.0 → 0.14.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 (336) hide show
  1. package/README.md +148 -22
  2. package/compatibility.json +7 -3
  3. package/lib/access/capability-catalog.js +22 -6
  4. package/lib/access/capability-catalog.js.map +1 -1
  5. package/lib/access/model.js +36 -2
  6. package/lib/access/model.js.map +1 -1
  7. package/lib/access/service.js +19 -4
  8. package/lib/access/service.js.map +1 -1
  9. package/lib/account-remotes.js +4 -0
  10. package/lib/account-remotes.js.map +1 -1
  11. package/lib/accounts/database.js +49 -9
  12. package/lib/accounts/database.js.map +1 -1
  13. package/lib/accounts/errors.js.map +1 -1
  14. package/lib/accounts/file.js.map +1 -1
  15. package/lib/accounts/store.js +53 -8
  16. package/lib/accounts/store.js.map +1 -1
  17. package/lib/admin/permissions.js +6 -0
  18. package/lib/admin/permissions.js.map +1 -1
  19. package/lib/admin/quality-store.js +95 -19
  20. package/lib/admin/quality-store.js.map +1 -1
  21. package/lib/admin/service.js +178 -0
  22. package/lib/admin/service.js.map +1 -1
  23. package/lib/cli.js +24 -4
  24. package/lib/cli.js.map +1 -1
  25. package/lib/client/QaAccountsController.js +52 -5
  26. package/lib/client/QaAccountsController.js.map +1 -1
  27. package/lib/client/QaConfigController.js.map +1 -1
  28. package/lib/client/QaSessionController.js +626 -63
  29. package/lib/client/QaSessionController.js.map +1 -1
  30. package/lib/client/QaSurface.js +279 -43
  31. package/lib/client/QaSurface.js.map +1 -1
  32. package/lib/client/QaSurfaceGuard.js +2 -2
  33. package/lib/client/QaSurfaceGuard.js.map +1 -1
  34. package/lib/client/QaTranscriptAdapter.js +4 -2
  35. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  36. package/lib/client/admin/QaAdmin.js +59 -34
  37. package/lib/client/admin/QaAdmin.js.map +1 -1
  38. package/lib/client/admin/pages/Conversations.js +12 -12
  39. package/lib/client/admin/pages/Conversations.js.map +1 -1
  40. package/lib/client/admin/pages/ExpertMemory.js +210 -0
  41. package/lib/client/admin/pages/ExpertMemory.js.map +1 -0
  42. package/lib/client/admin/pages/Overview.js +4 -4
  43. package/lib/client/admin/pages/Overview.js.map +1 -1
  44. package/lib/client/admin/pages/Quality.js +5 -5
  45. package/lib/client/admin/pages/Quality.js.map +1 -1
  46. package/lib/client/admin/pages/Review.js +5 -5
  47. package/lib/client/admin/pages/Review.js.map +1 -1
  48. package/lib/client/admin/pages/SkillFiles.js +3 -3
  49. package/lib/client/admin/pages/SkillFiles.js.map +1 -1
  50. package/lib/client/admin/pages/Users.js +12 -12
  51. package/lib/client/admin/pages/Users.js.map +1 -1
  52. package/lib/client/admin/routes.js +4 -0
  53. package/lib/client/admin/routes.js.map +1 -1
  54. package/lib/client/admin/shared.js +15 -6
  55. package/lib/client/admin/shared.js.map +1 -1
  56. package/lib/client/admin/styles.js +3 -0
  57. package/lib/client/admin/styles.js.map +1 -1
  58. package/lib/client/attestation.js +11 -2
  59. package/lib/client/attestation.js.map +1 -1
  60. package/lib/client/audit/QaAuditDialog.js +2 -2
  61. package/lib/client/audit/QaAuditDialog.js.map +1 -1
  62. package/lib/client/audit/QaAuditRowBadge.js +1 -1
  63. package/lib/client/audit/QaAuditRowBadge.js.map +1 -1
  64. package/lib/client/components/Markdown.js +7 -2
  65. package/lib/client/components/Markdown.js.map +1 -1
  66. package/lib/client/components/QaAgentsDrawer.js +7 -5
  67. package/lib/client/components/QaAgentsDrawer.js.map +1 -1
  68. package/lib/client/components/QaApproval.js +2 -2
  69. package/lib/client/components/QaApproval.js.map +1 -1
  70. package/lib/client/components/QaAuthGate.js +6 -6
  71. package/lib/client/components/QaAuthGate.js.map +1 -1
  72. package/lib/client/components/QaChangelog.js +64 -0
  73. package/lib/client/components/QaChangelog.js.map +1 -1
  74. package/lib/client/components/QaComposer.js +9 -6
  75. package/lib/client/components/QaComposer.js.map +1 -1
  76. package/lib/client/components/QaFileAttachment.js +1 -1
  77. package/lib/client/components/QaFileAttachment.js.map +1 -1
  78. package/lib/client/components/QaFilesPanel.js +7 -7
  79. package/lib/client/components/QaFilesPanel.js.map +1 -1
  80. package/lib/client/components/QaHeader.js +4 -4
  81. package/lib/client/components/QaHeader.js.map +1 -1
  82. package/lib/client/components/QaMessage.js +12 -12
  83. package/lib/client/components/QaMessage.js.map +1 -1
  84. package/lib/client/components/QaModal.js +11 -2
  85. package/lib/client/components/QaModal.js.map +1 -1
  86. package/lib/client/components/QaQuestions.js +4 -4
  87. package/lib/client/components/QaQuestions.js.map +1 -1
  88. package/lib/client/components/QaQueueDock.js +137 -0
  89. package/lib/client/components/QaQueueDock.js.map +1 -0
  90. package/lib/client/components/QaRequestQueue.js +22 -0
  91. package/lib/client/components/QaRequestQueue.js.map +1 -0
  92. package/lib/client/components/QaRightRail.js +2 -2
  93. package/lib/client/components/QaRightRail.js.map +1 -1
  94. package/lib/client/components/QaSidebar.js +66 -6
  95. package/lib/client/components/QaSidebar.js.map +1 -1
  96. package/lib/client/components/QaSourcesPanel.js +10 -8
  97. package/lib/client/components/QaSourcesPanel.js.map +1 -1
  98. package/lib/client/components/QaThemeSwitcher.js +19 -0
  99. package/lib/client/components/QaThemeSwitcher.js.map +1 -0
  100. package/lib/client/components/QaTurnNotice.js +40 -0
  101. package/lib/client/components/QaTurnNotice.js.map +1 -0
  102. package/lib/client/components/QaTurnRail.js +3 -3
  103. package/lib/client/components/QaTurnRail.js.map +1 -1
  104. package/lib/client/components/QaWelcomeNotice.js +2 -6
  105. package/lib/client/components/QaWelcomeNotice.js.map +1 -1
  106. package/lib/client/components/QaWidthHandle.js +2 -2
  107. package/lib/client/components/QaWidthHandle.js.map +1 -1
  108. package/lib/client/components/QaWorkGroup.js +5 -5
  109. package/lib/client/components/QaWorkGroup.js.map +1 -1
  110. package/lib/client/components/QaWorkspaceBrowser.js +10 -10
  111. package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
  112. package/lib/client/components/VariantSwitcher.js +1 -1
  113. package/lib/client/components/VariantSwitcher.js.map +1 -1
  114. package/lib/client/failure-copy.js +26 -8
  115. package/lib/client/failure-copy.js.map +1 -1
  116. package/lib/client/focus-ring.js +193 -0
  117. package/lib/client/focus-ring.js.map +1 -0
  118. package/lib/client/index.js +40 -20
  119. package/lib/client/index.js.map +1 -1
  120. package/lib/client/lineage.js +3 -16
  121. package/lib/client/lineage.js.map +1 -1
  122. package/lib/client/markdown/CodeBlock.js +2 -2
  123. package/lib/client/markdown/CodeBlock.js.map +1 -1
  124. package/lib/client/markdown/blocks.js +118 -31
  125. package/lib/client/markdown/blocks.js.map +1 -1
  126. package/lib/client/markdown/math.js +1 -1
  127. package/lib/client/markdown/math.js.map +1 -1
  128. package/lib/client/markdown/render.js +32 -16
  129. package/lib/client/markdown/render.js.map +1 -1
  130. package/lib/client/markdown/source-chip.js +3 -3
  131. package/lib/client/markdown/source-chip.js.map +1 -1
  132. package/lib/client/notifications/notification-dispatcher.js +90 -0
  133. package/lib/client/notifications/notification-dispatcher.js.map +1 -0
  134. package/lib/client/notifications/preferences.js +61 -0
  135. package/lib/client/notifications/preferences.js.map +1 -0
  136. package/lib/client/notifications/turn-completion-source.js +82 -0
  137. package/lib/client/notifications/turn-completion-source.js.map +1 -0
  138. package/lib/client/notifications/use-turn-notifications.js +108 -0
  139. package/lib/client/notifications/use-turn-notifications.js.map +1 -0
  140. package/lib/client/panels/PanelHost.js +5 -5
  141. package/lib/client/panels/PanelHost.js.map +1 -1
  142. package/lib/client/panels/PanelLauncher.js +2 -2
  143. package/lib/client/panels/PanelLauncher.js.map +1 -1
  144. package/lib/client/project-session-state.js +156 -4
  145. package/lib/client/project-session-state.js.map +1 -1
  146. package/lib/client/role/RoleSelector.js +9 -4
  147. package/lib/client/role/RoleSelector.js.map +1 -1
  148. package/lib/client/settings/card.js +58 -17
  149. package/lib/client/settings/card.js.map +1 -1
  150. package/lib/client/settings/fields.js +11 -10
  151. package/lib/client/settings/fields.js.map +1 -1
  152. package/lib/client/settings/format.js +0 -9
  153. package/lib/client/settings/format.js.map +1 -1
  154. package/lib/client/settings/sections/access.js +5 -5
  155. package/lib/client/settings/sections/access.js.map +1 -1
  156. package/lib/client/settings/sections/accounts.js +10 -10
  157. package/lib/client/settings/sections/accounts.js.map +1 -1
  158. package/lib/client/settings/sections/attachments.js +6 -6
  159. package/lib/client/settings/sections/attachments.js.map +1 -1
  160. package/lib/client/settings/sections/branding.js +7 -7
  161. package/lib/client/settings/sections/branding.js.map +1 -1
  162. package/lib/client/settings/sections/common.js +4 -2
  163. package/lib/client/settings/sections/common.js.map +1 -1
  164. package/lib/client/settings/sections/docs.js +4 -3
  165. package/lib/client/settings/sections/docs.js.map +1 -1
  166. package/lib/client/settings/sections/embedding.js +2 -2
  167. package/lib/client/settings/sections/embedding.js.map +1 -1
  168. package/lib/client/settings/sections/interface.js +12 -12
  169. package/lib/client/settings/sections/interface.js.map +1 -1
  170. package/lib/client/settings/sections/lockdown.js +9 -9
  171. package/lib/client/settings/sections/lockdown.js.map +1 -1
  172. package/lib/client/settings/sections/notes.js +12 -12
  173. package/lib/client/settings/sections/notes.js.map +1 -1
  174. package/lib/client/settings/sections/session.js +15 -12
  175. package/lib/client/settings/sections/session.js.map +1 -1
  176. package/lib/client/settings/sections/slash.js +9 -9
  177. package/lib/client/settings/sections/slash.js.map +1 -1
  178. package/lib/client/settings/sections/sources.js +26 -26
  179. package/lib/client/settings/sections/sources.js.map +1 -1
  180. package/lib/client/settings/sections/status.js +2 -2
  181. package/lib/client/settings/sections/status.js.map +1 -1
  182. package/lib/client/settings/styles.js +15 -9
  183. package/lib/client/settings/styles.js.map +1 -1
  184. package/lib/client/slash/SlashPalette.js +4 -4
  185. package/lib/client/slash/SlashPalette.js.map +1 -1
  186. package/lib/client/styles.js +133 -83
  187. package/lib/client/styles.js.map +1 -1
  188. package/lib/client/theme-preference.js +162 -0
  189. package/lib/client/theme-preference.js.map +1 -0
  190. package/lib/client/types.js +8 -0
  191. package/lib/client/types.js.map +1 -1
  192. package/lib/client/use-session-ui-state.js +7 -5
  193. package/lib/client/use-session-ui-state.js.map +1 -1
  194. package/lib/client/user-settings/GeneralSettingsPage.js +6 -6
  195. package/lib/client/user-settings/GeneralSettingsPage.js.map +1 -1
  196. package/lib/client/user-settings/IntegrationTokensPage.js +6 -6
  197. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
  198. package/lib/client/user-settings/NotificationSettingsPage.js +107 -0
  199. package/lib/client/user-settings/NotificationSettingsPage.js.map +1 -0
  200. package/lib/client/user-settings/PasswordSettingsPage.js +1 -1
  201. package/lib/client/user-settings/PasswordSettingsPage.js.map +1 -1
  202. package/lib/client/user-settings/ProfileSettingsPage.js +2 -2
  203. package/lib/client/user-settings/ProfileSettingsPage.js.map +1 -1
  204. package/lib/client/user-settings/SkillCatalog.js +3 -3
  205. package/lib/client/user-settings/SkillCatalog.js.map +1 -1
  206. package/lib/client/user-settings/SkillEditor.js +26 -8
  207. package/lib/client/user-settings/SkillEditor.js.map +1 -1
  208. package/lib/client/user-settings/SkillToolPicker.js +3 -3
  209. package/lib/client/user-settings/SkillToolPicker.js.map +1 -1
  210. package/lib/client/user-settings/SkillsSettingsPage.js +1 -1
  211. package/lib/client/user-settings/SkillsSettingsPage.js.map +1 -1
  212. package/lib/client/user-settings/StartersSettingsPage.js +6 -6
  213. package/lib/client/user-settings/StartersSettingsPage.js.map +1 -1
  214. package/lib/client/user-settings/UserSettingsDialog.js +7 -2
  215. package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
  216. package/lib/client/user-settings/copy.js +2 -0
  217. package/lib/client/user-settings/copy.js.map +1 -1
  218. package/lib/client/user-settings/draft.js +4 -1
  219. package/lib/client/user-settings/draft.js.map +1 -1
  220. package/lib/client/user-settings/fields.js +5 -5
  221. package/lib/client/user-settings/fields.js.map +1 -1
  222. package/lib/client.js +7228 -4002
  223. package/lib/client.js.map +1 -1
  224. package/lib/config-resolvers/defaults.js +7 -0
  225. package/lib/config-resolvers/defaults.js.map +1 -1
  226. package/lib/config-resolvers/lockdown.js +7 -0
  227. package/lib/config-resolvers/lockdown.js.map +1 -1
  228. package/lib/config-resolvers/notifications.js +15 -0
  229. package/lib/config-resolvers/notifications.js.map +1 -0
  230. package/lib/config-resolvers/session.js +11 -1
  231. package/lib/config-resolvers/session.js.map +1 -1
  232. package/lib/config.js +67 -18
  233. package/lib/config.js.map +1 -1
  234. package/lib/enforcement/tool-grants.js +6 -6
  235. package/lib/enforcement/tool-grants.js.map +1 -1
  236. package/lib/index.js +145 -30
  237. package/lib/index.js.map +1 -1
  238. package/lib/integration/answer.js +74 -8
  239. package/lib/integration/answer.js.map +1 -1
  240. package/lib/integration/expert-memory.js +39 -0
  241. package/lib/integration/expert-memory.js.map +1 -0
  242. package/lib/integration/host-runner.js +26 -14
  243. package/lib/integration/host-runner.js.map +1 -1
  244. package/lib/notifications.js +66 -0
  245. package/lib/notifications.js.map +1 -0
  246. package/lib/personal-skills/errors.js.map +1 -1
  247. package/lib/personal-skills/service.js +81 -7
  248. package/lib/personal-skills/service.js.map +1 -1
  249. package/lib/prompt-notes.js +2 -10
  250. package/lib/prompt-notes.js.map +1 -1
  251. package/lib/qa-tools/docs-tools.js +1 -1
  252. package/lib/qa-tools/docs-tools.js.map +1 -1
  253. package/lib/qa-tools/lifecycle.js +6 -3
  254. package/lib/qa-tools/lifecycle.js.map +1 -1
  255. package/lib/request-queue.js +32 -0
  256. package/lib/request-queue.js.map +1 -0
  257. package/lib/resolve-config.js +2 -0
  258. package/lib/resolve-config.js.map +1 -1
  259. package/lib/secure-session.js +7 -2
  260. package/lib/secure-session.js.map +1 -1
  261. package/lib/shared/settings.js +19 -2
  262. package/lib/shared/settings.js.map +1 -1
  263. package/lib/turn-failure-log.js +67 -0
  264. package/lib/turn-failure-log.js.map +1 -0
  265. package/lib/typert.host.js +1398 -651
  266. package/lib/typert.remote-client.d.ts +15 -1
  267. package/lib/typert.remote-client.js +1315 -645
  268. package/lib/types/access/capability-catalog.d.ts +20 -4
  269. package/lib/types/access/model.d.ts +23 -0
  270. package/lib/types/access/service.d.ts +2 -3
  271. package/lib/types/account-remotes.d.ts +8 -1
  272. package/lib/types/accounts/database.d.ts +13 -3
  273. package/lib/types/accounts/errors.d.ts +9 -1
  274. package/lib/types/accounts/file.d.ts +12 -0
  275. package/lib/types/accounts/store.d.ts +30 -2
  276. package/lib/types/admin/quality-store.d.ts +33 -0
  277. package/lib/types/admin/service.d.ts +60 -1
  278. package/lib/types/client/QaAccountsController.d.ts +25 -2
  279. package/lib/types/client/QaConfigController.d.ts +2 -2
  280. package/lib/types/client/QaSessionController.d.ts +199 -6
  281. package/lib/types/client/QaSurface.d.ts +6 -1
  282. package/lib/types/client/admin/pages/ExpertMemory.d.ts +19 -0
  283. package/lib/types/client/admin/routes.d.ts +3 -1
  284. package/lib/types/client/admin/shared.d.ts +4 -0
  285. package/lib/types/client/components/Markdown.d.ts +8 -1
  286. package/lib/types/client/components/QaHeader.d.ts +3 -1
  287. package/lib/types/client/components/QaModal.d.ts +7 -0
  288. package/lib/types/client/components/QaQueueDock.d.ts +27 -0
  289. package/lib/types/client/components/QaRequestQueue.d.ts +20 -0
  290. package/lib/types/client/components/QaThemeSwitcher.d.ts +14 -0
  291. package/lib/types/client/components/QaTurnNotice.d.ts +55 -0
  292. package/lib/types/client/focus-ring.d.ts +65 -0
  293. package/lib/types/client/lineage.d.ts +3 -13
  294. package/lib/types/client/markdown/blocks.d.ts +30 -2
  295. package/lib/types/client/markdown/render.d.ts +4 -1
  296. package/lib/types/client/notifications/notification-dispatcher.d.ts +68 -0
  297. package/lib/types/client/notifications/preferences.d.ts +44 -0
  298. package/lib/types/client/notifications/turn-completion-source.d.ts +114 -0
  299. package/lib/types/client/notifications/use-turn-notifications.d.ts +51 -0
  300. package/lib/types/client/project-session-state.d.ts +35 -1
  301. package/lib/types/client/role/RoleSelector.d.ts +7 -1
  302. package/lib/types/client/settings/card.d.ts +36 -5
  303. package/lib/types/client/settings/fields.d.ts +24 -0
  304. package/lib/types/client/settings/format.d.ts +0 -5
  305. package/lib/types/client/settings/sections/common.d.ts +3 -1
  306. package/lib/types/client/settings/sections/session.d.ts +2 -1
  307. package/lib/types/client/settings/styles.d.ts +9 -4
  308. package/lib/types/client/settings-extensions/user-session.d.ts +1 -1
  309. package/lib/types/client/theme-preference.d.ts +69 -0
  310. package/lib/types/client/types.d.ts +25 -1
  311. package/lib/types/client/use-session-ui-state.d.ts +6 -4
  312. package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -5
  313. package/lib/types/client/user-settings/NotificationSettingsPage.d.ts +40 -0
  314. package/lib/types/client/user-settings/UserSettingsDialog.d.ts +12 -2
  315. package/lib/types/client/user-settings/draft.d.ts +4 -1
  316. package/lib/types/client/user-settings/fields.d.ts +7 -0
  317. package/lib/types/config-resolvers/notifications.d.ts +10 -0
  318. package/lib/types/config-resolvers/session.d.ts +6 -0
  319. package/lib/types/config.d.ts +20 -1
  320. package/lib/types/index.d.ts +53 -5
  321. package/lib/types/integration/answer.d.ts +27 -0
  322. package/lib/types/integration/expert-memory.d.ts +49 -0
  323. package/lib/types/notifications.d.ts +32 -0
  324. package/lib/types/personal-skills/errors.d.ts +1 -1
  325. package/lib/types/personal-skills/service.d.ts +6 -0
  326. package/lib/types/prompt-notes.d.ts +17 -4
  327. package/lib/types/request-queue.d.ts +32 -0
  328. package/lib/types/shared/settings.d.ts +19 -2
  329. package/lib/types/turn-failure-log.d.ts +18 -0
  330. package/lib/types/types.d.ts +180 -4
  331. package/package.json +64 -63
  332. package/scripts/attach-workspace-sessions.mjs +24 -5
  333. package/scripts/repair-session-events.mjs +25 -5
  334. package/lib/client/markdown/MermaidBlock.js +0 -80
  335. package/lib/client/markdown/MermaidBlock.js.map +0 -1
  336. package/lib/types/client/markdown/MermaidBlock.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,SAAS;IAChB,yDAAyD;IACzD,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,uBAAuB;IACvB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,kBAAkB;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,gBAAgB;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,yBAAyB;IACzB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,mDAAmD;IACnD,cAAc,EAAE,SAAS;IACzB,qDAAqD;IACrD,OAAO,EAAE,wBAAwB;CACzB,CAAC;AAEX,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE/C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;KACrD,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;KAChE,IAAI,CAAC,GAAG,CAAC,CAAC;AAEb;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAA;qHAC0E,CAAC;AAEtH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;kBACzB,eAAe;;;;;qBAKZ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0HpB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0Nf,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mJAgDoH,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAme/I,eAAe;;;;;;;;;;;;;;;;;;;;;;EAsBnC,uBAAuB;CACxB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,iBAAiB;EAChD,SAAS;EACT,eAAe,EAAE,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,wBAAwB;EAC1D,cAAc,EAAE,CAAC"}
@@ -0,0 +1,162 @@
1
+ import { useCallback, useEffect, useState, useSyncExternalStore } from "react";
2
+ /**
3
+ * The palette the surface paints with. The Host owns the same three
4
+ * preferences and applies the one it stores; its settings surface is not
5
+ * reachable from `/qa` — the overlay suppresses the native shell, and the
6
+ * kiosk never mounts it — so the QA page carries its own choice.
7
+ *
8
+ * The choice is browser-local on purpose: it is written to this deployment's
9
+ * localStorage namespace, never to the Host user-settings document, because a
10
+ * stand is shared by everyone who opens it and one visitor's eyes are not a
11
+ * deployment setting.
12
+ */
13
+ /** The preferences the control offers — the same vocabulary the Host uses. */
14
+ export const QA_THEME_PREFERENCES = ["light", "dark", "system"];
15
+ /** Body attribute that selects the dark palette in the Host token sheet. */
16
+ export const QA_DARK_THEME_ATTRIBUTE = "data-ds-dark-theme";
17
+ function isQaThemePreference(value) {
18
+ return QA_THEME_PREFERENCES.some((preference) => preference === value);
19
+ }
20
+ /** `light`/`dark` are themselves; `system` is whatever the OS asks for. */
21
+ export function resolveQaThemeScheme(preference, systemDark) {
22
+ if (preference === "system")
23
+ return systemDark ? "dark" : "light";
24
+ return preference;
25
+ }
26
+ /** The stored choice, or null when this browser never picked one. */
27
+ export function readQaThemePreference(storage, key) {
28
+ try {
29
+ const raw = storage.getItem(key);
30
+ return isQaThemePreference(raw) ? raw : null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function writeQaThemePreference(storage, key, preference) {
37
+ try {
38
+ storage.setItem(key, preference);
39
+ }
40
+ catch {
41
+ // Denied durable storage only costs persistence across reloads.
42
+ }
43
+ }
44
+ /**
45
+ * What the control shows while this browser has no choice of its own: the
46
+ * palette the document is already painted with, read through the Host's own
47
+ * contract. The Host publishes its *preference* nowhere in the DOM — only the
48
+ * resolved palette — so an untouched stand is reported as the palette it
49
+ * shows, never as a preference this browser did not pick.
50
+ */
51
+ export function readQaThemeScheme(target) {
52
+ return target.body.hasAttribute(QA_DARK_THEME_ATTRIBUTE) ? "dark" : "light";
53
+ }
54
+ /**
55
+ * Project one preference onto the document, writing exactly the two fields the
56
+ * Host's own presenter owns for the same choice: the native-chrome scheme on
57
+ * the root and the palette attribute on the body. Nothing else — the font-size
58
+ * axis and the theme token overrides stay the Host's.
59
+ */
60
+ export function applyQaThemePreference(target, preference, systemDark) {
61
+ const scheme = resolveQaThemeScheme(preference, systemDark);
62
+ target.documentElement.style.colorScheme = scheme;
63
+ if (scheme === "dark")
64
+ target.body.setAttribute(QA_DARK_THEME_ATTRIBUTE, "");
65
+ else
66
+ target.body.removeAttribute(QA_DARK_THEME_ATTRIBUTE);
67
+ }
68
+ function readSystemDarkScheme() {
69
+ if (typeof matchMedia !== "function")
70
+ return false;
71
+ return matchMedia("(prefers-color-scheme: dark)").matches;
72
+ }
73
+ function readQaThemePaintState(target) {
74
+ return {
75
+ scheme: target.documentElement.style.colorScheme,
76
+ dark: target.body.hasAttribute(QA_DARK_THEME_ATTRIBUTE),
77
+ };
78
+ }
79
+ /**
80
+ * Put one of these back verbatim. Unlike `applyQaThemePreference` it carries the
81
+ * empty `color-scheme` a browser that never chose leaves behind, so restoring is
82
+ * not the same as painting `light`.
83
+ */
84
+ function writeQaThemePaintState(target, state) {
85
+ target.documentElement.style.colorScheme = state.scheme;
86
+ if (state.dark)
87
+ target.body.setAttribute(QA_DARK_THEME_ATTRIBUTE, "");
88
+ else
89
+ target.body.removeAttribute(QA_DARK_THEME_ATTRIBUTE);
90
+ }
91
+ /**
92
+ * The painted palette as an external store. Reading it during the render would
93
+ * report the palette the document wore the last time React rendered this
94
+ * component, and nothing re-renders it when the Host repaints underneath; the
95
+ * control would then name a theme the visitor is not looking at.
96
+ */
97
+ function subscribeQaThemeScheme(onChange) {
98
+ const observer = new MutationObserver(onChange);
99
+ observer.observe(document.body, {
100
+ attributes: true,
101
+ attributeFilter: [QA_DARK_THEME_ATTRIBUTE],
102
+ });
103
+ return () => {
104
+ observer.disconnect();
105
+ };
106
+ }
107
+ function getQaThemeSchemeSnapshot() {
108
+ return readQaThemeScheme(document);
109
+ }
110
+ /**
111
+ * Own the palette for as long as the surface is what the visitor sees, and only
112
+ * for as long as this browser actually asked for one: an explicit choice is
113
+ * written to storage and projected onto the document, `system` keeps answering
114
+ * the OS, and a visitor who never touches the control leaves the Host's own
115
+ * palette in force — the surface writes nothing at all in that case.
116
+ */
117
+ export function useQaThemePreference({ active, storage, storageKey, }) {
118
+ const [stored, setStored] = useState(() => readQaThemePreference(storage, storageKey));
119
+ const [systemDark, setSystemDark] = useState(readSystemDarkScheme);
120
+ useEffect(() => {
121
+ if (typeof matchMedia !== "function")
122
+ return;
123
+ const query = matchMedia("(prefers-color-scheme: dark)");
124
+ const onChange = () => {
125
+ setSystemDark(query.matches);
126
+ };
127
+ onChange();
128
+ query.addEventListener("change", onChange);
129
+ return () => {
130
+ query.removeEventListener("change", onChange);
131
+ };
132
+ }, []);
133
+ useEffect(() => {
134
+ if (!active || stored === null)
135
+ return;
136
+ // The surface borrows the document rather than owning it: the palette it
137
+ // finds here is the one the Host put on the page, and leaving `/qa` — the
138
+ // route going inactive, or the overlay unmounting altogether — has to hand
139
+ // it back, because off its own route this control is not even on screen to
140
+ // take the choice back off. `QaSurfaceGuard` keeps the same contract for the
141
+ // body mask and the host's own icons. The snapshot is retaken on every run,
142
+ // so a Host repaint between two of them is a repaint the restore returns to,
143
+ // not one it overwrites.
144
+ const worn = readQaThemePaintState(document);
145
+ applyQaThemePreference(document, stored, systemDark);
146
+ return () => {
147
+ writeQaThemePaintState(document, worn);
148
+ };
149
+ }, [active, stored, systemDark]);
150
+ const select = useCallback((next) => {
151
+ writeQaThemePreference(storage, storageKey, next);
152
+ setStored(next);
153
+ }, [storage, storageKey]);
154
+ const painted = useSyncExternalStore(subscribeQaThemeScheme, getQaThemeSchemeSnapshot);
155
+ return {
156
+ // With no choice of its own, this browser reports what the document is
157
+ // already painted with rather than claiming a preference nobody picked.
158
+ preference: stored ?? painted,
159
+ select,
160
+ };
161
+ }
162
+ //# sourceMappingURL=theme-preference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-preference.js","sourceRoot":"","sources":["../../src/client/theme-preference.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,17 @@
2
2
  export const QA_SESSION_IDLE_STATE = Object.freeze({
3
3
  phase: "idle",
4
4
  sessionId: null,
5
+ // Reserved for "no chat": the controller's chat identities come from a
6
+ // sequence that starts at 1, so this snapshot never collides with one.
7
+ chatKey: 0,
5
8
  messages: Object.freeze([]),
6
9
  pendingMessage: null,
7
10
  error: null,
8
11
  compatibilityReadOnly: false,
9
12
  canSend: false,
10
13
  canStop: false,
14
+ queue: Object.freeze([]),
15
+ canEditQueue: false,
11
16
  chatsRevision: 0,
12
17
  sources: Object.freeze([]),
13
18
  sourcesComplete: true,
@@ -15,6 +20,9 @@ export const QA_SESSION_IDLE_STATE = Object.freeze({
15
20
  viewingSubagent: null,
16
21
  approvals: Object.freeze([]),
17
22
  questions: Object.freeze([]),
23
+ // No send was held back: the ceiling only speaks when a question reaches for
24
+ // a place that is already taken.
25
+ requestQueue: null,
18
26
  // Idle means no chat, so there is nothing for a slash line to act on; the
19
27
  // controller fills this in once a session binds.
20
28
  slash: Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AA0oBA,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAmB,MAAM,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,IAAI;IACX,qBAAqB,EAAE,KAAK;IAC5B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,eAAe,EAAE,IAAI;IACrB,uBAAuB,EAAE,SAAS;IAClC,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAisBA,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAmB,MAAM,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,IAAI;IACf,uEAAuE;IACvE,uEAAuE;IACvE,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,cAAc,EAAE,IAAI;IACpB,KAAK,EAAE,IAAI;IACX,qBAAqB,EAAE,KAAK;IAC5B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACxB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,eAAe,EAAE,IAAI;IACrB,uBAAuB,EAAE,SAAS;IAClC,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,iCAAiC;IACjC,YAAY,EAAE,IAAI;IAClB,0EAA0E;IAC1E,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC"}
@@ -2,11 +2,13 @@ import { useCallback, useEffect, useRef, useState, } from "react";
2
2
  import { revokeObjectUrlIfBlob } from "./session-assets.js";
3
3
  /**
4
4
  * Per-chat UI state: composer attachments, variant offsets, the rail mark and
5
- * the drawers. Everything here describes the chat it was made in, so a
6
- * session change clears it instead of leaking a draft, an attachment or a
7
- * drawer from one conversation into the next.
5
+ * the drawers. Everything here describes the chat it was made in, so a chat
6
+ * change clears it instead of leaking a draft, an attachment or a drawer from
7
+ * one conversation into the next. The key is the surface's chat identity, not
8
+ * the session id: a new chat only creates its session on the first prompt, and
9
+ * the attachments of that prompt must survive the hand-off.
8
10
  */
9
- export function useSessionUiState(sessionId) {
11
+ export function useSessionUiState(chatKey) {
10
12
  /** Per group: how many answers back from the newest is shown (0 = newest). */
11
13
  const [variantOffsets, setVariantOffsets] = useState({});
12
14
  const [activeTurn, setActiveTurn] = useState(null);
@@ -43,7 +45,7 @@ export function useSessionUiState(sessionId) {
43
45
  setDrawerCompleteness(null);
44
46
  setDrawerDetail(null);
45
47
  setPendingAttachments([]);
46
- }, [sessionId, setPendingAttachments]);
48
+ }, [chatKey, setPendingAttachments]);
47
49
  // Whatever is still attached dies with the surface, and its URLs with it.
48
50
  useEffect(() => () => {
49
51
  for (const draft of pendingAttachmentsRef.current) {
@@ -1 +1 @@
1
- {"version":3,"file":"use-session-ui-state.js","sourceRoot":"","sources":["../../src/client/use-session-ui-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-session-ui-state.js","sourceRoot":"","sources":["../../src/client/use-session-ui-state.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { QaSettingsSection } from "./fields.js";
3
3
  /**
4
4
  * Placeholder with a purpose: the section exists so the dialog has a home for
5
- * the user-scoped preferences that follow (notifications, privacy), and so the
6
- * thing it must not become is written down — deployment and chat policy live in
7
- * the Host settings, not here. It shows the account facts a user can act on
8
- * today and nothing invented, and it names only what is still missing: a
9
- * preference that already has its own tab does not belong on this list.
5
+ * the user-scoped preferences that follow (privacy), and so the thing it must
6
+ * not become is written down — deployment and chat policy live in the Host
7
+ * settings, not here. It shows the account facts a user can act on today and
8
+ * nothing invented, and it names only what is still missing: a preference that
9
+ * already has its own tab does not belong on this list.
10
10
  */
11
11
  export function QaGeneralSettingsPage(props) {
12
- return (_jsxs("div", { className: "dsh-qa-settings__page", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", children: "\u041E\u0431\u0449\u0438\u0435" }), _jsx("p", { className: "dsh-qa-settings__lead", children: "\u0412\u0430\u0448\u0438 \u043B\u0438\u0447\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438. \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0430\u043C\u043E\u0433\u043E \u0441\u0442\u0435\u043D\u0434\u0430 \u2014 \u0441\u043E\u0441\u0442\u0430\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432, \u043C\u043E\u0434\u0435\u043B\u044C \u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440." }), _jsx(QaSettingsSection, { title: "\u0410\u043A\u043A\u0430\u0443\u043D\u0442", children: _jsxs("dl", { className: "dsh-qa-settings__facts", children: [_jsxs("div", { className: "dsh-qa-settings__fact", children: [_jsx("dt", { children: "Email" }), _jsx("dd", { children: props.email })] }), _jsxs("div", { className: "dsh-qa-settings__fact", children: [_jsx("dt", { children: "\u0420\u043E\u043B\u044C" }), _jsx("dd", { children: props.role })] }), _jsxs("div", { className: "dsh-qa-settings__fact", children: [_jsx("dt", { children: "\u0412\u0430\u0448\u0438 \u0447\u0430\u0442\u044B" }), _jsx("dd", { children: props.chatCount })] })] }) }), _jsx(QaSettingsSection, { title: "\u0421\u043A\u043E\u0440\u043E \u0437\u0434\u0435\u0441\u044C", children: _jsxs("ul", { className: "dsh-qa-settings__list", children: [_jsx("li", { children: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439" }), _jsx("li", { children: "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u044C \u0438 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0445" })] }) })] }));
12
+ return (_jsxs("div", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-general", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-general-title", children: "\u041E\u0431\u0449\u0438\u0435" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-general-lead", children: "\u0412\u0430\u0448\u0438 \u043B\u0438\u0447\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438. \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0430\u043C\u043E\u0433\u043E \u0441\u0442\u0435\u043D\u0434\u0430 \u2014 \u0441\u043E\u0441\u0442\u0430\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432, \u043C\u043E\u0434\u0435\u043B\u044C \u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440." }), _jsx(QaSettingsSection, { testId: "qa-settings-general-account", title: "\u0410\u043A\u043A\u0430\u0443\u043D\u0442", children: _jsxs("dl", { className: "dsh-qa-settings__facts", "data-testid": "qa-settings-general-facts", children: [_jsxs("div", { className: "dsh-qa-settings__fact", "data-testid": "qa-settings-general-fact-email", children: [_jsx("dt", { children: "Email" }), _jsx("dd", { children: props.email })] }), _jsxs("div", { className: "dsh-qa-settings__fact", "data-testid": "qa-settings-general-fact-role", children: [_jsx("dt", { children: "\u0420\u043E\u043B\u044C" }), _jsx("dd", { children: props.role })] }), _jsxs("div", { className: "dsh-qa-settings__fact", "data-testid": "qa-settings-general-fact-chats", children: [_jsx("dt", { children: "\u0412\u0430\u0448\u0438 \u0447\u0430\u0442\u044B" }), _jsx("dd", { children: props.chatCount })] })] }) }), _jsx(QaSettingsSection, { testId: "qa-settings-general-upcoming", title: "\u0421\u043A\u043E\u0440\u043E \u0437\u0434\u0435\u0441\u044C", children: _jsx("ul", { className: "dsh-qa-settings__list", "data-testid": "qa-settings-general-upcoming-list", children: _jsx("li", { children: "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u044C \u0438 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0445" }) }) })] }));
13
13
  }
14
14
  //# sourceMappingURL=GeneralSettingsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/GeneralSettingsPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAiC;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,aAAI,SAAS,EAAC,6BAA6B,+CAAW,EACtD,YAAG,SAAS,EAAC,uBAAuB,2nBAGhC,EACJ,KAAC,iBAAiB,IAAC,KAAK,EAAC,4CAAS,YAChC,cAAI,SAAS,EAAC,wBAAwB,aACpC,eAAK,SAAS,EAAC,uBAAuB,aACpC,iCAAc,EACd,uBAAK,KAAK,CAAC,KAAK,GAAM,IAClB,EACN,eAAK,SAAS,EAAC,uBAAuB,aACpC,oDAAa,EACb,uBAAK,KAAK,CAAC,IAAI,GAAM,IACjB,EACN,eAAK,SAAS,EAAC,uBAAuB,aACpC,6EAAkB,EAClB,uBAAK,KAAK,CAAC,SAAS,GAAM,IACtB,IACH,GACa,EACpB,KAAC,iBAAiB,IAAC,KAAK,EAAC,+DAAa,YACpC,cAAI,SAAS,EAAC,uBAAuB,aACnC,qJAA8B,EAC9B,2LAAsC,IACnC,GACa,IAChB,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"GeneralSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/GeneralSettingsPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAiC;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,iBAAa,qBAAqB,aACtE,aACE,SAAS,EAAC,6BAA6B,iBAC3B,2BAA2B,+CAGpC,EACL,YACE,SAAS,EAAC,uBAAuB,iBACrB,0BAA0B,2nBAIpC,EACJ,KAAC,iBAAiB,IAAC,MAAM,EAAC,6BAA6B,EAAC,KAAK,EAAC,4CAAS,YACrE,cACE,SAAS,EAAC,wBAAwB,iBACtB,2BAA2B,aAEvC,eACE,SAAS,EAAC,uBAAuB,iBACrB,gCAAgC,aAE5C,iCAAc,EACd,uBAAK,KAAK,CAAC,KAAK,GAAM,IAClB,EACN,eACE,SAAS,EAAC,uBAAuB,iBACrB,+BAA+B,aAE3C,oDAAa,EACb,uBAAK,KAAK,CAAC,IAAI,GAAM,IACjB,EACN,eACE,SAAS,EAAC,uBAAuB,iBACrB,gCAAgC,aAE5C,6EAAkB,EAClB,uBAAK,KAAK,CAAC,SAAS,GAAM,IACtB,IACH,GACa,EACpB,KAAC,iBAAiB,IAChB,MAAM,EAAC,8BAA8B,EACrC,KAAK,EAAC,+DAAa,YAEnB,aACE,SAAS,EAAC,uBAAuB,iBACrB,mCAAmC,YAE/C,2LAAsC,GACnC,GACa,IAChB,CACP,CAAC;AACJ,CAAC"}
@@ -130,21 +130,21 @@ export function QaIntegrationTokensPage(props) {
130
130
  void clipboard.writeText(secret).then(() => setCopied(true), () => undefined);
131
131
  };
132
132
  const now = Date.now();
133
- return (_jsxs("div", { className: "dsh-qa-settings__page", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B" }), _jsx("p", { className: "dsh-qa-settings__lead", children: "\u0422\u043E\u043A\u0435\u043D \u2014 \u044D\u0442\u043E \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B: \u043E\u043D\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u043E\u0442 \u0438\u043C\u0435\u043D\u0438 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438, \u043D\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0412\u044B\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0442\u043E\u043A\u0435\u043D \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043E\u0442\u0437\u044B\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430. \u0422\u043E\u043A\u0435\u043D \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043C\u0435\u043D\u0443 \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0430\u0440\u043E\u043B\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u0442\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E." }), issued === null ? null : (_jsxs(QaSettingsSection, { title: "\u0422\u043E\u043A\u0435\u043D \u0441\u043E\u0437\u0434\u0430\u043D", children: [_jsx(QaSettingsNotice, { tone: "warn", children: "\u0421\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438. \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0433\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043D\u0435\u043B\u044C\u0437\u044F: \u043D\u0430 \u0441\u0442\u0435\u043D\u0434\u0435 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A." }), _jsx(QaSettingsField, { label: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430", hint: "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A Authorization: Bearer \u2026", children: _jsx("input", { className: "dsh-qa-settings__code", value: issued.token, readOnly: true, onFocus: (event) => event.currentTarget.select() }) }), _jsxs(QaSettingsActions, { children: [_jsx(QaSettingsButton, { label: copied ? "Скопировано" : "Скопировать", onClick: () => copySecret(issued.token) }), _jsx(QaSettingsButton, { tone: "primary", label: "\u042F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B \u0442\u043E\u043A\u0435\u043D", onClick: () => {
133
+ return (_jsxs("div", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens", children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-tokens-title", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-tokens-lead", children: "\u0422\u043E\u043A\u0435\u043D \u2014 \u044D\u0442\u043E \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B: \u043E\u043D\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u043E\u0442 \u0438\u043C\u0435\u043D\u0438 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438, \u043D\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0412\u044B\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0442\u043E\u043A\u0435\u043D \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043E\u0442\u0437\u044B\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430. \u0422\u043E\u043A\u0435\u043D \u043F\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043C\u0435\u043D\u0443 \u0432\u0430\u0448\u0435\u0433\u043E \u043F\u0430\u0440\u043E\u043B\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u0442\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E." }), issued === null ? null : (_jsxs(QaSettingsSection, { testId: "qa-settings-tokens-issued", title: "\u0422\u043E\u043A\u0435\u043D \u0441\u043E\u0437\u0434\u0430\u043D", children: [_jsx(QaSettingsNotice, { tone: "warn", testId: "qa-settings-tokens-issued-notice", children: "\u0421\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438. \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0433\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043D\u0435\u043B\u044C\u0437\u044F: \u043D\u0430 \u0441\u0442\u0435\u043D\u0434\u0435 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-secret", label: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430", hint: "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043E \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A Authorization: Bearer \u2026", children: _jsx("input", { className: "dsh-qa-settings__code", value: issued.token, readOnly: true, onFocus: (event) => event.currentTarget.select() }) }), _jsxs(QaSettingsActions, { children: [_jsx(QaSettingsButton, { testId: "qa-settings-tokens-copy", label: copied ? "Скопировано" : "Скопировать", onClick: () => copySecret(issued.token) }), _jsx(QaSettingsButton, { testId: "qa-settings-tokens-ack", tone: "primary", label: "\u042F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B \u0442\u043E\u043A\u0435\u043D", onClick: () => {
134
134
  setIssued(null);
135
135
  setCopied(false);
136
- } })] })] })), _jsx(QaSettingsSection, { title: "\u041D\u043E\u0432\u044B\u0439 \u0442\u043E\u043A\u0435\u043D", children: props.api.canCreate ? (_jsxs("form", { className: "dsh-qa-settings__page", onSubmit: submit, children: [_jsx(QaSettingsField, { label: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", hint: "\u041F\u043E \u043D\u0435\u043C\u0443 \u0432\u044B \u043E\u0442\u043B\u0438\u0447\u0438\u0442\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u0441\u043F\u0438\u0441\u043A\u0435: \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u00AB\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A\u00BB.", children: _jsx("input", { value: label, maxLength: QA_SERVICE_TOKEN_LABEL_MAX, placeholder: "\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A", onChange: (event) => setLabel(event.currentTarget.value) }) }), QA_SERVICE_TOKEN_SCOPES.map((scope) => (_jsx("div", { className: "dsh-qa-settings__toggle-row", children: _jsxs("label", { className: "dsh-qa-settings__toggle", children: [_jsx("input", { type: "checkbox", checked: scopes.includes(scope), onChange: (event) => toggleScope(scope, event.currentTarget.checked) }), _jsx("span", { className: "dsh-qa-settings__toggle-label", children: SCOPE_LABELS[scope] })] }) }, scope))), _jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u041F\u0440\u0430\u0432\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0442 \u0442\u043E\u043A\u0435\u043D, \u043D\u043E \u043D\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u044E\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438: \u0442\u043E\u043A\u0435\u043D \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B." }), _jsx(QaSettingsField, { label: "\u0421\u0440\u043E\u043A, \u0434\u043D\u0435\u0439", hint: `От ${String(QA_SERVICE_TOKEN_TTL_DAYS_MIN)} до ${String(QA_SERVICE_TOKEN_TTL_DAYS_MAX)}; по умолчанию — срок вашей сессии.`, children: _jsx("select", { value: days, onChange: (event) => setDays(Number(event.currentTarget.value)), children: TTL_CHOICES.map((choice) => (_jsx("option", { value: choice, children: choice }, choice))) }) }), _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { type: "submit", tone: "primary", disabled: busy, label: busy ? "Создание…" : "Создать токен" }) })] })) : (_jsx(QaSettingsNotice, { tone: "info", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 API \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0435, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u043E\u043A\u0430 \u043D\u0435 \u0434\u043B\u044F \u0447\u0435\u0433\u043E. \u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0438\u0436\u0435 \u2014 \u0438\u0445 \u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C." })) }), _jsxs(QaSettingsSection, { title: "\u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B", children: [error === null ? null : (_jsx(QaSettingsNotice, { tone: "error", children: error })), loading ? (_jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026" })) : tokens.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u0423 \u0432\u0430\u0441 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u043E\u043A\u0435\u043D\u043E\u0432." })) : (_jsx("ul", { className: "dsh-qa-settings__rows", children: tokens.map((token) => {
136
+ } })] })] })), _jsx(QaSettingsSection, { testId: "qa-settings-tokens-new", title: "\u041D\u043E\u0432\u044B\u0439 \u0442\u043E\u043A\u0435\u043D", children: props.api.canCreate ? (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-tokens-create-form", onSubmit: submit, children: [_jsx(QaSettingsField, { testId: "qa-settings-tokens-label", label: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", hint: "\u041F\u043E \u043D\u0435\u043C\u0443 \u0432\u044B \u043E\u0442\u043B\u0438\u0447\u0438\u0442\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u0441\u043F\u0438\u0441\u043A\u0435: \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u00AB\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A\u00BB.", children: _jsx("input", { value: label, maxLength: QA_SERVICE_TOKEN_LABEL_MAX, placeholder: "\u043C\u043E\u0441\u0442 \u0437\u0430\u044F\u0432\u043E\u043A", onChange: (event) => setLabel(event.currentTarget.value) }) }), QA_SERVICE_TOKEN_SCOPES.map((scope) => (_jsx("div", { className: "dsh-qa-settings__toggle-row", "data-testid": "qa-settings-tokens-scope", children: _jsxs("label", { className: "dsh-qa-settings__toggle", children: [_jsx("input", { type: "checkbox", "data-testid": "qa-settings-tokens-scope-input", checked: scopes.includes(scope), onChange: (event) => toggleScope(scope, event.currentTarget.checked) }), _jsx("span", { className: "dsh-qa-settings__toggle-label", "data-testid": "qa-settings-tokens-scope-label", children: SCOPE_LABELS[scope] })] }) }, scope))), _jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-scopes-hint", children: "\u041F\u0440\u0430\u0432\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0442 \u0442\u043E\u043A\u0435\u043D, \u043D\u043E \u043D\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044F\u044E\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043D\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438: \u0442\u043E\u043A\u0435\u043D \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B." }), _jsx(QaSettingsField, { testId: "qa-settings-tokens-ttl", label: "\u0421\u0440\u043E\u043A, \u0434\u043D\u0435\u0439", hint: `От ${String(QA_SERVICE_TOKEN_TTL_DAYS_MIN)} до ${String(QA_SERVICE_TOKEN_TTL_DAYS_MAX)}; по умолчанию — срок вашей сессии.`, children: _jsx("select", { value: days, onChange: (event) => setDays(Number(event.currentTarget.value)), children: TTL_CHOICES.map((choice) => (_jsx("option", { value: choice, children: choice }, choice))) }) }), _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-tokens-create", type: "submit", tone: "primary", disabled: busy, label: busy ? "Создание…" : "Создать токен" }) })] })) : (_jsx(QaSettingsNotice, { tone: "info", testId: "qa-settings-tokens-api-off", children: "\u0418\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 API \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0442\u0435\u043D\u0434\u0435, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u043E\u043A\u0430 \u043D\u0435 \u0434\u043B\u044F \u0447\u0435\u0433\u043E. \u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u0442\u043E\u043A\u0435\u043D\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0438\u0436\u0435 \u2014 \u0438\u0445 \u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C." })) }), _jsxs(QaSettingsSection, { testId: "qa-settings-tokens-list", title: "\u0412\u044B\u0434\u0430\u043D\u043D\u044B\u0435 \u0442\u043E\u043A\u0435\u043D\u044B", children: [error === null ? null : (_jsx(QaSettingsNotice, { tone: "error", testId: "qa-settings-tokens-error", children: error })), loading ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-loading", children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430\u2026" })) : tokens.length === 0 ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-tokens-empty", children: "\u0423 \u0432\u0430\u0441 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u043E\u043A\u0435\u043D\u043E\u0432." })) : (_jsx("ul", { className: "dsh-qa-settings__rows", "data-testid": "qa-settings-tokens-rows", children: tokens.map((token) => {
137
137
  const state = tokenState(token, now);
138
138
  const confirming = pendingRevoke === token.id;
139
- return (_jsx("li", { className: "dsh-qa-settings__row", children: _jsxs("div", { className: "dsh-qa-settings__row-button", children: [_jsx("span", { className: "dsh-qa-settings__row-title", children: token.label }), _jsx("span", { className: "dsh-qa-settings__row-description", children: scopeLabels(token.scopes) }), _jsxs("span", { className: "dsh-qa-settings__row-meta", children: ["\u0441\u043E\u0437\u0434\u0430\u043D ", day(token.createdAt), " \u00B7 \u0434\u043E ", day(token.expiresAt), " ", "\u00B7 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0439: ", token.useCount, token.lastUsedAt === null
139
+ return (_jsx("li", { className: "dsh-qa-settings__row", "data-testid": "qa-settings-tokens-row", children: _jsxs("div", { className: "dsh-qa-settings__row-button", "data-testid": "qa-settings-tokens-row-body", children: [_jsx("span", { className: "dsh-qa-settings__row-title", "data-testid": "qa-settings-tokens-row-title", children: token.label }), _jsx("span", { className: "dsh-qa-settings__row-description", "data-testid": "qa-settings-tokens-row-scopes", children: scopeLabels(token.scopes) }), _jsxs("span", { className: "dsh-qa-settings__row-meta", "data-testid": "qa-settings-tokens-row-meta", children: ["\u0441\u043E\u0437\u0434\u0430\u043D ", day(token.createdAt), " \u00B7 \u0434\u043E ", day(token.expiresAt), " ", "\u00B7 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0439: ", token.useCount, token.lastUsedAt === null
140
140
  ? ""
141
141
  : ` · последний раз ${day(token.lastUsedAt)}`] }), state === "active" ? null : (_jsx("span", { className: state === "revoked"
142
142
  ? "dsh-qa-settings__row-meta"
143
- : "dsh-qa-settings__row-warning", children: state === "revoked"
143
+ : "dsh-qa-settings__row-warning", "data-testid": "qa-settings-tokens-row-state", children: state === "revoked"
144
144
  ? "отозван"
145
- : "истёк — интеграция больше не может им пользоваться" })), state === "active" ? (_jsx(QaSettingsActions, { children: confirming ? (_jsxs(_Fragment, { children: [_jsx(QaSettingsButton, { label: "\u041E\u0442\u043C\u0435\u043D\u0430", onClick: () => setPendingRevoke(null) }), _jsx(QaSettingsButton, { tone: "danger", disabled: revoking === token.id, label: revoking === token.id
145
+ : "истёк — интеграция больше не может им пользоваться" })), state === "active" ? (_jsx(QaSettingsActions, { children: confirming ? (_jsxs(_Fragment, { children: [_jsx(QaSettingsButton, { testId: "qa-settings-tokens-revoke-cancel", label: "\u041E\u0442\u043C\u0435\u043D\u0430", onClick: () => setPendingRevoke(null) }), _jsx(QaSettingsButton, { testId: "qa-settings-tokens-revoke-confirm", tone: "danger", disabled: revoking === token.id, label: revoking === token.id
146
146
  ? "Отзываем…"
147
- : "Отозвать окончательно", onClick: () => revoke(token.id) })] })) : (_jsx(QaSettingsButton, { tone: "danger", label: "\u041E\u0442\u043E\u0437\u0432\u0430\u0442\u044C", title: `Отозвать токен «${token.label}»`, onClick: () => setPendingRevoke(token.id) })) })) : null] }) }, token.id));
147
+ : "Отозвать окончательно", onClick: () => revoke(token.id) })] })) : (_jsx(QaSettingsButton, { testId: "qa-settings-tokens-revoke", tone: "danger", label: "\u041E\u0442\u043E\u0437\u0432\u0430\u0442\u044C", title: `Отозвать токен «${token.label}»`, onClick: () => setPendingRevoke(token.id) })) })) : null] }) }, token.id));
148
148
  }) }))] })] }));
149
149
  }
150
150
  //# sourceMappingURL=IntegrationTokensPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrationTokensPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/IntegrationTokensPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntegrationTokensPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/IntegrationTokensPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { readNotificationPermission, requestNotificationPermission, } from "../notifications/notification-dispatcher.js";
4
+ import { QaSettingsActions, QaSettingsButton, QaSettingsNotice, QaSettingsToggle, } from "./fields.js";
5
+ const FORM_ID = "dsh-qa-settings-notifications-form";
6
+ export const QA_NOTIFICATION_SETTINGS_COPY = Object.freeze({
7
+ title: "Уведомления",
8
+ lead: "Напоминание о завершённом ходе доходит до вас, даже когда вы читаете другой чат.",
9
+ inApp: "Строка «Ход завершён» на странице",
10
+ inAppHint: "Появляется, когда ход закончился в чате, который вы сейчас не читаете; клик открывает его.",
11
+ desktop: "Системные уведомления",
12
+ desktopHint: "Приходят, когда эта вкладка свёрнута или закрыта другим окном. В самом чате, который открыт перед вами, ничего не появляется.",
13
+ offOnStand: "Уведомления о завершённых ходах выключены на этом стенде администратором.",
14
+ desktopOffOnStand: "Системные уведомления выключены на этом стенде: строка на странице остаётся.",
15
+ unsupported: "Браузер этого устройства не умеет системные уведомления: напоминание останется на странице.",
16
+ denied: "Браузер запретил уведомления для этого адреса. Разрешите их в его собственных настройках — до этого напоминание останется только на странице.",
17
+ askAction: "Разрешить в браузере",
18
+ askHint: "Браузер спросит разрешение один раз, по этому нажатию; больше вопрос не вернётся.",
19
+ granted: "Браузер разрешил уведомления для этого адреса.",
20
+ saved: "Настройки уведомлений сохранены.",
21
+ });
22
+ /**
23
+ * The signed-in reader's own answer about the channels a finished turn may use.
24
+ *
25
+ * Two switches, because that is how many the feature has: the line inside the
26
+ * page and the notice the page hands to the operating system. What the stand
27
+ * allows is a third voice over each of them and is shown rather than hidden —
28
+ * a control that silently does nothing reads as a bug, and the reader is the
29
+ * one person who should not have to guess whose decision it was.
30
+ *
31
+ * Same full-replace contract as the starters form: the pair is seeded from the
32
+ * stored record whenever that record changes, so a write from another tab never
33
+ * leaves a stale edit on screen.
34
+ */
35
+ export function QaNotificationSettingsPage(props) {
36
+ const { switches } = props;
37
+ const [choices, setChoices] = useState(() => ({
38
+ inApp: props.notifications.inApp,
39
+ desktop: props.notifications.desktop,
40
+ }));
41
+ const [busy, setBusy] = useState(false);
42
+ const [error, setError] = useState(null);
43
+ const [saved, setSaved] = useState(false);
44
+ // The browser's own answer, re-read every render of the dialog: granting a
45
+ // permission happens outside this page, and the hint has to tell the truth
46
+ // about it the moment the reader comes back.
47
+ const [permission, setPermission] = useState(() => readNotificationPermission());
48
+ useEffect(() => {
49
+ setChoices({
50
+ inApp: props.notifications.inApp,
51
+ desktop: props.notifications.desktop,
52
+ });
53
+ setBusy(false);
54
+ setError(null);
55
+ setSaved(false);
56
+ }, [props.notifications]);
57
+ const desktopAllowed = switches.enabled && switches.allowOs;
58
+ const submit = (event) => {
59
+ event.preventDefault();
60
+ if (busy)
61
+ return;
62
+ setBusy(true);
63
+ setError(null);
64
+ setSaved(false);
65
+ void props.onSave(choices).then((refusal) => {
66
+ setBusy(false);
67
+ if (refusal !== null) {
68
+ setError(refusal);
69
+ return;
70
+ }
71
+ setSaved(true);
72
+ });
73
+ };
74
+ // With the master switch off, one notice says everything both controls need:
75
+ // a per-control hint would repeat it and could only contradict itself.
76
+ const desktopHint = !switches.enabled
77
+ ? undefined
78
+ : !switches.allowOs
79
+ ? QA_NOTIFICATION_SETTINGS_COPY.desktopOffOnStand
80
+ : permission === "unsupported"
81
+ ? QA_NOTIFICATION_SETTINGS_COPY.unsupported
82
+ : permission === "denied"
83
+ ? QA_NOTIFICATION_SETTINGS_COPY.denied
84
+ : permission === "granted"
85
+ ? QA_NOTIFICATION_SETTINGS_COPY.granted
86
+ : QA_NOTIFICATION_SETTINGS_COPY.askHint;
87
+ // A denied permission is not locked: it is the reader's own answer about a
88
+ // channel this browser happens to refuse today, and the same account may be
89
+ // signed in on a browser that will honor it tomorrow.
90
+ const desktopLocked = !switches.enabled || !switches.allowOs || permission === "unsupported";
91
+ return (_jsxs("form", { id: FORM_ID, className: "dsh-qa-settings__page", "data-testid": "qa-settings-notifications", onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-notifications-title", children: QA_NOTIFICATION_SETTINGS_COPY.title }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-notifications-lead", children: QA_NOTIFICATION_SETTINGS_COPY.lead }), _jsx(QaSettingsToggle, { testId: "qa-settings-notifications-in-app", checked: choices.inApp, disabled: !switches.enabled, label: QA_NOTIFICATION_SETTINGS_COPY.inApp, hint: QA_NOTIFICATION_SETTINGS_COPY.inAppHint, onChange: (inApp) => {
92
+ setChoices((current) => ({ ...current, inApp }));
93
+ setSaved(false);
94
+ } }), _jsx(QaSettingsToggle, { testId: "qa-settings-notifications-desktop", checked: choices.desktop, disabled: desktopLocked, label: QA_NOTIFICATION_SETTINGS_COPY.desktop, hint: desktopHint, onChange: (desktop) => {
95
+ setChoices((current) => ({ ...current, desktop }));
96
+ setSaved(false);
97
+ } }), desktopAllowed && permission === "default" ? (_jsx("div", { children: _jsx(QaSettingsButton, { testId: "qa-settings-notifications-ask", label: QA_NOTIFICATION_SETTINGS_COPY.askAction, onClick: () => {
98
+ void requestNotificationPermission().then((answer) => {
99
+ setPermission(answer);
100
+ if (answer === "granted") {
101
+ setChoices((current) => ({ ...current, desktop: true }));
102
+ setSaved(false);
103
+ }
104
+ });
105
+ } }) })) : null, !switches.enabled ? (_jsx(QaSettingsNotice, { testId: "qa-settings-notifications-off-on-stand", tone: "warn", children: QA_NOTIFICATION_SETTINGS_COPY.offOnStand })) : null, error === null ? null : (_jsx(QaSettingsNotice, { testId: "qa-settings-notifications-error", tone: "error", children: error })), saved && error === null ? (_jsx(QaSettingsNotice, { testId: "qa-settings-notifications-saved", tone: "info", children: QA_NOTIFICATION_SETTINGS_COPY.saved })) : null, _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-notifications-save", type: "submit", tone: "primary", disabled: busy || !switches.enabled, label: busy ? "Сохранение…" : "Сохранить" }) })] }));
106
+ }
107
+ //# sourceMappingURL=NotificationSettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/NotificationSettingsPage.tsx"],"names":[],"mappings":"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"}
@@ -43,6 +43,6 @@ export function QaPasswordSettingsPage(props) {
43
43
  setSaved(true);
44
44
  });
45
45
  };
46
- return (_jsxs("form", { className: "dsh-qa-settings__page", onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("p", { className: "dsh-qa-settings__lead", children: "\u0421\u043C\u0435\u043D\u0430 \u043F\u0430\u0440\u043E\u043B\u044F \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 \u0442\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u043E\u0439\u0442\u0438 \u0437\u0430\u043D\u043E\u0432\u043E. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F." }), _jsx(QaSettingsField, { label: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "current-password", autoComplete: "current-password", required: true, disabled: busy, value: current, onChange: (event) => setCurrent(event.currentTarget.value) }) }), _jsx(QaSettingsField, { label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "new-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: next, onChange: (event) => setNext(event.currentTarget.value) }) }), _jsx(QaSettingsField, { label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C \u0435\u0449\u0451 \u0440\u0430\u0437", children: _jsx("input", { type: "password", name: "repeat-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: repeat, onChange: (event) => setRepeat(event.currentTarget.value) }) }), tooShort ? (_jsxs("p", { className: "dsh-qa-settings__field-hint", children: ["\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043A\u043E\u0440\u043E\u0447\u0435 ", MIN_PASSWORD_LENGTH, " \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."] })) : null, mismatch ? (_jsx("p", { className: "dsh-qa-settings__field-hint", children: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442." })) : null, error === null ? null : (_jsx(QaSettingsNotice, { tone: "error", children: error })), saved && error === null ? (_jsx(QaSettingsNotice, { tone: "info", children: "\u041F\u0430\u0440\u043E\u043B\u044C \u0438\u0437\u043C\u0435\u043D\u0451\u043D. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044B." })) : null, _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { type: "submit", tone: "primary", disabled: busy || incomplete || mismatch || tooShort, label: busy ? "Сохранение…" : "Сменить пароль" }) })] }));
46
+ return (_jsxs("form", { className: "dsh-qa-settings__page", "data-testid": "qa-settings-password", onSubmit: submit, children: [_jsx("h3", { className: "dsh-qa-settings__page-title", "data-testid": "qa-settings-password-title", children: "\u041F\u0430\u0440\u043E\u043B\u044C" }), _jsx("p", { className: "dsh-qa-settings__lead", "data-testid": "qa-settings-password-lead", children: "\u0421\u043C\u0435\u043D\u0430 \u043F\u0430\u0440\u043E\u043B\u044F \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 \u0442\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u043E\u0439\u0442\u0438 \u0437\u0430\u043D\u043E\u0432\u043E. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F." }), _jsx(QaSettingsField, { testId: "qa-settings-password-current", label: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "current-password", autoComplete: "current-password", required: true, disabled: busy, value: current, onChange: (event) => setCurrent(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-new", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C", children: _jsx("input", { type: "password", name: "new-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: next, onChange: (event) => setNext(event.currentTarget.value) }) }), _jsx(QaSettingsField, { testId: "qa-settings-password-repeat", label: "\u041D\u043E\u0432\u044B\u0439 \u043F\u0430\u0440\u043E\u043B\u044C \u0435\u0449\u0451 \u0440\u0430\u0437", children: _jsx("input", { type: "password", name: "repeat-password", autoComplete: "new-password", required: true, minLength: MIN_PASSWORD_LENGTH, disabled: busy, value: repeat, onChange: (event) => setRepeat(event.currentTarget.value) }) }), tooShort ? (_jsxs("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-too-short", children: ["\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043A\u043E\u0440\u043E\u0447\u0435 ", MIN_PASSWORD_LENGTH, " \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."] })) : null, mismatch ? (_jsx("p", { className: "dsh-qa-settings__field-hint", "data-testid": "qa-settings-password-mismatch", children: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442." })) : null, error === null ? null : (_jsx(QaSettingsNotice, { testId: "qa-settings-password-error", tone: "error", children: error })), saved && error === null ? (_jsx(QaSettingsNotice, { testId: "qa-settings-password-saved", tone: "info", children: "\u041F\u0430\u0440\u043E\u043B\u044C \u0438\u0437\u043C\u0435\u043D\u0451\u043D. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044B." })) : null, _jsx(QaSettingsActions, { children: _jsx(QaSettingsButton, { testId: "qa-settings-password-change", type: "submit", tone: "primary", disabled: busy || incomplete || mismatch || tooShort, label: busy ? "Сохранение…" : "Сменить пароль" }) })] }));
47
47
  }
48
48
  //# sourceMappingURL=PasswordSettingsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/PasswordSettingsPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PasswordSettingsPage.js","sourceRoot":"","sources":["../../../src/client/user-settings/PasswordSettingsPage.tsx"],"names":[],"mappings":"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"}