@yadsh/dsh-qa-surface 0.13.0 → 0.15.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 (339) 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 +293 -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 +77 -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 +98 -7
  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 +145 -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 +7307 -4010
  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/provenance/host-store.js +8 -5
  252. package/lib/provenance/host-store.js.map +1 -1
  253. package/lib/qa-tools/docs-tools.js +1 -1
  254. package/lib/qa-tools/docs-tools.js.map +1 -1
  255. package/lib/qa-tools/lifecycle.js +6 -3
  256. package/lib/qa-tools/lifecycle.js.map +1 -1
  257. package/lib/request-queue.js +32 -0
  258. package/lib/request-queue.js.map +1 -0
  259. package/lib/resolve-config.js +2 -0
  260. package/lib/resolve-config.js.map +1 -1
  261. package/lib/secure-session.js +7 -2
  262. package/lib/secure-session.js.map +1 -1
  263. package/lib/shared/settings.js +19 -2
  264. package/lib/shared/settings.js.map +1 -1
  265. package/lib/turn-failure-log.js +67 -0
  266. package/lib/turn-failure-log.js.map +1 -0
  267. package/lib/typert.host.js +1398 -651
  268. package/lib/typert.remote-client.d.ts +15 -1
  269. package/lib/typert.remote-client.js +1315 -645
  270. package/lib/types/access/capability-catalog.d.ts +20 -4
  271. package/lib/types/access/model.d.ts +23 -0
  272. package/lib/types/access/service.d.ts +2 -3
  273. package/lib/types/account-remotes.d.ts +8 -1
  274. package/lib/types/accounts/database.d.ts +13 -3
  275. package/lib/types/accounts/errors.d.ts +9 -1
  276. package/lib/types/accounts/file.d.ts +12 -0
  277. package/lib/types/accounts/store.d.ts +30 -2
  278. package/lib/types/admin/quality-store.d.ts +33 -0
  279. package/lib/types/admin/service.d.ts +60 -1
  280. package/lib/types/client/QaAccountsController.d.ts +25 -2
  281. package/lib/types/client/QaConfigController.d.ts +2 -2
  282. package/lib/types/client/QaSessionController.d.ts +199 -6
  283. package/lib/types/client/QaSurface.d.ts +6 -1
  284. package/lib/types/client/admin/pages/ExpertMemory.d.ts +19 -0
  285. package/lib/types/client/admin/routes.d.ts +3 -1
  286. package/lib/types/client/admin/shared.d.ts +4 -0
  287. package/lib/types/client/components/Markdown.d.ts +8 -1
  288. package/lib/types/client/components/QaHeader.d.ts +18 -4
  289. package/lib/types/client/components/QaModal.d.ts +7 -0
  290. package/lib/types/client/components/QaQueueDock.d.ts +27 -0
  291. package/lib/types/client/components/QaRequestQueue.d.ts +20 -0
  292. package/lib/types/client/components/QaSidebar.d.ts +14 -0
  293. package/lib/types/client/components/QaThemeSwitcher.d.ts +14 -0
  294. package/lib/types/client/components/QaTurnNotice.d.ts +55 -0
  295. package/lib/types/client/focus-ring.d.ts +65 -0
  296. package/lib/types/client/lineage.d.ts +3 -13
  297. package/lib/types/client/markdown/blocks.d.ts +30 -2
  298. package/lib/types/client/markdown/render.d.ts +4 -1
  299. package/lib/types/client/notifications/notification-dispatcher.d.ts +68 -0
  300. package/lib/types/client/notifications/preferences.d.ts +44 -0
  301. package/lib/types/client/notifications/turn-completion-source.d.ts +114 -0
  302. package/lib/types/client/notifications/use-turn-notifications.d.ts +51 -0
  303. package/lib/types/client/project-session-state.d.ts +35 -1
  304. package/lib/types/client/role/RoleSelector.d.ts +7 -1
  305. package/lib/types/client/settings/card.d.ts +36 -5
  306. package/lib/types/client/settings/fields.d.ts +24 -0
  307. package/lib/types/client/settings/format.d.ts +0 -5
  308. package/lib/types/client/settings/sections/common.d.ts +3 -1
  309. package/lib/types/client/settings/sections/session.d.ts +2 -1
  310. package/lib/types/client/settings/styles.d.ts +9 -4
  311. package/lib/types/client/settings-extensions/user-session.d.ts +1 -1
  312. package/lib/types/client/theme-preference.d.ts +69 -0
  313. package/lib/types/client/types.d.ts +25 -1
  314. package/lib/types/client/use-session-ui-state.d.ts +6 -4
  315. package/lib/types/client/user-settings/GeneralSettingsPage.d.ts +5 -5
  316. package/lib/types/client/user-settings/NotificationSettingsPage.d.ts +40 -0
  317. package/lib/types/client/user-settings/UserSettingsDialog.d.ts +12 -2
  318. package/lib/types/client/user-settings/draft.d.ts +4 -1
  319. package/lib/types/client/user-settings/fields.d.ts +7 -0
  320. package/lib/types/config-resolvers/notifications.d.ts +10 -0
  321. package/lib/types/config-resolvers/session.d.ts +6 -0
  322. package/lib/types/config.d.ts +20 -1
  323. package/lib/types/index.d.ts +53 -5
  324. package/lib/types/integration/answer.d.ts +27 -0
  325. package/lib/types/integration/expert-memory.d.ts +49 -0
  326. package/lib/types/notifications.d.ts +32 -0
  327. package/lib/types/personal-skills/errors.d.ts +1 -1
  328. package/lib/types/personal-skills/service.d.ts +6 -0
  329. package/lib/types/prompt-notes.d.ts +17 -4
  330. package/lib/types/request-queue.d.ts +32 -0
  331. package/lib/types/shared/settings.d.ts +19 -2
  332. package/lib/types/turn-failure-log.d.ts +18 -0
  333. package/lib/types/types.d.ts +180 -4
  334. package/package.json +64 -63
  335. package/scripts/attach-workspace-sessions.mjs +24 -5
  336. package/scripts/repair-session-events.mjs +25 -5
  337. package/lib/client/markdown/MermaidBlock.js +0 -80
  338. package/lib/client/markdown/MermaidBlock.js.map +0 -1
  339. package/lib/types/client/markdown/MermaidBlock.d.ts +0 -6
