create-principles-disciple 1.146.4 → 1.146.6

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 (308) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/package.json +3 -3
  3. package/release-manager/package.json +3 -3
  4. package/console/dist/ui/App.d.ts +0 -1
  5. package/console/dist/ui/App.js +0 -172
  6. package/console/dist/ui/api.d.ts +0 -611
  7. package/console/dist/ui/api.js +0 -1094
  8. package/console/dist/ui/components/auth/login-form.d.ts +0 -4
  9. package/console/dist/ui/components/auth/login-form.js +0 -142
  10. package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
  11. package/console/dist/ui/components/auth/splash-screen.js +0 -22
  12. package/console/dist/ui/components/error-boundary.d.ts +0 -15
  13. package/console/dist/ui/components/error-boundary.js +0 -30
  14. package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
  15. package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
  16. package/console/dist/ui/components/language-switcher.d.ts +0 -2
  17. package/console/dist/ui/components/language-switcher.js +0 -17
  18. package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
  19. package/console/dist/ui/components/layout/app-sidebar.js +0 -128
  20. package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
  21. package/console/dist/ui/components/layout/page-loading.js +0 -14
  22. package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
  23. package/console/dist/ui/components/layout/page-shell.js +0 -11
  24. package/console/dist/ui/components/layout/section-title.d.ts +0 -10
  25. package/console/dist/ui/components/layout/section-title.js +0 -9
  26. package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
  27. package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
  28. package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
  29. package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
  30. package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
  31. package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
  32. package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
  33. package/console/dist/ui/components/notifications/sound-storage.js +0 -37
  34. package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
  35. package/console/dist/ui/components/notifications/useNotifications.js +0 -9
  36. package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
  37. package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
  38. package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
  39. package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
  40. package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
  41. package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
  42. package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
  43. package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
  44. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
  45. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
  46. package/console/dist/ui/components/theme-provider.d.ts +0 -14
  47. package/console/dist/ui/components/theme-provider.js +0 -40
  48. package/console/dist/ui/components/theme-toggle.d.ts +0 -2
  49. package/console/dist/ui/components/theme-toggle.js +0 -11
  50. package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
  51. package/console/dist/ui/components/ui/alert-dialog.js +0 -26
  52. package/console/dist/ui/components/ui/badge.d.ts +0 -9
  53. package/console/dist/ui/components/ui/badge.js +0 -22
  54. package/console/dist/ui/components/ui/button.d.ts +0 -11
  55. package/console/dist/ui/components/ui/button.js +0 -34
  56. package/console/dist/ui/components/ui/card.d.ts +0 -8
  57. package/console/dist/ui/components/ui/card.js +0 -16
  58. package/console/dist/ui/components/ui/charts.d.ts +0 -51
  59. package/console/dist/ui/components/ui/charts.js +0 -72
  60. package/console/dist/ui/components/ui/dialog.d.ts +0 -19
  61. package/console/dist/ui/components/ui/dialog.js +0 -22
  62. package/console/dist/ui/components/ui/input.d.ts +0 -3
  63. package/console/dist/ui/components/ui/input.js +0 -8
  64. package/console/dist/ui/components/ui/markdown.d.ts +0 -24
  65. package/console/dist/ui/components/ui/markdown.js +0 -119
  66. package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
  67. package/console/dist/ui/components/ui/progress-bar.js +0 -38
  68. package/console/dist/ui/components/ui/select.d.ts +0 -13
  69. package/console/dist/ui/components/ui/select.js +0 -26
  70. package/console/dist/ui/components/ui/separator.d.ts +0 -3
  71. package/console/dist/ui/components/ui/separator.js +0 -6
  72. package/console/dist/ui/components/ui/sheet.d.ts +0 -25
  73. package/console/dist/ui/components/ui/sheet.js +0 -37
  74. package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
  75. package/console/dist/ui/components/ui/shiny-text.js +0 -46
  76. package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
  77. package/console/dist/ui/components/ui/skeleton.js +0 -6
  78. package/console/dist/ui/components/ui/sonner.d.ts +0 -3
  79. package/console/dist/ui/components/ui/sonner.js +0 -13
  80. package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
  81. package/console/dist/ui/components/ui/tooltip.js +0 -10
  82. package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
  83. package/console/dist/ui/data/daily-thoughts.js +0 -164
  84. package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
  85. package/console/dist/ui/hooks/useNotificationSound.js +0 -74
  86. package/console/dist/ui/i18n/en.json +0 -2399
  87. package/console/dist/ui/i18n/index.d.ts +0 -2
  88. package/console/dist/ui/i18n/index.js +0 -32
  89. package/console/dist/ui/i18n/zh-CN.json +0 -2399
  90. package/console/dist/ui/main.d.ts +0 -1
  91. package/console/dist/ui/main.js +0 -9
  92. package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
  93. package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
  94. package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
  95. package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
  96. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
  97. package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
  98. package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
  99. package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
  100. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
  101. package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
  102. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
  103. package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
  104. package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
  105. package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
  106. package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
  107. package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
  108. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
  109. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
  110. package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
  111. package/console/dist/ui/pages/debt/DebtPage.js +0 -222
  112. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
  113. package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
  114. package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
  115. package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
  116. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
  117. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
  118. package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
  119. package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
  120. package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
  121. package/console/dist/ui/pages/focus/FocusPage.js +0 -567
  122. package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
  123. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
  124. package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
  125. package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
  126. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
  127. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
  128. package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
  129. package/console/dist/ui/pages/focus/focus-validation.js +0 -211
  130. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
  131. package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
  132. package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
  133. package/console/dist/ui/pages/intent/IntentPage.js +0 -252
  134. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
  135. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
  136. package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
  137. package/console/dist/ui/pages/pain/PainPage.js +0 -420
  138. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
  139. package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
  140. package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
  141. package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
  142. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
  143. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
  144. package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
  145. package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
  146. package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
  147. package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
  148. package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
  149. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
  150. package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
  151. package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
  152. package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
  153. package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
  154. package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
  155. package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
  156. package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
  157. package/console/dist/ui/utils/agent-metadata.js +0 -284
  158. package/console/dist/ui/utils/approval-review.d.ts +0 -30
  159. package/console/dist/ui/utils/approval-review.js +0 -50
  160. package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
  161. package/console/dist/ui/utils/approval-warning-localization.js +0 -148
  162. package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
  163. package/console/dist/ui/utils/attention-presentation.js +0 -46
  164. package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
  165. package/console/dist/ui/utils/blocker-localization.js +0 -36
  166. package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
  167. package/console/dist/ui/utils/control-center-helpers.js +0 -189
  168. package/console/dist/ui/utils/enum-labels.d.ts +0 -50
  169. package/console/dist/ui/utils/enum-labels.js +0 -171
  170. package/console/dist/ui/utils/format-date.d.ts +0 -11
  171. package/console/dist/ui/utils/format-date.js +0 -17
  172. package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
  173. package/console/dist/ui/utils/onboarding-state.js +0 -77
  174. package/console/dist/ui/utils/reading-layout.d.ts +0 -20
  175. package/console/dist/ui/utils/reading-layout.js +0 -46
  176. package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
  177. package/console/dist/ui/utils/rule-binding-validators.js +0 -188
  178. package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
  179. package/console/dist/ui/utils/runtime-mode.js +0 -11
  180. package/console/dist/ui/utils/token-storage.d.ts +0 -22
  181. package/console/dist/ui/utils/token-storage.js +0 -47
  182. package/console/dist/ui/utils/validators.d.ts +0 -1178
  183. package/console/dist/ui/utils/validators.js +0 -3297
  184. package/release-manager/dist/bootstrap-entry.d.ts +0 -2
  185. package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
  186. package/release-manager/dist/bootstrap-entry.js.map +0 -1
  187. package/release-manager/dist/i18n.d.ts +0 -6
  188. package/release-manager/dist/i18n.d.ts.map +0 -1
  189. package/release-manager/dist/i18n.js.map +0 -1
  190. package/release-manager/dist/index.d.ts +0 -7
  191. package/release-manager/dist/index.d.ts.map +0 -1
  192. package/release-manager/dist/index.js +0 -656
  193. package/release-manager/dist/index.js.map +0 -1
  194. package/release-manager/dist/installer.d.ts +0 -629
  195. package/release-manager/dist/installer.d.ts.map +0 -1
  196. package/release-manager/dist/installer.js.map +0 -1
  197. package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
  198. package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
  199. package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
  200. package/release-manager/dist/installers/index.d.ts +0 -51
  201. package/release-manager/dist/installers/index.d.ts.map +0 -1
  202. package/release-manager/dist/installers/index.js.map +0 -1
  203. package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
  204. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
  205. package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
  206. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
  207. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
  208. package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
  209. package/release-manager/dist/mvp-config.d.ts +0 -233
  210. package/release-manager/dist/mvp-config.d.ts.map +0 -1
  211. package/release-manager/dist/mvp-config.js.map +0 -1
  212. package/release-manager/dist/prompts.d.ts +0 -43
  213. package/release-manager/dist/prompts.d.ts.map +0 -1
  214. package/release-manager/dist/prompts.js +0 -268
  215. package/release-manager/dist/prompts.js.map +0 -1
  216. package/release-manager/dist/skill-language.d.ts +0 -32
  217. package/release-manager/dist/skill-language.d.ts.map +0 -1
  218. package/release-manager/dist/skill-language.js.map +0 -1
  219. package/release-manager/dist/uninstaller.d.ts +0 -68
  220. package/release-manager/dist/uninstaller.d.ts.map +0 -1
  221. package/release-manager/dist/uninstaller.js +0 -746
  222. package/release-manager/dist/uninstaller.js.map +0 -1
  223. package/release-manager/dist/update/apply-payload.d.ts +0 -143
  224. package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
  225. package/release-manager/dist/update/apply-payload.js.map +0 -1
  226. package/release-manager/dist/update/atomic-file.d.ts +0 -35
  227. package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
  228. package/release-manager/dist/update/atomic-file.js.map +0 -1
  229. package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
  230. package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
  231. package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
  232. package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
  233. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
  234. package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
  235. package/release-manager/dist/update/channel-metadata.d.ts +0 -28
  236. package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
  237. package/release-manager/dist/update/channel-metadata.js.map +0 -1
  238. package/release-manager/dist/update/channel-promotion.d.ts +0 -39
  239. package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
  240. package/release-manager/dist/update/channel-promotion.js +0 -55
  241. package/release-manager/dist/update/channel-promotion.js.map +0 -1
  242. package/release-manager/dist/update/console-surface.d.ts +0 -19
  243. package/release-manager/dist/update/console-surface.d.ts.map +0 -1
  244. package/release-manager/dist/update/console-surface.js.map +0 -1
  245. package/release-manager/dist/update/data-compatibility.d.ts +0 -35
  246. package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
  247. package/release-manager/dist/update/data-compatibility.js +0 -45
  248. package/release-manager/dist/update/data-compatibility.js.map +0 -1
  249. package/release-manager/dist/update/install-layout.d.ts +0 -105
  250. package/release-manager/dist/update/install-layout.d.ts.map +0 -1
  251. package/release-manager/dist/update/install-layout.js.map +0 -1
  252. package/release-manager/dist/update/product-identity.d.ts +0 -70
  253. package/release-manager/dist/update/product-identity.d.ts.map +0 -1
  254. package/release-manager/dist/update/product-identity.js.map +0 -1
  255. package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
  256. package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
  257. package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
  258. package/release-manager/dist/update/release-identity.d.ts +0 -33
  259. package/release-manager/dist/update/release-identity.d.ts.map +0 -1
  260. package/release-manager/dist/update/release-identity.js.map +0 -1
  261. package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
  262. package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
  263. package/release-manager/dist/update/release-manager-authority.js.map +0 -1
  264. package/release-manager/dist/update/release-manager.d.ts +0 -156
  265. package/release-manager/dist/update/release-manager.d.ts.map +0 -1
  266. package/release-manager/dist/update/release-manager.js.map +0 -1
  267. package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
  268. package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
  269. package/release-manager/dist/update/release-metadata-publisher.js +0 -478
  270. package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
  271. package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
  272. package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
  273. package/release-manager/dist/update/release-metadata-source.js.map +0 -1
  274. package/release-manager/dist/update/release-metadata.d.ts +0 -60
  275. package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
  276. package/release-manager/dist/update/release-metadata.js.map +0 -1
  277. package/release-manager/dist/update/release-policy.d.ts +0 -51
  278. package/release-manager/dist/update/release-policy.d.ts.map +0 -1
  279. package/release-manager/dist/update/release-policy.js.map +0 -1
  280. package/release-manager/dist/update/rollback-policy.d.ts +0 -56
  281. package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
  282. package/release-manager/dist/update/rollback-policy.js +0 -61
  283. package/release-manager/dist/update/rollback-policy.js.map +0 -1
  284. package/release-manager/dist/update/transaction-journal.d.ts +0 -212
  285. package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
  286. package/release-manager/dist/update/transaction-journal.js.map +0 -1
  287. package/release-manager/dist/update/trust-metadata.d.ts +0 -55
  288. package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
  289. package/release-manager/dist/update/trust-metadata.js.map +0 -1
  290. package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
  291. package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
  292. package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
  293. package/release-manager/dist/update/update-history.d.ts +0 -46
  294. package/release-manager/dist/update/update-history.d.ts.map +0 -1
  295. package/release-manager/dist/update/update-history.js +0 -123
  296. package/release-manager/dist/update/update-history.js.map +0 -1
  297. package/release-manager/dist/utils/config-file-io.d.ts +0 -34
  298. package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
  299. package/release-manager/dist/utils/config-file-io.js.map +0 -1
  300. package/release-manager/dist/utils/env.d.ts +0 -94
  301. package/release-manager/dist/utils/env.d.ts.map +0 -1
  302. package/release-manager/dist/utils/env.js.map +0 -1
  303. package/release-manager/dist/utils/logger.d.ts +0 -15
  304. package/release-manager/dist/utils/logger.d.ts.map +0 -1
  305. package/release-manager/dist/utils/logger.js.map +0 -1
  306. package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
  307. package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
  308. package/release-manager/dist/utils/workspace-divergence.js.map +0 -1
@@ -1,136 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useCallback, useEffect, useRef, useState, } from 'react';
3
- import { fetchGovernanceQueue, fetchOwnerDecisions } from '../../api.js';
4
- import { useNotificationSound } from '../../hooks/useNotificationSound.js';
5
- import { diffNotificationCounts } from './notification-reducer.js';
6
- import { loadSoundEnabled, saveSoundEnabled } from './sound-storage.js';
7
- import { resetFaviconAndTitle, updateFaviconAndTitle } from './favicon-badge.js';
8
- const POLL_INTERVAL_MS = 30000;
9
- export const NotificationContext = createContext(null);
10
- export function NotificationProvider({ children }) {
11
- const [state, setState] = useState({
12
- pendingCount: 0,
13
- degradedCount: 0,
14
- soundEnabled: loadSoundEnabled(),
15
- });
16
- const { playSound, unlockAudio, audioUnlocked } = useNotificationSound();
17
- const prevCountsRef = useRef(null);
18
- const hasSuccessfulPollRef = useRef(false);
19
- const pollInFlightRef = useRef(false);
20
- const pendingAlertWhileHiddenRef = useRef(false);
21
- const degradedAlertWhileHiddenRef = useRef(false);
22
- const setSoundEnabled = useCallback((enabled) => {
23
- saveSoundEnabled(enabled);
24
- setState((prev) => ({ ...prev, soundEnabled: enabled }));
25
- }, []);
26
- const poll = useCallback(async () => {
27
- if (pollInFlightRef.current)
28
- return;
29
- pollInFlightRef.current = true;
30
- try {
31
- const result = await fetchGovernanceQueue();
32
- if (!result.success) {
33
- console.warn('Notification poll failed:', result.error);
34
- return;
35
- }
36
- const degradedCount = result.data.degradedSignals?.length ?? 0;
37
- // PRI-629 (SPEC §27): 侧边栏徽标 N = 真实可执行 Owner 决策数
38
- // (OwnerDecisionItem.length) — 不是 approvals pending / candidate /
39
- // needs_human_review 计数。投影失败时回退 approvals pending (保守)。
40
- const decisionsResult = await fetchOwnerDecisions();
41
- const pendingCount = decisionsResult.success
42
- ? decisionsResult.data.total
43
- : result.data.pendingReviewCount;
44
- hasSuccessfulPollRef.current = true;
45
- setState((prev) => ({
46
- ...prev,
47
- pendingCount,
48
- degradedCount,
49
- }));
50
- }
51
- finally {
52
- pollInFlightRef.current = false;
53
- }
54
- }, []);
55
- // Initial poll + interval
56
- useEffect(() => {
57
- poll();
58
- const interval = setInterval(poll, POLL_INTERVAL_MS);
59
- return () => clearInterval(interval);
60
- }, [poll]);
61
- // Play sounds when counts increase (respect hidden state)
62
- useEffect(() => {
63
- if (!hasSuccessfulPollRef.current)
64
- return;
65
- if (typeof document !== 'undefined' && document.hidden) {
66
- const diff = diffNotificationCounts(state, prevCountsRef.current);
67
- if (state.soundEnabled && diff.pendingIncreased)
68
- pendingAlertWhileHiddenRef.current = true;
69
- if (state.soundEnabled && diff.degradedIncreased)
70
- degradedAlertWhileHiddenRef.current = true;
71
- prevCountsRef.current = {
72
- pendingCount: state.pendingCount,
73
- degradedCount: state.degradedCount,
74
- };
75
- return;
76
- }
77
- if (!state.soundEnabled || !audioUnlocked) {
78
- if (!state.soundEnabled) {
79
- pendingAlertWhileHiddenRef.current = false;
80
- degradedAlertWhileHiddenRef.current = false;
81
- }
82
- prevCountsRef.current = {
83
- pendingCount: state.pendingCount,
84
- degradedCount: state.degradedCount,
85
- };
86
- return;
87
- }
88
- const diff = diffNotificationCounts(state, prevCountsRef.current);
89
- if (diff.pendingIncreased || pendingAlertWhileHiddenRef.current) {
90
- playSound('pending');
91
- pendingAlertWhileHiddenRef.current = false;
92
- }
93
- if (diff.degradedIncreased || degradedAlertWhileHiddenRef.current) {
94
- playSound('degraded');
95
- degradedAlertWhileHiddenRef.current = false;
96
- }
97
- prevCountsRef.current = {
98
- pendingCount: state.pendingCount,
99
- degradedCount: state.degradedCount,
100
- };
101
- }, [state, playSound, audioUnlocked]);
102
- // Update favicon + title
103
- useEffect(() => {
104
- updateFaviconAndTitle(state.pendingCount, state.degradedCount);
105
- }, [state.pendingCount, state.degradedCount]);
106
- useEffect(() => () => {
107
- resetFaviconAndTitle();
108
- }, []);
109
- // Unlock audio on first user interaction
110
- useEffect(() => {
111
- if (typeof window === 'undefined')
112
- return;
113
- const handleInteraction = () => {
114
- unlockAudio();
115
- };
116
- window.addEventListener('click', handleInteraction, { once: true });
117
- window.addEventListener('keydown', handleInteraction, { once: true });
118
- return () => {
119
- window.removeEventListener('click', handleInteraction);
120
- window.removeEventListener('keydown', handleInteraction);
121
- };
122
- }, [unlockAudio]);
123
- // Re-poll immediately when tab becomes visible
124
- useEffect(() => {
125
- if (typeof document === 'undefined')
126
- return;
127
- const handleVisibilityChange = () => {
128
- if (!document.hidden) {
129
- poll();
130
- }
131
- };
132
- document.addEventListener('visibilitychange', handleVisibilityChange);
133
- return () => document.removeEventListener('visibilitychange', handleVisibilityChange);
134
- }, [poll]);
135
- return (_jsx(NotificationContext.Provider, { value: { ...state, setSoundEnabled, audioUnlocked }, children: children }));
136
- }
@@ -1,3 +0,0 @@
1
- export declare function renderFaviconDataUrl(totalCount: number): string;
2
- export declare function updateFaviconAndTitle(pendingCount: number, degradedCount: number): void;
3
- export declare function resetFaviconAndTitle(): void;
@@ -1,68 +0,0 @@
1
- const ORIGINAL_TITLE = 'PD Console';
2
- const CANVAS_SIZE = 32;
3
- const DYNAMIC_FAVICON_ID = 'pd-dynamic-favicon';
4
- function drawBaseFavicon(ctx) {
5
- ctx.fillStyle = '#1a1a1a';
6
- ctx.fillRect(0, 0, CANVAS_SIZE, CANVAS_SIZE);
7
- ctx.fillStyle = '#d4a853';
8
- ctx.font = 'bold 14px sans-serif';
9
- ctx.textAlign = 'center';
10
- ctx.textBaseline = 'middle';
11
- ctx.fillText('PD', CANVAS_SIZE / 2, CANVAS_SIZE / 2);
12
- }
13
- function drawRedDot(ctx) {
14
- ctx.fillStyle = '#dc2626';
15
- ctx.beginPath();
16
- ctx.arc(CANVAS_SIZE - 6, 6, 5, 0, Math.PI * 2);
17
- ctx.fill();
18
- }
19
- export function renderFaviconDataUrl(totalCount) {
20
- if (typeof document === 'undefined')
21
- return '';
22
- // eslint-disable-next-line no-undef
23
- const canvas = document.createElement('canvas');
24
- canvas.width = CANVAS_SIZE;
25
- canvas.height = CANVAS_SIZE;
26
- const ctx = canvas.getContext('2d');
27
- if (!ctx)
28
- return '';
29
- drawBaseFavicon(ctx);
30
- if (totalCount > 0) {
31
- drawRedDot(ctx);
32
- }
33
- return canvas.toDataURL('image/png');
34
- }
35
- export function updateFaviconAndTitle(pendingCount, degradedCount) {
36
- if (typeof document === 'undefined')
37
- return;
38
- const totalCount = pendingCount + degradedCount;
39
- // eslint-disable-next-line no-undef
40
- document.title = totalCount > 0
41
- ? `(${totalCount}) PD Governance Workspace`
42
- : ORIGINAL_TITLE;
43
- // eslint-disable-next-line no-undef
44
- const existing = document.getElementById(DYNAMIC_FAVICON_ID);
45
- let link = existing instanceof HTMLLinkElement ? existing : null;
46
- if (!link) {
47
- existing?.remove();
48
- // eslint-disable-next-line no-undef
49
- link = document.createElement('link');
50
- link.id = DYNAMIC_FAVICON_ID;
51
- link.rel = 'icon';
52
- link.type = 'image/png';
53
- // eslint-disable-next-line no-undef
54
- document.head.appendChild(link);
55
- }
56
- const dataUrl = renderFaviconDataUrl(totalCount);
57
- if (dataUrl) {
58
- link.href = dataUrl;
59
- }
60
- }
61
- export function resetFaviconAndTitle() {
62
- if (typeof document === 'undefined')
63
- return;
64
- // eslint-disable-next-line no-undef
65
- document.title = ORIGINAL_TITLE;
66
- // eslint-disable-next-line no-undef
67
- document.getElementById(DYNAMIC_FAVICON_ID)?.remove();
68
- }
@@ -1,9 +0,0 @@
1
- export type NotificationCounts = {
2
- pendingCount: number;
3
- degradedCount: number;
4
- };
5
- export type NotificationDiff = {
6
- pendingIncreased: boolean;
7
- degradedIncreased: boolean;
8
- };
9
- export declare function diffNotificationCounts(current: NotificationCounts, previous: NotificationCounts | null): NotificationDiff;
@@ -1,9 +0,0 @@
1
- export function diffNotificationCounts(current, previous) {
2
- if (previous === null) {
3
- return { pendingIncreased: false, degradedIncreased: false };
4
- }
5
- return {
6
- pendingIncreased: current.pendingCount > previous.pendingCount,
7
- degradedIncreased: current.degradedCount > previous.degradedCount,
8
- };
9
- }
@@ -1,3 +0,0 @@
1
- export declare const SOUND_ENABLED_KEY = "pd-sound-enabled";
2
- export declare function loadSoundEnabled(): boolean;
3
- export declare function saveSoundEnabled(enabled: boolean): void;
@@ -1,37 +0,0 @@
1
- export const SOUND_ENABLED_KEY = 'pd-sound-enabled';
2
- function getStorage() {
3
- if (typeof window === 'undefined')
4
- return null;
5
- try {
6
- // eslint-disable-next-line no-undef
7
- return window.localStorage;
8
- }
9
- catch (error) {
10
- console.warn('Sound preference storage is unavailable:', error);
11
- return null;
12
- }
13
- }
14
- export function loadSoundEnabled() {
15
- const storage = getStorage();
16
- if (!storage)
17
- return true;
18
- try {
19
- const stored = storage.getItem(SOUND_ENABLED_KEY);
20
- return stored === null ? true : stored === 'true';
21
- }
22
- catch (error) {
23
- console.warn('Failed to read sound preference:', error);
24
- return true;
25
- }
26
- }
27
- export function saveSoundEnabled(enabled) {
28
- const storage = getStorage();
29
- if (!storage)
30
- return;
31
- try {
32
- storage.setItem(SOUND_ENABLED_KEY, String(enabled));
33
- }
34
- catch (error) {
35
- console.warn('Failed to save sound preference:', error);
36
- }
37
- }
@@ -1 +0,0 @@
1
- export declare function useNotifications(): import("./NotificationProvider.js").NotificationContextValue;
@@ -1,9 +0,0 @@
1
- import { useContext } from 'react';
2
- import { NotificationContext } from './NotificationProvider.js';
3
- export function useNotifications() {
4
- const ctx = useContext(NotificationContext);
5
- if (!ctx) {
6
- throw new Error('useNotifications must be used within NotificationProvider');
7
- }
8
- return ctx;
9
- }
@@ -1,8 +0,0 @@
1
- interface CircuitDiagramProps {
2
- /** Highlight a specific node (evidence/principle/ownerGate/behavior) */
3
- highlightNode?: 'evidence' | 'principle' | 'ownerGate' | 'behavior' | null;
4
- /** Compact mode for smaller spaces */
5
- compact?: boolean;
6
- }
7
- export declare function CircuitDiagram({ highlightNode, compact }: CircuitDiagramProps): import("react").JSX.Element;
8
- export {};
@@ -1,18 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useTranslation } from 'react-i18next';
3
- const NODES = [
4
- { id: 'evidence', labelKey: 'pages.welcome.step1.circuitNodes.evidence', cx: 80, cy: 80 },
5
- { id: 'principle', labelKey: 'pages.welcome.step1.circuitNodes.principle', cx: 240, cy: 80 },
6
- { id: 'ownerGate', labelKey: 'pages.welcome.step1.circuitNodes.ownerGate', cx: 240, cy: 180 },
7
- { id: 'behavior', labelKey: 'pages.welcome.step1.circuitNodes.behavior', cx: 80, cy: 180 },
8
- ];
9
- export function CircuitDiagram({ highlightNode = null, compact = false }) {
10
- const { t } = useTranslation();
11
- const size = compact ? 240 : 320;
12
- const nodeRadius = compact ? 28 : 36;
13
- return (_jsx("div", { className: "circuit-diagram", role: "img", "aria-label": t('pages.welcome.step1.circuitLabel'), children: _jsxs("svg", { width: size, height: size * 0.75, viewBox: "0 0 320 240", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("line", { x1: NODES[0].cx, y1: NODES[0].cy, x2: NODES[1].cx, y2: NODES[1].cy, stroke: "var(--color-gov)", strokeWidth: "1.5" }), _jsx("line", { x1: NODES[1].cx, y1: NODES[1].cy, x2: NODES[2].cx, y2: NODES[2].cy, stroke: "var(--color-gov)", strokeWidth: "1.5" }), _jsx("line", { x1: NODES[2].cx, y1: NODES[2].cy, x2: NODES[3].cx, y2: NODES[3].cy, stroke: "var(--color-gov)", strokeWidth: "1.5" }), _jsx("line", { x1: NODES[3].cx, y1: NODES[3].cy, x2: NODES[0].cx, y2: NODES[0].cy, stroke: "var(--color-gov)", strokeWidth: "1.5" }), _jsx("polygon", { points: `${NODES[1].cx - 8},${NODES[1].cy - 4} ${NODES[1].cx - 8},${NODES[1].cy + 4} ${NODES[1].cx},${NODES[1].cy}`, fill: "var(--color-gov)" }), _jsx("polygon", { points: `${NODES[2].cx + 4},${NODES[2].cy - 8} ${NODES[2].cx - 4},${NODES[2].cy - 8} ${NODES[2].cx},${NODES[2].cy}`, fill: "var(--color-gov)" }), _jsx("polygon", { points: `${NODES[3].cx + 8},${NODES[3].cy - 4} ${NODES[3].cx + 8},${NODES[3].cy + 4} ${NODES[3].cx},${NODES[3].cy}`, fill: "var(--color-gov)" }), _jsx("polygon", { points: `${NODES[0].cx - 4},${NODES[0].cy + 8} ${NODES[0].cx + 4},${NODES[0].cy + 8} ${NODES[0].cx},${NODES[0].cy}`, fill: "var(--color-gov)" }), NODES.map((node) => {
14
- const isHighlighted = highlightNode === node.id;
15
- const isOwnerGate = node.id === 'ownerGate';
16
- return (_jsxs("g", { children: [_jsx("circle", { cx: node.cx, cy: node.cy, r: nodeRadius, fill: isHighlighted ? 'var(--color-gov)' : 'var(--color-surface)', stroke: isOwnerGate ? 'var(--color-gov)' : 'var(--color-border)', strokeWidth: isOwnerGate ? 2.5 : 1.5 }), _jsx("text", { x: node.cx, y: node.cy, textAnchor: "middle", dominantBaseline: "middle", fontSize: compact ? 9 : 11, fill: isHighlighted ? 'white' : 'var(--color-ink)', fontFamily: "var(--font-sans)", children: t(node.labelKey) })] }, node.id));
17
- })] }) }));
18
- }
@@ -1,22 +0,0 @@
1
- export interface DemoStage {
2
- name: string;
3
- status: 'passed' | 'failed' | 'degraded' | 'skipped';
4
- reason?: string;
5
- nextAction?: string;
6
- evidenceRef?: string;
7
- }
8
- export interface DemoResultData {
9
- status: string;
10
- generatedAt?: string;
11
- narrative?: string;
12
- storyDescription?: string;
13
- stages?: DemoStage[];
14
- simulated?: boolean;
15
- }
16
- interface DemoResultViewProps {
17
- result: DemoResultData | null;
18
- loading: boolean;
19
- error: string | null;
20
- }
21
- export declare function DemoResultView({ result, loading, error }: DemoResultViewProps): import("react").JSX.Element | null;
22
- export {};
@@ -1,33 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useTranslation } from 'react-i18next';
3
- /**
4
- * Map backend demo stage identifiers (snake_case English, stable contract
5
- * from demo-story-a-runner.ts) to localized labels. Falls back to the raw
6
- * name if no mapping exists, so new stages still render (rc-9: no silent
7
- * failure) but future stages should be added here.
8
- */
9
- const STAGE_LABEL_KEYS = {
10
- evidence_seed: 'pages.welcome.step2.stages.evidenceSeed',
11
- principle_proposal: 'pages.welcome.step2.stages.principleProposal',
12
- owner_review: 'pages.welcome.step2.stages.ownerReview',
13
- activation: 'pages.welcome.step2.stages.activation',
14
- follow_up_observation: 'pages.welcome.step2.stages.followUpObservation',
15
- rollback_proof: 'pages.welcome.step2.stages.rollbackProof',
16
- };
17
- function localizeStageName(rawName, t) {
18
- const key = STAGE_LABEL_KEYS[rawName];
19
- return key ? t(key) : rawName;
20
- }
21
- export function DemoResultView({ result, loading, error }) {
22
- const { t } = useTranslation();
23
- if (loading) {
24
- return (_jsx("div", { className: "demo-result-view demo-loading", role: "status", "aria-live": "polite", children: _jsx("span", { className: "demo-status-text", children: t('pages.welcome.step2.demoRunning') }) }));
25
- }
26
- if (error) {
27
- return (_jsxs("div", { className: "demo-result-view demo-error", role: "alert", children: [_jsx("span", { className: "demo-status-text", children: t('pages.welcome.step2.demoFailed') }), _jsx("p", { className: "demo-error-detail", children: error })] }));
28
- }
29
- if (!result) {
30
- return null;
31
- }
32
- return (_jsxs("div", { className: "demo-result-view", role: "region", "aria-label": t('pages.welcome.step2.demoComplete'), children: [result.simulated && (_jsx("div", { className: "demo-simulated-banner", role: "note", children: t('pages.welcome.step2.demoSimulatedNote') })), result.stages && result.stages.length > 0 && (_jsx("ol", { className: "demo-stages", children: result.stages.map((stage, idx) => (_jsxs("li", { className: `demo-stage demo-stage-${stage.status}`, children: [_jsx("span", { className: "demo-stage-name", children: localizeStageName(stage.name, t) }), stage.reason && _jsx("span", { className: "demo-stage-detail", children: stage.reason })] }, idx))) })), _jsxs("div", { className: "demo-labels", children: [_jsx("div", { className: "demo-label-item", children: _jsx("span", { className: "demo-label-title", children: t('pages.welcome.step2.evidenceLabel') }) }), _jsx("div", { className: "demo-label-item", children: _jsx("span", { className: "demo-label-title", children: t('pages.welcome.step2.candidateLabel') }) }), _jsx("div", { className: "demo-label-item", children: _jsx("span", { className: "demo-label-title", children: t('pages.welcome.step2.ownerGateLabel') }) }), _jsx("div", { className: "demo-label-item", children: _jsx("span", { className: "demo-label-title", children: t('pages.welcome.step2.activationLabel') }) }), _jsx("div", { className: "demo-label-item", children: _jsx("span", { className: "demo-label-title", children: t('pages.welcome.step2.rollbackLabel') }) })] })] }));
33
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * SlashCommandsCard — renders the core slash command list for onboarding Step 3.
3
- *
4
- * Receives the commands array (with descriptionKey) as a prop from
5
- * ONBOARDING_SLASH_COMMANDS. Each command's description text is fetched via
6
- * i18n using the descriptionKey, keeping all user-facing strings in i18n.
7
- *
8
- * rc-9-no-silent-fallback: when commands array is empty, render the fallback
9
- * message instead of a blank section.
10
- */
11
- import type { SlashCommand } from './slashCommands.js';
12
- interface SlashCommandsCardProps {
13
- commands: SlashCommand[];
14
- }
15
- export declare function SlashCommandsCard({ commands }: SlashCommandsCardProps): import("react").JSX.Element;
16
- export {};
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * SlashCommandsCard — renders the core slash command list for onboarding Step 3.
4
- *
5
- * Receives the commands array (with descriptionKey) as a prop from
6
- * ONBOARDING_SLASH_COMMANDS. Each command's description text is fetched via
7
- * i18n using the descriptionKey, keeping all user-facing strings in i18n.
8
- *
9
- * rc-9-no-silent-fallback: when commands array is empty, render the fallback
10
- * message instead of a blank section.
11
- */
12
- import { useTranslation } from 'react-i18next';
13
- export function SlashCommandsCard({ commands }) {
14
- const { t } = useTranslation();
15
- // rc-9: empty commands must not render as a blank section — show fallback.
16
- if (!commands || commands.length === 0) {
17
- return (_jsx("p", { className: "slash-commands-empty", role: "note", children: t('pages.welcome.step3.emptyListFallback') }));
18
- }
19
- return (_jsx("ul", { className: "slash-commands-list", role: "list", children: commands.map((cmd) => (_jsxs("li", { className: "slash-command-item", children: [_jsxs("div", { className: "slash-command-header", children: [_jsx("code", { className: "slash-command-name", children: cmd.name }), cmd.alias && (_jsx("code", { className: "slash-command-alias", children: cmd.alias }))] }), _jsx("p", { className: "slash-command-description", children: t(cmd.descriptionKey) })] }, cmd.name))) }));
20
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Onboarding slash command metadata (PRI-506).
3
- *
4
- * Command names and aliases are NOT translatable (they are literal slash
5
- * commands the user types), so they live here in a TS module rather than in
6
- * i18n JSON. Only the human-readable descriptions are translated — they live
7
- * under `pages.welcome.step3.commandDescriptions.*` in en.json / zh-CN.json.
8
- *
9
- * EP-06 (Source of Truth): the canonical command list is in
10
- * packages/openclaw-plugin/src/i18n/commands.ts (`commandDescriptions`).
11
- * This module mirrors the 7 core commands selected for onboarding. When the
12
- * canonical list changes, update the descriptions here and in both i18n
13
- * files manually (no cross-package dependency is introduced).
14
- */
15
- export interface SlashCommand {
16
- name: string;
17
- alias?: string;
18
- descriptionKey: string;
19
- }
20
- export declare const ONBOARDING_SLASH_COMMANDS: SlashCommand[];
@@ -1,22 +0,0 @@
1
- /**
2
- * Onboarding slash command metadata (PRI-506).
3
- *
4
- * Command names and aliases are NOT translatable (they are literal slash
5
- * commands the user types), so they live here in a TS module rather than in
6
- * i18n JSON. Only the human-readable descriptions are translated — they live
7
- * under `pages.welcome.step3.commandDescriptions.*` in en.json / zh-CN.json.
8
- *
9
- * EP-06 (Source of Truth): the canonical command list is in
10
- * packages/openclaw-plugin/src/i18n/commands.ts (`commandDescriptions`).
11
- * This module mirrors the 7 core commands selected for onboarding. When the
12
- * canonical list changes, update the descriptions here and in both i18n
13
- * files manually (no cross-package dependency is introduced).
14
- */
15
- export const ONBOARDING_SLASH_COMMANDS = [
16
- { name: '/pd-init', alias: '/pdi', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdInit' },
17
- { name: '/pd-status', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdStatus' },
18
- { name: '/pd-pain', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdPain' },
19
- { name: '/pd-help', alias: '/pdh', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdHelp' },
20
- { name: '/pd-context', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdContext' },
21
- { name: '/pd-focus', descriptionKey: 'pages.welcome.step3.commandDescriptions.pdFocus' },
22
- ];
@@ -1,6 +0,0 @@
1
- import type { ReceiptEvidenceCoverageData, ReceiptSourceStatusData } from "../../api.js";
2
- /** Localized label key for a source status — shared by the degraded notes. */
3
- export declare function getReceiptSourceStatusLabelKey(status: ReceiptSourceStatusData): string;
4
- export declare function ReceiptCoverageDisclosure({ coverage }: {
5
- coverage: ReceiptEvidenceCoverageData;
6
- }): import("react").JSX.Element;
@@ -1,66 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * Receipt evidence coverage disclosure — PRI-590.
4
- *
5
- * Shared block that explains what receipt numbers MEAN: source status,
6
- * observed range, retention policy, and the "observed evidence, not full
7
- * history" limitation. Used by the PrincipleDetail receipt section and the
8
- * Activation page counts context.
9
- *
10
- * Never displays file paths, digests, raw payloads, or tool arguments.
11
- *
12
- * Keys use full paths ("pages.principles.…") because this component binds
13
- * useTranslation() to the default `common` namespace, which carries the
14
- * whole locale tree — usable from pages that pick other namespaces.
15
- */
16
- import { useTranslation } from "react-i18next";
17
- import { formatDate } from "../../utils/format-date.js";
18
- // ERR-106: exhaustive Records over the status unions — a binary ternary would
19
- // fold one member into a default and misrepresent its state.
20
- const SOURCE_STATUS_LABEL_KEYS = {
21
- available: "pages.principles.detail.receipts.coverage.statusAvailable",
22
- disabled: "pages.principles.detail.receipts.coverage.statusDisabled",
23
- unavailable: "pages.principles.detail.receipts.coverage.statusUnavailable",
24
- };
25
- const SOURCE_STATUS_PILL_CLASS = {
26
- available: "border-green/35 text-green bg-green/5",
27
- disabled: "border-amber/35 text-amber bg-amber/5",
28
- unavailable: "border-line text-ink-4 bg-surface/80",
29
- };
30
- const VALIDATION_NOTE_KEYS = {
31
- valid: null,
32
- partial: "pages.principles.detail.receipts.coverage.validationPartial",
33
- malformed: "pages.principles.detail.receipts.coverage.validationMalformed",
34
- };
35
- /**
36
- * reasonCode → localized phrase. Owner-facing copy must not leak snake_case
37
- * technical codes (review round 2). A Map (not a plain object) because the
38
- * lookup key comes from the API payload — no prototype-chain exposure
39
- * (EP-01/ERR-013). Unknown codes fall back to the raw code — fail-visible
40
- * rather than blank, so the debug clue survives.
41
- */
42
- const REASON_CODE_LABEL_KEYS = new Map([
43
- ["receipt_rows_dropped", "pages.principles.detail.receipts.coverage.reasonCodes.receiptRowsDropped"],
44
- ["ledger_level_invalid", "pages.principles.detail.receipts.coverage.reasonCodes.ledgerLevelInvalid"],
45
- ["ledger_counts_unreadable", "pages.principles.detail.receipts.coverage.reasonCodes.ledgerCountsUnreadable"],
46
- ]);
47
- /** Localized label key for a source status — shared by the degraded notes. */
48
- export function getReceiptSourceStatusLabelKey(status) {
49
- return SOURCE_STATUS_LABEL_KEYS[status];
50
- }
51
- export function ReceiptCoverageDisclosure({ coverage }) {
52
- const { t, i18n } = useTranslation();
53
- const validationNoteKey = VALIDATION_NOTE_KEYS[coverage.validationStatus];
54
- // Known codes render as a localized phrase; unknown codes fall back to the
55
- // raw code in parentheses (fail-visible debug clue, never a blank verdict).
56
- let reasonSuffix = null;
57
- if (coverage.reasonCode !== undefined) {
58
- const labelKey = REASON_CODE_LABEL_KEYS.get(coverage.reasonCode);
59
- reasonSuffix = labelKey !== undefined ? ` — ${t(labelKey)}` : ` (${coverage.reasonCode})`;
60
- }
61
- return (_jsxs("div", { "data-testid": "receipt-coverage", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.08em] text-ink-4", children: t("pages.principles.detail.receipts.coverage.label") }), _jsx("span", { className: `inline-flex items-center border rounded-[2px] px-[7px] py-0.5 font-mono text-[11px] uppercase ${SOURCE_STATUS_PILL_CLASS[coverage.sourceStatus]}`, children: t(SOURCE_STATUS_LABEL_KEYS[coverage.sourceStatus]) })] }), _jsxs("p", { className: "mt-1.5 text-[11px] leading-relaxed text-ink-4", children: [coverage.observedFrom !== null
62
- ? t("pages.principles.detail.receipts.coverage.observedSince", {
63
- date: formatDate(coverage.observedFrom, i18n.language),
64
- })
65
- : t("pages.principles.detail.receipts.coverage.observedSinceEmpty"), " · ", t("pages.principles.detail.receipts.coverage.asOf", { date: formatDate(coverage.asOf, i18n.language) }), " · ", t("pages.principles.detail.receipts.coverage.retention", { days: coverage.retentionPolicyDays })] }), _jsx("p", { className: "mt-1 text-[11px] leading-relaxed text-ink-4", children: t("pages.principles.detail.receipts.coverage.limitation") }), validationNoteKey !== null && (_jsxs("p", { "data-testid": "receipt-coverage-validation", className: "mt-1 text-[11px] leading-relaxed text-amber", children: [t(validationNoteKey), reasonSuffix] }))] }));
66
- }
@@ -1,14 +0,0 @@
1
- import * as React from "react";
2
- type Theme = "light" | "dark";
3
- interface ThemeProviderProps {
4
- children: React.ReactNode;
5
- defaultTheme?: Theme;
6
- storageKey?: string;
7
- }
8
- interface ThemeProviderState {
9
- theme: Theme;
10
- setTheme: (theme: Theme) => void;
11
- }
12
- export declare function ThemeProvider({ children, defaultTheme, storageKey, }: ThemeProviderProps): React.JSX.Element;
13
- export declare function useTheme(): ThemeProviderState;
14
- export {};
@@ -1,40 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import * as React from "react";
3
- const initialState = {
4
- theme: "light",
5
- setTheme: () => { },
6
- };
7
- const ThemeProviderContext = React.createContext(initialState);
8
- export function ThemeProvider({ children, defaultTheme, storageKey = "pd-theme", }) {
9
- const [theme, setThemeState] = React.useState(() => {
10
- if (typeof window !== "undefined") {
11
- const stored = localStorage.getItem(storageKey);
12
- if (stored === "light" || stored === "dark") {
13
- return stored;
14
- }
15
- if (defaultTheme) {
16
- return defaultTheme;
17
- }
18
- return window.matchMedia("(prefers-color-scheme: dark)").matches
19
- ? "dark"
20
- : "light";
21
- }
22
- return defaultTheme ?? "light";
23
- });
24
- React.useEffect(() => {
25
- const root = window.document.documentElement;
26
- root.setAttribute("data-theme", theme);
27
- localStorage.setItem(storageKey, theme);
28
- }, [theme, storageKey]);
29
- const setTheme = (newTheme) => {
30
- setThemeState(newTheme);
31
- };
32
- return (_jsx(ThemeProviderContext.Provider, { value: { theme, setTheme }, children: children }));
33
- }
34
- export function useTheme() {
35
- const context = React.useContext(ThemeProviderContext);
36
- if (context === undefined) {
37
- throw new Error("useTheme must be used within a ThemeProvider");
38
- }
39
- return context;
40
- }
@@ -1,2 +0,0 @@
1
- import * as React from "react";
2
- export declare function ThemeToggle(): React.JSX.Element;
@@ -1,11 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Sun, Moon } from "lucide-react";
3
- import { Button } from "./ui/button.js";
4
- import { useTheme } from "./theme-provider.js";
5
- export function ThemeToggle() {
6
- const { theme, setTheme } = useTheme();
7
- const toggleTheme = () => {
8
- setTheme(theme === "dark" ? "light" : "dark");
9
- };
10
- return (_jsx(Button, { variant: "ghost", size: "icon", onClick: toggleTheme, className: "transition-transform duration-300 hover:rotate-180 motion-reduce:transition-none motion-reduce:hover:rotate-0", title: theme === "dark" ? "Switch to light mode" : "Switch to dark mode", "aria-label": theme === "dark" ? "Switch to light mode" : "Switch to dark mode", children: theme === "dark" ? (_jsx(Sun, { className: "h-5 w-5" })) : (_jsx(Moon, { className: "h-5 w-5" })) }));
11
- }
@@ -1,20 +0,0 @@
1
- import * as React from "react";
2
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
- declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
4
- declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
- declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
6
- declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
- declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
- declare function AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
9
- declare namespace AlertDialogHeader {
10
- var displayName: string;
11
- }
12
- declare function AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
13
- declare namespace AlertDialogFooter {
14
- var displayName: string;
15
- }
16
- declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
17
- declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
18
- declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
19
- declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
20
- export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, };