@@ -0,0 +1,90 @@
1
+ /** Body text of every desktop notice: the fact, never the content. */
2
+ export const QA_TURN_NOTICE_BODY = "Ход завершён";
3
+ /**
4
+ * Decide what one finished turn is worth, if anything.
5
+ *
6
+ * A notice exists to say "this happened where you were not looking". The chat
7
+ * on screen answers itself — the reply arrives in front of the reader — so it
8
+ * gets nothing, while a background chat that settles under their eyes still
9
+ * gets the in-app line. Each channel then needs its own two answers: the
10
+ * deployment's and the reader's. The desktop additionally needs the browser's
11
+ * permission, which neither of those can grant on its behalf.
12
+ */
13
+ export function planTurnNotice(completion, context) {
14
+ const { switches, channels, activeSessionId } = context;
15
+ if (!switches.enabled)
16
+ return null;
17
+ const onScreen = completion.sessionId === activeSessionId;
18
+ if (context.focused && onScreen)
19
+ return null;
20
+ const desktop = !context.focused &&
21
+ switches.allowOs &&
22
+ channels.desktop &&
23
+ context.permission === "granted";
24
+ if (!channels.inApp && !desktop)
25
+ return null;
26
+ return {
27
+ item: {
28
+ key: `${completion.sessionId}:${completion.at}`,
29
+ sessionId: completion.sessionId,
30
+ title: completion.title,
31
+ },
32
+ inApp: channels.inApp,
33
+ desktop,
34
+ };
35
+ }
36
+ /**
37
+ * Whether the person is looking at this page. A hidden tab and a visible tab
38
+ * behind another window both count as away: the notice is for the difference
39
+ * between "watching" and "not watching", not for the tab's own state.
40
+ */
41
+ export function isPageFocused(documentState = document, hasFocus = () => document.hasFocus()) {
42
+ return documentState.visibilityState === "visible" && hasFocus();
43
+ }
44
+ /** The desktop channel's current answer, or `unsupported` off a secure context. */
45
+ export function readNotificationPermission() {
46
+ if (typeof Notification === "undefined")
47
+ return "unsupported";
48
+ return Notification.permission;
49
+ }
50
+ /**
51
+ * Ask the browser for the desktop channel. Only ever called from a click: the
52
+ * permission prompt is the user's decision about this origin, and a page that
53
+ * asks on load — or once per finished turn — spends it on the wrong moment.
54
+ */
55
+ export async function requestNotificationPermission() {
56
+ if (typeof Notification === "undefined")
57
+ return "unsupported";
58
+ if (Notification.permission !== "default")
59
+ return Notification.permission;
60
+ try {
61
+ return await Notification.requestPermission();
62
+ }
63
+ catch {
64
+ return "denied";
65
+ }
66
+ }
67
+ /** Live desktop notices; an unreferenced one is closed by the browser at once. */
68
+ const retainedNotices = new Set();
69
+ /**
70
+ * Hand one finished turn to the desktop. Returns false when the platform
71
+ * refuses: a notification that cannot be raised costs the reader nothing, and
72
+ * the in-app line is already on its way.
73
+ */
74
+ export function raiseDesktopNotice(completion) {
75
+ if (typeof Notification === "undefined")
76
+ return false;
77
+ try {
78
+ const notice = new Notification(completion.title, {
79
+ body: QA_TURN_NOTICE_BODY,
80
+ });
81
+ notice.onclick = () => window.focus();
82
+ retainedNotices.add(notice);
83
+ notice.addEventListener("close", () => retainedNotices.delete(notice));
84
+ return true;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ //# sourceMappingURL=notification-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-dispatcher.js","sourceRoot":"","sources":["../../../src/client/notifications/notification-dispatcher.ts"],"names":[],"mappings":"AAkCA,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,UAA4B,EAC5B,OAAwB;IAExB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,KAAK,eAAe,CAAC;IAC1D,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,OAAO,GACX,CAAC,OAAO,CAAC,OAAO;QAChB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,OAAO;QAChB,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE;YACJ,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,EAAE;YAC/C,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB;QACD,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,aAAa,GAAiD,QAAQ,EACtE,QAAQ,GAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAEnD,OAAO,aAAa,CAAC,eAAe,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;AACnE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,0BAA0B;IACxC,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,aAAa,CAAC;IAC9D,OAAO,YAAY,CAAC,UAAU,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B;IACjD,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,aAAa,CAAC;IAC9D,IAAI,YAAY,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,UAAU,CAAC;IAC1E,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,iBAAiB,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA4B;IAC7D,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE;YAChD,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,61 @@
1
+ export const QA_NOTIFICATION_DEFAULT_PREFS = Object.freeze({
2
+ osEnabled: false,
3
+ osOffered: false,
4
+ });
5
+ /**
6
+ * Read the stored choice; a denied, full or foreign-shaped store falls back to
7
+ * the silent default rather than raising notices nobody asked for.
8
+ *
9
+ * What is left in this browser is what belongs to a browser: the answer to the
10
+ * desktop offer, and the desktop choice itself for as long as there is no
11
+ * account to hold it. Signed in, the account's {@link QaAccountNotifications}
12
+ * wins — see {@link resolveNoticeChannels} — because a preference that follows
13
+ * the person is the point of storing it on the account at all.
14
+ */
15
+ export function readNotificationPrefs(storage, key) {
16
+ try {
17
+ const raw = storage?.getItem(key);
18
+ if (raw === null || raw === undefined)
19
+ return QA_NOTIFICATION_DEFAULT_PREFS;
20
+ const parsed = JSON.parse(raw);
21
+ if (typeof parsed !== "object" || parsed === null) {
22
+ return QA_NOTIFICATION_DEFAULT_PREFS;
23
+ }
24
+ const { osEnabled, osOffered } = parsed;
25
+ return {
26
+ osEnabled: osEnabled === true,
27
+ osOffered: osOffered === true,
28
+ };
29
+ }
30
+ catch {
31
+ return QA_NOTIFICATION_DEFAULT_PREFS;
32
+ }
33
+ }
34
+ /** Persist the choice. A store that refuses only costs it across reloads. */
35
+ export function writeNotificationPrefs(storage, key, prefs) {
36
+ try {
37
+ storage?.setItem(key, JSON.stringify(prefs));
38
+ }
39
+ catch {
40
+ // The in-memory state already carries the choice for this page.
41
+ }
42
+ }
43
+ /**
44
+ * Which channels this reader may use for a finished turn.
45
+ *
46
+ * The account's answer wins once it exists, so the choice follows the person to
47
+ * another browser or another laptop. Without an account the browser's own
48
+ * answer stands: an anonymous stand is the common shape of a QA deployment, and
49
+ * a mute switch that only appeared once signed in would leave it with no switch
50
+ * at all. The in-page line has no browser-level switch of its own — a stand that
51
+ * wants it gone has `notifications.enabled`, and the offer this page makes is
52
+ * only ever about the desktop channel.
53
+ */
54
+ export function resolveNoticeChannels(input) {
55
+ const { account, prefs } = input;
56
+ if (account !== undefined) {
57
+ return { inApp: account.inApp, desktop: account.desktop };
58
+ }
59
+ return { inApp: true, desktop: prefs.osEnabled };
60
+ }
61
+ //# sourceMappingURL=preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../../src/client/notifications/preferences.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,6BAA6B,GAAwB,MAAM,CAAC,MAAM,CAC7E;IACE,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;CACjB,CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAgC,EAChC,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,6BAA6B,CAAC;QAC5E,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,6BAA6B,CAAC;QACvC,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAsC,CAAC;QACxE,OAAO;YACL,SAAS,EAAE,SAAS,KAAK,IAAI;YAC7B,SAAS,EAAE,SAAS,KAAK,IAAI;SAC9B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6BAA6B,CAAC;IACvC,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CACpC,OAAgC,EAChC,GAAW,EACX,KAA0B;IAE1B,IAAI,CAAC;QACH,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Report the turns that ended since the previous observation of `chats`.
3
+ *
4
+ * The input is this reader's own rows — see {@link scopeNoticesToOwnChats},
5
+ * which is what keeps an admin's shared history out of them — because a notice
6
+ * is an outward report about the chat it names. The host list is the whole
7
+ * deployment's, so anything wider than these rows would tell one user that
8
+ * another user's turn had stopped.
9
+ *
10
+ * `seen` is the caller's per-page map of the last reading, and a chat is
11
+ * reported only when a `watched` run is seen ending in a frame the browser
12
+ * could vouch for. So the notice always tells the reader about a turn they were
13
+ * waiting for, and never about one that was already under way when they could
14
+ * not see it: a chat found running on the page's first frame, or in the frames
15
+ * around a reconnect, is `unwatched`, and its end passes in silence. Nor does a
16
+ * gap the page was shown spare a run it lands inside: the paused frame takes
17
+ * back the evidence that this page watched that run begin, because while the
18
+ * link was down the chat may have run another turn and the rows that come back
19
+ * name neither. The first run to end after a gap passes in silence too, in a
20
+ * chat whose row never moved across it — the only idle this page holds for that
21
+ * chat was read through the gap, and a run that began inside the gap would look
22
+ * exactly like it. That reading arms nothing until the chat's own row moves, and
23
+ * the move that arms it is a run ending: the very one this page then keeps
24
+ * silent about. So a turn is reported only when no gap falls between the idle
25
+ * reading that armed this page and the frame that sees the run end, which is why
26
+ * a run begun and finished on the recovered link can still pass unreported, and
27
+ * why a gap the page was shown costs a chat one turn — or two, where a turn
28
+ * ended inside the gap. A gap that reached no committed frame hands this function
29
+ * nothing to go silent about, and §12 of
30
+ * `docs/specs/owner-scoped-notifications.md` owns that case. The turn that a link
31
+ * which held carries from an armed idle to its end is the page's own, so a page
32
+ * that stays open notifies again once the turn paying for the gap has ended —
33
+ * once per turn from there.
34
+ */
35
+ export function settleTurnCompletions(seen, chats, options = {}) {
36
+ const { paused = false, now = Date.now() } = options;
37
+ const listed = new Set(chats.map((chat) => chat.id));
38
+ for (const id of seen.keys()) {
39
+ if (!listed.has(id))
40
+ seen.delete(id);
41
+ }
42
+ const completions = [];
43
+ for (const chat of chats) {
44
+ const previous = seen.get(chat.id);
45
+ if (!paused && !chat.running && previous === "watched") {
46
+ completions.push({ sessionId: chat.id, title: chat.title, at: now });
47
+ }
48
+ seen.set(chat.id, readSighting(previous, chat.running, paused));
49
+ }
50
+ return completions;
51
+ }
52
+ function readSighting(previous, running, paused) {
53
+ // A frame the browser cannot vouch for settles neither fact, but which way it
54
+ // pointed decides what this page is waiting for.
55
+ if (paused)
56
+ return running ? "unwatched" : "stale";
57
+ if (!running) {
58
+ // The same row the gap left behind is not new information about now.
59
+ return previous === "stale" ? "stale" : "idle";
60
+ }
61
+ return previous === "idle" || previous === "watched"
62
+ ? "watched"
63
+ : "unwatched";
64
+ }
65
+ /**
66
+ * Keep the rows a notice may be raised for: the sidebar's rows down to the
67
+ * chats this account owns outright.
68
+ *
69
+ * The sidebar is a *read* surface, and an admin's shared view is deliberately
70
+ * wider than ownership — the same opt-in that shows another account's chat
71
+ * must not decide whose activity this browser reports outward. A notice is
72
+ * that outward report, and it names a chat by title, so it takes the narrow
73
+ * list. `undefined` is the deployment with no accounts, where the browser's own
74
+ * index already is the owned set and there is nothing narrower to ask for.
75
+ */
76
+ export function scopeNoticesToOwnChats(chats, ownIds) {
77
+ if (ownIds === undefined)
78
+ return chats;
79
+ const owned = new Set(ownIds);
80
+ return chats.filter((chat) => owned.has(chat.id));
81
+ }
82
+ //# sourceMappingURL=turn-completion-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-completion-source.js","sourceRoot":"","sources":["../../../src/client/notifications/turn-completion-source.ts"],"names":[],"mappings":"AAsEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAiC,EACjC,KAAgC,EAChC,OAAO,GAA4B,EAAE;IAErC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CACnB,QAAoC,EACpC,OAAgB,EAChB,MAAe;IAEf,8EAA8E;IAC9E,iDAAiD;IACjD,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,qEAAqE;QACrE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS;QAClD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAgC,EAChC,MAAqC;IAErC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { isPageFocused, planTurnNotice, raiseDesktopNotice, readNotificationPermission, requestNotificationPermission, } from "./notification-dispatcher.js";
3
+ import { readNotificationPrefs, resolveNoticeChannels, writeNotificationPrefs, } from "./preferences.js";
4
+ import { scopeNoticesToOwnChats, settleTurnCompletions, } from "./turn-completion-source.js";
5
+ /** Lines the stack holds; an older one is dropped rather than pushed away. */
6
+ const MAX_NOTICES = 3;
7
+ /**
8
+ * Turn-completion notices for the chats this reader owns. Of the rows the
9
+ * sidebar shows, only the ones this account owns outright are watched, and when
10
+ * one of them stops running after this page watched that run begin, the reader
11
+ * is told in the channels they and the deployment allow.
12
+ */
13
+ export function useQaTurnNotifications(input) {
14
+ const { chats, ownChatIds, notifications, storage, storageKey, account, paused, activeSessionId, onSwitch, } = input;
15
+ const seen = useRef(new Map());
16
+ const [items, setItems] = useState([]);
17
+ const [prefs, setPrefs] = useState(() => readNotificationPrefs(storage, storageKey));
18
+ // Memoized because the watcher below re-runs on any change to it, and a fresh
19
+ // object per render would have it re-reading the chat list on every keystroke.
20
+ const channels = useMemo(() => resolveNoticeChannels({ account: account?.notifications, prefs }), [account, prefs]);
21
+ // Also memoized for the watcher's sake: the rows are the sidebar's, so a
22
+ // render that changed nothing about them must not read the list again.
23
+ const ownedChats = useMemo(() => scopeNoticesToOwnChats(chats, ownChatIds), [chats, ownChatIds]);
24
+ const savePrefs = useCallback((next) => {
25
+ setPrefs(next);
26
+ writeNotificationPrefs(storage, storageKey, next);
27
+ }, [storage, storageKey]);
28
+ useEffect(() => {
29
+ const completions = settleTurnCompletions(seen.current, ownedChats, {
30
+ paused,
31
+ });
32
+ if (completions.length === 0)
33
+ return;
34
+ const focused = isPageFocused();
35
+ const permission = readNotificationPermission();
36
+ const added = [];
37
+ for (const completion of completions) {
38
+ const planned = planTurnNotice(completion, {
39
+ switches: notifications,
40
+ channels,
41
+ permission,
42
+ focused,
43
+ activeSessionId,
44
+ });
45
+ if (planned === null)
46
+ continue;
47
+ if (planned.desktop)
48
+ raiseDesktopNotice(completion);
49
+ if (planned.inApp)
50
+ added.push(planned.item);
51
+ }
52
+ if (added.length === 0)
53
+ return;
54
+ setItems((previous) => [...added.reverse(), ...previous].slice(0, MAX_NOTICES));
55
+ }, [channels, activeSessionId, ownedChats, notifications, paused]);
56
+ // Opening a chat by any other means is an answer to its notice.
57
+ useEffect(() => {
58
+ if (activeSessionId === null)
59
+ return;
60
+ setItems((previous) => previous.some((item) => item.sessionId === activeSessionId)
61
+ ? previous.filter((item) => item.sessionId !== activeSessionId)
62
+ : previous);
63
+ }, [activeSessionId]);
64
+ const open = useCallback((sessionId) => {
65
+ setItems((previous) => previous.some((item) => item.sessionId === sessionId)
66
+ ? previous.filter((item) => item.sessionId !== sessionId)
67
+ : previous);
68
+ onSwitch(sessionId);
69
+ }, [onSwitch]);
70
+ // The offer is a single question per browser: asked when the desktop channel
71
+ // is still allowed by the deployment, unanswered, and the browser has not
72
+ // decided yet.
73
+ const offered = notifications.enabled &&
74
+ notifications.allowOs &&
75
+ !prefs.osOffered &&
76
+ readNotificationPermission() === "default";
77
+ // Waving a notice off while the offer is on screen is the answer to the
78
+ // offer too: it never returns to ask a second time.
79
+ const dismiss = useCallback((key) => {
80
+ setItems((previous) => previous.filter((item) => item.key !== key));
81
+ if (offered)
82
+ savePrefs({ ...prefs, osOffered: true });
83
+ }, [offered, prefs, savePrefs]);
84
+ // Answering the offer writes the choice where it belongs: on the account once
85
+ // there is one, so it survives into another browser, and in this browser's own
86
+ // store otherwise. The browser keeps its own copy either way — what it decides
87
+ // is that the question has been asked here, which is a fact about this
88
+ // browser's permission prompt rather than about the person.
89
+ const enableDesktop = useCallback(() => {
90
+ void requestNotificationPermission().then((permission) => {
91
+ const granted = permission === "granted";
92
+ savePrefs({ ...prefs, osEnabled: granted, osOffered: true });
93
+ if (account === undefined)
94
+ return;
95
+ void account.onSave({
96
+ inApp: account.notifications.inApp,
97
+ desktop: granted,
98
+ });
99
+ });
100
+ }, [account, prefs, savePrefs]);
101
+ return {
102
+ items,
103
+ onOpen: open,
104
+ onDismiss: dismiss,
105
+ ...(offered ? { onEnableDesktop: enableDesktop } : {}),
106
+ };
107
+ }
108
+ //# sourceMappingURL=use-turn-notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-turn-notifications.js","sourceRoot":"","sources":["../../../src/client/notifications/use-turn-notifications.ts"],"names":[],"mappings":"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"}
@@ -21,13 +21,13 @@ class PanelErrorBoundary extends Component {
21
21
  }
22
22
  render() {
23
23
  if (this.state.failed) {
24
- return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "alert", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", this.props.definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id:", " ", this.props.definition.id, ")."] }));
24
+ return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", "data-testid": "qa-panel-error", role: "alert", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", this.props.definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id:", " ", this.props.definition.id, ")."] }));
25
25
  }
26
26
  return this.props.children;
27
27
  }
28
28
  }
29
29
  function MissingPanel({ definition, }) {
30
- return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", role: "status", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id: ", definition.id, ")."] }));
30
+ return (_jsxs("div", { className: "dsh-qa-extension-panel__fallback", "data-testid": "qa-panel-missing", role: "status", children: ["\u041F\u0430\u043D\u0435\u043B\u044C \u00AB", definition.kind, "\u00BB \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 (id: ", definition.id, ")."] }));
31
31
  }
32
32
  function PanelSlotBody({ definition, owner, renderSlot, }) {
33
33
  return renderSlot("qa.surface.panel", owner, {
@@ -168,7 +168,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
168
168
  return;
169
169
  event.preventDefault();
170
170
  };
171
- return (_jsxs(_Fragment, { children: [presentation === "side" ? (_jsx("div", { className: "dsh-qa-extension-panel__resizer", role: "separator", "aria-label": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u043F\u0430\u043D\u0435\u043B\u0438", "aria-orientation": "vertical", "aria-valuemin": QA_PANEL_MIN_PX, "aria-valuemax": clampQaPanelWidth(Number.POSITIVE_INFINITY, available), "aria-valuenow": width, tabIndex: 0, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onKeyDown: handleSeparatorKey })) : null, _jsxs("aside", { ref: root, className: `dsh-qa-extension-panel dsh-qa-extension-panel--${presentation}`, "data-presentation": presentation, "aria-label": `Панель: ${panelTitle(active)}`, tabIndex: -1, style: presentation === "side"
171
+ return (_jsxs(_Fragment, { children: [presentation === "side" ? (_jsx("div", { className: "dsh-qa-extension-panel__resizer", "data-testid": "qa-panel-resizer", role: "separator", "aria-label": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u043F\u0430\u043D\u0435\u043B\u0438", "aria-orientation": "vertical", "aria-valuemin": QA_PANEL_MIN_PX, "aria-valuemax": clampQaPanelWidth(Number.POSITIVE_INFINITY, available), "aria-valuenow": width, tabIndex: 0, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerEnd, onPointerCancel: handlePointerEnd, onKeyDown: handleSeparatorKey })) : null, _jsxs("aside", { ref: root, className: `dsh-qa-extension-panel dsh-qa-extension-panel--${presentation}`, "data-testid": "qa-panel", "data-presentation": presentation, "aria-label": `Панель: ${panelTitle(active)}`, tabIndex: -1, style: presentation === "side"
172
172
  ? { width: `${width}px` }
173
173
  : undefined, onKeyDown: (event) => {
174
174
  if (presentation === "fullscreen" &&
@@ -177,7 +177,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
177
177
  event.stopPropagation();
178
178
  panels.close({ reason: "user" });
179
179
  }
180
- }, children: [_jsxs("header", { className: "dsh-qa-extension-panel__header", children: [_jsx("h2", { children: panelTitle(active) }), _jsx("button", { type: "button", className: "dsh-qa-extension-panel__close", "aria-label": `Закрыть панель: ${panelTitle(active)}`, onClick: () => panels.close({ reason: "user" }), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-extension-panel__bodies", children: snapshot.definitions.map((definition) => {
180
+ }, children: [_jsxs("header", { className: "dsh-qa-extension-panel__header", "data-testid": "qa-panel-header", children: [_jsx("h2", { "data-testid": "qa-panel-title", children: panelTitle(active) }), _jsx("button", { type: "button", className: "dsh-qa-extension-panel__close", "data-testid": "qa-panel-close", "aria-label": `Закрыть панель: ${panelTitle(active)}`, onClick: () => panels.close({ reason: "user" }), children: _jsx("svg", { viewBox: "0 0 14 14", "aria-hidden": "true", children: _jsx("path", { d: "m3.5 3.5 7 7m0-7-7 7" }) }) })] }), _jsx("div", { className: "dsh-qa-extension-panel__bodies", children: snapshot.definitions.map((definition) => {
181
181
  const visible = definition.kind === snapshot.activeKind;
182
182
  if (!visible &&
183
183
  (!definition.keepMounted || !mounted.current.has(definition.id))) {
@@ -203,7 +203,7 @@ export function QaPanelHost({ panels, sessionId, qaToken = "", renderSlot, }) {
203
203
  },
204
204
  signal,
205
205
  };
206
- return (_jsx("div", { className: "dsh-qa-extension-panel__body", hidden: !visible, "aria-hidden": !visible, children: _jsx(PanelErrorBoundary, { definition: definition, children: _jsx(PanelSlotBody, { definition: definition, owner: owner, renderSlot: renderSlot }) }) }, definition.id));
206
+ return (_jsx("div", { className: "dsh-qa-extension-panel__body", "data-testid": "qa-panel-body", hidden: !visible, "aria-hidden": !visible, children: _jsx(PanelErrorBoundary, { definition: definition, children: _jsx(PanelSlotBody, { definition: definition, owner: owner, renderSlot: renderSlot }) }) }, definition.id));
207
207
  }) })] })] }));
208
208
  }
209
209
  //# sourceMappingURL=PanelHost.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PanelHost.js","sourceRoot":"","sources":["../../../src/client/panels/PanelHost.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,MAAM,EACN,QAAQ,EACR,oBAAoB,GAKrB,MAAM,OAAO,CAAC;AASf,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,UAAU,GAAG,CAAC,CAAC;AAIrB,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,SAAiB;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,kBAAkB,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,eAAe,EACf,SAAS,GAAG,cAAc,GAAG,UAAU,CACxC,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,kBAAmB,SAAQ,SAMhC;IACC,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAE1B,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC9B,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,EAC9D,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,CACL,eAAK,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAC,OAAO,4DACnD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,8EAAmB,GAAG,EACxD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,UACrB,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,YAAY,CAAC,EACpB,UAAU,GAGX;IACC,OAAO,CACL,eAAK,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAC,QAAQ,4DACpD,UAAU,CAAC,IAAI,+EAAoB,UAAU,CAAC,EAAE,UACrD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,UAAU,EACV,KAAK,EACL,UAAU,GAKX;IACC,OAAO,UAAU,CAAC,kBAAkB,EAAE,KAAK,EAAE;QAC3C,QAAQ,EAAE,UAAU,CAAC,EAAE;QACvB,QAAQ,EAAE,KAAC,YAAY,IAAC,UAAU,EAAE,UAAU,GAAI;KACnD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,UAAoC;IACtD,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAkC,EAClC,aAAiC;IAEjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACtC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CACtD,CAAC;IACF,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,EAAE,CAAC;QACP,IAAI,OAAO,cAAc,KAAK,WAAW,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YAC5D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AASD,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,OAAO,GAAG,EAAE,EACZ,UAAU,GACO;IACjB,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,CAGjB,SAAS,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CACtC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,UAAU,CACxD,CAAC;IACF,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,YAAY,GAChB,SAAS,GAAG,6BAA6B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACtC,iBAAiB,CACf,MAAM,CAAC,UAAU,GAAG,sBAAsB,EAC1C,MAAM,CAAC,UAAU,CAClB,CACF,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CACxD,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,iBAAiB,CACf,OAAO,KAAK,eAAe;gBACzB,CAAC,CAAC,SAAS,GAAG,sBAAsB;gBACpC,CAAC,CAAC,OAAO,EACX,SAAS,CACV,CACF,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9B,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,YAAgC,CAAC;QACrC,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACvD,aAAa,CAAC,OAAO;gBACnB,QAAQ,CAAC,aAAa,YAAY,WAAW;oBAC3C,CAAC,CAAC,QAAQ,CAAC,aAAa;oBACxB,CAAC,CAAC,IAAI,CAAC;QACb,CAAC;QACD,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;YACrC,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE;gBACxC,IAAI,MAAM,EAAE,WAAW;oBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;;oBAEtC,QAAQ;yBACL,aAAa,CAAsB,gBAAgB,CAAC;wBACrD,EAAE,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC7C,OAAO,GAAG,EAAE;YACV,IAAI,YAAY,KAAK,SAAS;gBAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACrE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO;QAC5D,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CACxC,uGAAuG,CACxG,CAAC;YACF,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAEjE,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GACX,QAAQ,CAAC,aAAa,YAAY,WAAW;YAC3C,CAAC,CAAC,QAAQ,CAAC,aAAa;YACxB,CAAC,CAAC,IAAI,CAAC;QACX,IACE,OAAO,KAAK,IAAI;YAChB,OAAO,CAAC,OAAO,CAAC,uCAAuC,CAAC,KAAK,IAAI,EACjE,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAChC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,CAAC,KAAmC,EAAE,EAAE;QAChE,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,CAAC,KAAmC,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,KAAK,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,OAAO;QACjD,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,CAAC,KAAmC,EAAE,EAAE;QAC/D,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,OAAO;QACxD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;IACF,MAAM,kBAAkB,GAAG,CAAC,KAAoC,EAAE,EAAE;QAClE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;YAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;aAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY;YAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;aACrD,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;YAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;aACpD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE,QAAQ,CAAC,SAAS,GAAG,kBAAkB,CAAC,CAAC;;YAClE,OAAO;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,8BACG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,CACzB,cACE,SAAS,EAAC,iCAAiC,EAC3C,IAAI,EAAC,WAAW,gBACL,4HAAwB,sBAClB,UAAU,mBACZ,eAAe,mBACf,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC,mBACtD,KAAK,EACpB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,iBAAiB,EAChC,aAAa,EAAE,iBAAiB,EAChC,WAAW,EAAE,gBAAgB,EAC7B,eAAe,EAAE,gBAAgB,EACjC,SAAS,EAAE,kBAAkB,GAC7B,CACH,CAAC,CAAC,CAAC,IAAI,EACR,iBACE,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,kDAAkD,YAAY,EAAE,uBACxD,YAAY,gBACnB,WAAW,UAAU,CAAC,MAAM,CAAC,EAAE,EAC3C,QAAQ,EAAE,CAAC,CAAC,EACZ,KAAK,EACH,YAAY,KAAK,MAAM;oBACrB,CAAC,CAAE,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAoB;oBAC5C,CAAC,CAAC,SAAS,EAEf,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;oBACnB,IACE,YAAY,KAAK,YAAY;wBAC7B,KAAK,CAAC,GAAG,KAAK,QAAQ;wBACtB,CAAC,KAAK,CAAC,gBAAgB,EACvB,CAAC;wBACD,KAAK,CAAC,eAAe,EAAE,CAAC;wBACxB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC,aAED,kBAAQ,SAAS,EAAC,gCAAgC,aAChD,uBAAK,UAAU,CAAC,MAAM,CAAC,GAAM,EAC7B,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,gBAC7B,mBAAmB,UAAU,CAAC,MAAM,CAAC,EAAE,EACnD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,YAE/C,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,eAAM,CAAC,EAAC,sBAAsB,GAAG,GAC7B,GACC,IACF,EACT,cAAK,SAAS,EAAC,gCAAgC,YAC5C,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;4BACvC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC;4BACxD,IACE,CAAC,OAAO;gCACR,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAChE,CAAC;gCACD,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;4BAC9C,IAAI,MAAM,KAAK,SAAS;gCAAE,OAAO,IAAI,CAAC;4BACtC,MAAM,KAAK,GAA6B;gCACtC,OAAO,EAAE,UAAU,CAAC,EAAE;gCACtB,SAAS,EAAE,UAAU,CAAC,IAAI;gCAC1B,SAAS;gCACT,OAAO;gCACP,OAAO;gCACP,YAAY;gCACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gCACtC,OAAO,EAAE;oCACP,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;oCAClD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;wCAChC,MAAM,EAAE,WAAW;wCACnB,KAAK,EAAE,OAAO,EAAE,KAAK;qCACtB,CAAC;iCACL;gCACD,MAAM;6BACP,CAAC;4BACF,OAAO,CACL,cAEE,SAAS,EAAC,8BAA8B,EACxC,MAAM,EAAE,CAAC,OAAO,iBACH,CAAC,OAAO,YAErB,KAAC,kBAAkB,IAAC,UAAU,EAAE,UAAU,YACxC,KAAC,aAAa,IACZ,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,GACtB,GACiB,IAXhB,UAAU,CAAC,EAAE,CAYd,CACP,CAAC;wBACJ,CAAC,CAAC,GACE,IACA,IACP,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"PanelHost.js","sourceRoot":"","sources":["../../../src/client/panels/PanelHost.tsx"],"names":[],"mappings":"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"}
@@ -30,10 +30,10 @@ export function QaPanelLauncher({ panels, }) {
30
30
  const visible = snapshot.definitions.filter((definition) => definition.userVisible !== false);
31
31
  if (visible.length === 0)
32
32
  return null;
33
- return (_jsx("nav", { className: "dsh-qa-panel-launcher", "aria-label": "\u041F\u0430\u043D\u0435\u043B\u0438 QA", children: visible.map((definition) => {
33
+ return (_jsx("nav", { className: "dsh-qa-panel-launcher", "data-testid": "qa-panel-launcher", "aria-label": "\u041F\u0430\u043D\u0435\u043B\u0438 QA", children: visible.map((definition) => {
34
34
  const label = title(definition);
35
35
  const active = snapshot.activeKind === definition.kind;
36
- return (_jsx("button", { type: "button", className: "dsh-qa-panel-launcher__button", "aria-label": `${active ? "Закрыть" : "Открыть"} панель: ${label}`, "aria-pressed": active, title: label, onClick: () => panels.toggle(definition.kind), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx(PanelIcon, { token: definition.icon }) }) }, definition.id));
36
+ return (_jsx("button", { type: "button", className: "dsh-qa-panel-launcher__button", "data-testid": "qa-panel-launcher-button", "aria-label": `${active ? "Закрыть" : "Открыть"} панель: ${label}`, "aria-pressed": active, title: label, onClick: () => panels.toggle(definition.kind), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx(PanelIcon, { token: definition.icon }) }) }, definition.id));
37
37
  }) }));
38
38
  }
39
39
  //# sourceMappingURL=PanelLauncher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PanelLauncher.js","sourceRoot":"","sources":["../../../src/client/panels/PanelLauncher.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI7C,SAAS,KAAK,CAAC,UAAoC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAA0C;IAClE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,eAAM,CAAC,EAAC,oDAAoD,GAAG,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,eAAM,CAAC,EAAC,8CAA8C,GAAG,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,eAAM,CAAC,EAAC,mCAAmC,GAAG,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,iCAAiC,GAAG,CAAC;QACtD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,gCAAgC,GAAG,CAAC;QACrD;YACE,OAAO,CACL,eAAM,CAAC,EAAC,mEAAmE,GAAG,CAC/E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,KAAK,CACjD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,cAAK,SAAS,EAAC,uBAAuB,gBAAY,yCAAW,YAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC;YACvD,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,gBAC7B,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,EAAE,kBAClD,MAAM,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAE7C,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,KAAC,SAAS,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAI,GACjC,IAVD,UAAU,CAAC,EAAE,CAWX,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"PanelLauncher.js","sourceRoot":"","sources":["../../../src/client/panels/PanelLauncher.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI7C,SAAS,KAAK,CAAC,UAAoC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAA0C;IAClE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,eAAM,CAAC,EAAC,oDAAoD,GAAG,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,eAAM,CAAC,EAAC,8CAA8C,GAAG,CAAC;QACnE,KAAK,MAAM;YACT,OAAO,eAAM,CAAC,EAAC,mCAAmC,GAAG,CAAC;QACxD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,iCAAiC,GAAG,CAAC;QACtD,KAAK,UAAU;YACb,OAAO,eAAM,CAAC,EAAC,gCAAgC,GAAG,CAAC;QACrD;YACE,OAAO,CACL,eAAM,CAAC,EAAC,mEAAmE,GAAG,CAC/E,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,MAAM,QAAQ,GAAG,oBAAoB,CACnC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,KAAK,CACjD,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,cACE,SAAS,EAAC,uBAAuB,iBACrB,mBAAmB,gBACpB,yCAAW,YAErB,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC;YACvD,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,iBAC7B,0BAA0B,gBAC1B,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,EAAE,kBAClD,MAAM,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAE7C,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YACzC,KAAC,SAAS,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAI,GACjC,IAXD,UAAU,CAAC,EAAE,CAYX,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}