create-principles-disciple 1.146.3 → 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 (311) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/console/dist/web/assets/app.js +26 -26
  3. package/console/package.json +1 -1
  4. package/package.json +3 -3
  5. package/pd-cli/package.json +1 -1
  6. package/release-manager/package.json +3 -3
  7. package/console/dist/ui/App.d.ts +0 -1
  8. package/console/dist/ui/App.js +0 -172
  9. package/console/dist/ui/api.d.ts +0 -611
  10. package/console/dist/ui/api.js +0 -1094
  11. package/console/dist/ui/components/auth/login-form.d.ts +0 -4
  12. package/console/dist/ui/components/auth/login-form.js +0 -142
  13. package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
  14. package/console/dist/ui/components/auth/splash-screen.js +0 -22
  15. package/console/dist/ui/components/error-boundary.d.ts +0 -15
  16. package/console/dist/ui/components/error-boundary.js +0 -30
  17. package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
  18. package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
  19. package/console/dist/ui/components/language-switcher.d.ts +0 -2
  20. package/console/dist/ui/components/language-switcher.js +0 -17
  21. package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
  22. package/console/dist/ui/components/layout/app-sidebar.js +0 -128
  23. package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
  24. package/console/dist/ui/components/layout/page-loading.js +0 -14
  25. package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
  26. package/console/dist/ui/components/layout/page-shell.js +0 -11
  27. package/console/dist/ui/components/layout/section-title.d.ts +0 -10
  28. package/console/dist/ui/components/layout/section-title.js +0 -9
  29. package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
  30. package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
  31. package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
  32. package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
  33. package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
  34. package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
  35. package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
  36. package/console/dist/ui/components/notifications/sound-storage.js +0 -37
  37. package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
  38. package/console/dist/ui/components/notifications/useNotifications.js +0 -9
  39. package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
  40. package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
  41. package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
  42. package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
  43. package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
  44. package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
  45. package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
  46. package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
  47. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
  48. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
  49. package/console/dist/ui/components/theme-provider.d.ts +0 -14
  50. package/console/dist/ui/components/theme-provider.js +0 -40
  51. package/console/dist/ui/components/theme-toggle.d.ts +0 -2
  52. package/console/dist/ui/components/theme-toggle.js +0 -11
  53. package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
  54. package/console/dist/ui/components/ui/alert-dialog.js +0 -26
  55. package/console/dist/ui/components/ui/badge.d.ts +0 -9
  56. package/console/dist/ui/components/ui/badge.js +0 -22
  57. package/console/dist/ui/components/ui/button.d.ts +0 -11
  58. package/console/dist/ui/components/ui/button.js +0 -34
  59. package/console/dist/ui/components/ui/card.d.ts +0 -8
  60. package/console/dist/ui/components/ui/card.js +0 -16
  61. package/console/dist/ui/components/ui/charts.d.ts +0 -51
  62. package/console/dist/ui/components/ui/charts.js +0 -72
  63. package/console/dist/ui/components/ui/dialog.d.ts +0 -19
  64. package/console/dist/ui/components/ui/dialog.js +0 -22
  65. package/console/dist/ui/components/ui/input.d.ts +0 -3
  66. package/console/dist/ui/components/ui/input.js +0 -8
  67. package/console/dist/ui/components/ui/markdown.d.ts +0 -24
  68. package/console/dist/ui/components/ui/markdown.js +0 -119
  69. package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
  70. package/console/dist/ui/components/ui/progress-bar.js +0 -38
  71. package/console/dist/ui/components/ui/select.d.ts +0 -13
  72. package/console/dist/ui/components/ui/select.js +0 -26
  73. package/console/dist/ui/components/ui/separator.d.ts +0 -3
  74. package/console/dist/ui/components/ui/separator.js +0 -6
  75. package/console/dist/ui/components/ui/sheet.d.ts +0 -25
  76. package/console/dist/ui/components/ui/sheet.js +0 -37
  77. package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
  78. package/console/dist/ui/components/ui/shiny-text.js +0 -46
  79. package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
  80. package/console/dist/ui/components/ui/skeleton.js +0 -6
  81. package/console/dist/ui/components/ui/sonner.d.ts +0 -3
  82. package/console/dist/ui/components/ui/sonner.js +0 -13
  83. package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
  84. package/console/dist/ui/components/ui/tooltip.js +0 -10
  85. package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
  86. package/console/dist/ui/data/daily-thoughts.js +0 -164
  87. package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
  88. package/console/dist/ui/hooks/useNotificationSound.js +0 -74
  89. package/console/dist/ui/i18n/en.json +0 -2399
  90. package/console/dist/ui/i18n/index.d.ts +0 -2
  91. package/console/dist/ui/i18n/index.js +0 -32
  92. package/console/dist/ui/i18n/zh-CN.json +0 -2399
  93. package/console/dist/ui/main.d.ts +0 -1
  94. package/console/dist/ui/main.js +0 -9
  95. package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
  96. package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
  97. package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
  98. package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
  99. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
  100. package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
  101. package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
  102. package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
  103. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
  104. package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
  105. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
  106. package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
  107. package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
  108. package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
  109. package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
  110. package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
  111. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
  112. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
  113. package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
  114. package/console/dist/ui/pages/debt/DebtPage.js +0 -222
  115. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
  116. package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
  117. package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
  118. package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
  119. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
  120. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
  121. package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
  122. package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
  123. package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
  124. package/console/dist/ui/pages/focus/FocusPage.js +0 -567
  125. package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
  126. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
  127. package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
  128. package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
  129. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
  130. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
  131. package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
  132. package/console/dist/ui/pages/focus/focus-validation.js +0 -211
  133. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
  134. package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
  135. package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
  136. package/console/dist/ui/pages/intent/IntentPage.js +0 -252
  137. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
  138. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
  139. package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
  140. package/console/dist/ui/pages/pain/PainPage.js +0 -420
  141. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
  142. package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
  143. package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
  144. package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
  145. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
  146. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
  147. package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
  148. package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
  149. package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
  150. package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
  151. package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
  152. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
  153. package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
  154. package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
  155. package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
  156. package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
  157. package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
  158. package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
  159. package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
  160. package/console/dist/ui/utils/agent-metadata.js +0 -284
  161. package/console/dist/ui/utils/approval-review.d.ts +0 -30
  162. package/console/dist/ui/utils/approval-review.js +0 -50
  163. package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
  164. package/console/dist/ui/utils/approval-warning-localization.js +0 -148
  165. package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
  166. package/console/dist/ui/utils/attention-presentation.js +0 -46
  167. package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
  168. package/console/dist/ui/utils/blocker-localization.js +0 -36
  169. package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
  170. package/console/dist/ui/utils/control-center-helpers.js +0 -189
  171. package/console/dist/ui/utils/enum-labels.d.ts +0 -50
  172. package/console/dist/ui/utils/enum-labels.js +0 -171
  173. package/console/dist/ui/utils/format-date.d.ts +0 -11
  174. package/console/dist/ui/utils/format-date.js +0 -17
  175. package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
  176. package/console/dist/ui/utils/onboarding-state.js +0 -77
  177. package/console/dist/ui/utils/reading-layout.d.ts +0 -20
  178. package/console/dist/ui/utils/reading-layout.js +0 -46
  179. package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
  180. package/console/dist/ui/utils/rule-binding-validators.js +0 -188
  181. package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
  182. package/console/dist/ui/utils/runtime-mode.js +0 -11
  183. package/console/dist/ui/utils/token-storage.d.ts +0 -22
  184. package/console/dist/ui/utils/token-storage.js +0 -47
  185. package/console/dist/ui/utils/validators.d.ts +0 -1178
  186. package/console/dist/ui/utils/validators.js +0 -3297
  187. package/release-manager/dist/bootstrap-entry.d.ts +0 -2
  188. package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
  189. package/release-manager/dist/bootstrap-entry.js.map +0 -1
  190. package/release-manager/dist/i18n.d.ts +0 -6
  191. package/release-manager/dist/i18n.d.ts.map +0 -1
  192. package/release-manager/dist/i18n.js.map +0 -1
  193. package/release-manager/dist/index.d.ts +0 -7
  194. package/release-manager/dist/index.d.ts.map +0 -1
  195. package/release-manager/dist/index.js +0 -656
  196. package/release-manager/dist/index.js.map +0 -1
  197. package/release-manager/dist/installer.d.ts +0 -629
  198. package/release-manager/dist/installer.d.ts.map +0 -1
  199. package/release-manager/dist/installer.js.map +0 -1
  200. package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
  201. package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
  202. package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
  203. package/release-manager/dist/installers/index.d.ts +0 -51
  204. package/release-manager/dist/installers/index.d.ts.map +0 -1
  205. package/release-manager/dist/installers/index.js.map +0 -1
  206. package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
  207. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
  208. package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
  209. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
  210. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
  211. package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
  212. package/release-manager/dist/mvp-config.d.ts +0 -233
  213. package/release-manager/dist/mvp-config.d.ts.map +0 -1
  214. package/release-manager/dist/mvp-config.js.map +0 -1
  215. package/release-manager/dist/prompts.d.ts +0 -43
  216. package/release-manager/dist/prompts.d.ts.map +0 -1
  217. package/release-manager/dist/prompts.js +0 -268
  218. package/release-manager/dist/prompts.js.map +0 -1
  219. package/release-manager/dist/skill-language.d.ts +0 -32
  220. package/release-manager/dist/skill-language.d.ts.map +0 -1
  221. package/release-manager/dist/skill-language.js.map +0 -1
  222. package/release-manager/dist/uninstaller.d.ts +0 -68
  223. package/release-manager/dist/uninstaller.d.ts.map +0 -1
  224. package/release-manager/dist/uninstaller.js +0 -746
  225. package/release-manager/dist/uninstaller.js.map +0 -1
  226. package/release-manager/dist/update/apply-payload.d.ts +0 -143
  227. package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
  228. package/release-manager/dist/update/apply-payload.js.map +0 -1
  229. package/release-manager/dist/update/atomic-file.d.ts +0 -35
  230. package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
  231. package/release-manager/dist/update/atomic-file.js.map +0 -1
  232. package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
  233. package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
  234. package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
  235. package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
  236. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
  237. package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
  238. package/release-manager/dist/update/channel-metadata.d.ts +0 -28
  239. package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
  240. package/release-manager/dist/update/channel-metadata.js.map +0 -1
  241. package/release-manager/dist/update/channel-promotion.d.ts +0 -39
  242. package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
  243. package/release-manager/dist/update/channel-promotion.js +0 -55
  244. package/release-manager/dist/update/channel-promotion.js.map +0 -1
  245. package/release-manager/dist/update/console-surface.d.ts +0 -19
  246. package/release-manager/dist/update/console-surface.d.ts.map +0 -1
  247. package/release-manager/dist/update/console-surface.js.map +0 -1
  248. package/release-manager/dist/update/data-compatibility.d.ts +0 -35
  249. package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
  250. package/release-manager/dist/update/data-compatibility.js +0 -45
  251. package/release-manager/dist/update/data-compatibility.js.map +0 -1
  252. package/release-manager/dist/update/install-layout.d.ts +0 -105
  253. package/release-manager/dist/update/install-layout.d.ts.map +0 -1
  254. package/release-manager/dist/update/install-layout.js.map +0 -1
  255. package/release-manager/dist/update/product-identity.d.ts +0 -70
  256. package/release-manager/dist/update/product-identity.d.ts.map +0 -1
  257. package/release-manager/dist/update/product-identity.js.map +0 -1
  258. package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
  259. package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
  260. package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
  261. package/release-manager/dist/update/release-identity.d.ts +0 -33
  262. package/release-manager/dist/update/release-identity.d.ts.map +0 -1
  263. package/release-manager/dist/update/release-identity.js.map +0 -1
  264. package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
  265. package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
  266. package/release-manager/dist/update/release-manager-authority.js.map +0 -1
  267. package/release-manager/dist/update/release-manager.d.ts +0 -156
  268. package/release-manager/dist/update/release-manager.d.ts.map +0 -1
  269. package/release-manager/dist/update/release-manager.js.map +0 -1
  270. package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
  271. package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
  272. package/release-manager/dist/update/release-metadata-publisher.js +0 -478
  273. package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
  274. package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
  275. package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
  276. package/release-manager/dist/update/release-metadata-source.js.map +0 -1
  277. package/release-manager/dist/update/release-metadata.d.ts +0 -60
  278. package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
  279. package/release-manager/dist/update/release-metadata.js.map +0 -1
  280. package/release-manager/dist/update/release-policy.d.ts +0 -51
  281. package/release-manager/dist/update/release-policy.d.ts.map +0 -1
  282. package/release-manager/dist/update/release-policy.js.map +0 -1
  283. package/release-manager/dist/update/rollback-policy.d.ts +0 -56
  284. package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
  285. package/release-manager/dist/update/rollback-policy.js +0 -61
  286. package/release-manager/dist/update/rollback-policy.js.map +0 -1
  287. package/release-manager/dist/update/transaction-journal.d.ts +0 -212
  288. package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
  289. package/release-manager/dist/update/transaction-journal.js.map +0 -1
  290. package/release-manager/dist/update/trust-metadata.d.ts +0 -55
  291. package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
  292. package/release-manager/dist/update/trust-metadata.js.map +0 -1
  293. package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
  294. package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
  295. package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
  296. package/release-manager/dist/update/update-history.d.ts +0 -46
  297. package/release-manager/dist/update/update-history.d.ts.map +0 -1
  298. package/release-manager/dist/update/update-history.js +0 -123
  299. package/release-manager/dist/update/update-history.js.map +0 -1
  300. package/release-manager/dist/utils/config-file-io.d.ts +0 -34
  301. package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
  302. package/release-manager/dist/utils/config-file-io.js.map +0 -1
  303. package/release-manager/dist/utils/env.d.ts +0 -94
  304. package/release-manager/dist/utils/env.d.ts.map +0 -1
  305. package/release-manager/dist/utils/env.js.map +0 -1
  306. package/release-manager/dist/utils/logger.d.ts +0 -15
  307. package/release-manager/dist/utils/logger.d.ts.map +0 -1
  308. package/release-manager/dist/utils/logger.js.map +0 -1
  309. package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
  310. package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
  311. package/release-manager/dist/utils/workspace-divergence.js.map +0 -1
@@ -1 +0,0 @@
1
- export declare function PrinciplesPage(): import("react").JSX.Element;
@@ -1,327 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useCallback, useRef } from "react";
3
- import { Link, useSearchParams } from "react-router-dom";
4
- import { useTranslation } from "react-i18next";
5
- import { PageShell } from "../../components/layout/page-shell.js";
6
- import { SectionTitle } from "../../components/layout/section-title.js";
7
- import { Button } from "../../components/ui/button.js";
8
- import { Skeleton } from "../../components/ui/skeleton.js";
9
- import { ShinyText } from "../../components/ui/shiny-text.js";
10
- import { fetchPrinciples, fetchApprovalsGrouped, fetchOwnerDecisionLibrary, } from "../../api.js";
11
- import { enumLabel } from "../../utils/enum-labels.js";
12
- import { splitReadingTitleBody, truncateByCodePoints } from "../../utils/reading-layout.js";
13
- import { formatDate } from "../../utils/format-date.js";
14
- import { PrinciplesViewNav } from "./PrinciplesViewNav.js";
15
- // ── Map principle status to review status ───────────────────────────────────
16
- function toReviewStatus(principleStatus, approvalStatus) {
17
- if (approvalStatus === "approved")
18
- return "approved";
19
- if (approvalStatus === "rejected")
20
- return "rejected";
21
- if (principleStatus === "active")
22
- return "approved";
23
- if (principleStatus === "archived")
24
- return "parked";
25
- if (principleStatus === "deprecated")
26
- return "rejected";
27
- // PRI-629 INV-02: candidate/probation 是生命周期(内化进行中),不是"待你
28
- // 审查"。真实 Owner 决策只在治理焦点 Owner Inbox 呈现。
29
- return "candidate";
30
- }
31
- // ── Status visual mapping ───────────────────────────────────────────────────
32
- const STATUS_BORDER = {
33
- pending: "border-l-gov",
34
- candidate: "border-l-ink-3",
35
- approved: "border-l-green",
36
- rejected: "border-l-danger",
37
- parked: "border-l-ink-3",
38
- };
39
- const STATUS_TEXT = {
40
- pending: "text-gov",
41
- candidate: "text-ink-3",
42
- approved: "text-green",
43
- rejected: "text-danger",
44
- parked: "text-ink-3",
45
- };
46
- const CHANNEL_LABELS = {
47
- prompt: "channelPrompt",
48
- defer_archive: "channelDeferArchive",
49
- code_tool_hook: "channelCodeToolHook",
50
- };
51
- // ── PRI-558: timeline node fill + status-driven copy (theme tokens, dark-mode safe) ──
52
- const STATUS_DOT_BG = {
53
- pending: "bg-gov",
54
- candidate: "bg-ink-3",
55
- approved: "bg-green",
56
- rejected: "bg-danger",
57
- parked: "bg-ink-3",
58
- };
59
- // Governance decision row mirrors the true review status — rejected/parked must
60
- // not read as "awaiting review" (labels reuse the existing status* keys).
61
- const GOV_DECISION = {
62
- approved: { glyph: "✓", labelKey: "principles.govApproved" },
63
- pending: { glyph: "⏳", labelKey: "principles.govPending" },
64
- candidate: { glyph: "○", labelKey: "principles.statusCandidate" },
65
- rejected: { glyph: "✗", labelKey: "principles.statusRejected" },
66
- parked: { glyph: "⏸", labelKey: "principles.statusParked" },
67
- };
68
- const BLOCK_IMPACT_KEY = {
69
- approved: "principles.blockImpactActive",
70
- pending: "principles.blockImpactPending",
71
- candidate: "principles.blockImpactPending",
72
- rejected: "principles.blockImpactRejected",
73
- parked: "principles.blockImpactParked",
74
- };
75
- // Summary metric tile (one of the three numbers in the metrics bar)
76
- function Metric({ num, label }) {
77
- return (_jsxs("div", { className: "flex-1 min-w-[120px] px-4 py-3 border-r border-line last:border-r-0", children: [_jsx("div", { className: "font-mono text-[22px] font-semibold text-gov leading-none", children: num }), _jsx("div", { className: "font-mono text-[11px] uppercase tracking-[0.02em] text-ink-3 mt-1.5", children: label })] }));
78
- }
79
- // Evolution block rendered under each principle card
80
- function EvolutionBlock({ label, children }) {
81
- return (_jsxs("div", { className: "mt-3 pt-3 border-t border-line/60", children: [_jsx("div", { className: "font-mono text-[11px] uppercase tracking-[0.02em] text-ink-4 mb-1", children: label }), _jsx("div", { className: "text-ink-3 text-[13px] leading-relaxed", children: children })] }));
82
- }
83
- // ── Runtime validation helpers (H section) ──────────────────────────────────
84
- function isString(v) {
85
- return typeof v === "string";
86
- }
87
- function isRecord(v) {
88
- return typeof v === "object" && v !== null && !Array.isArray(v);
89
- }
90
- function isStringArray(v) {
91
- return Array.isArray(v) && v.every(isString);
92
- }
93
- function validatePrinciplesData(data) {
94
- if (!isRecord(data))
95
- return null;
96
- if (!Object.hasOwn(data, "principles") || !Array.isArray(data.principles))
97
- return null;
98
- // Validate each principle element has required string fields
99
- for (const item of data.principles) {
100
- if (!isRecord(item))
101
- return null;
102
- if (!Object.hasOwn(item, "id") || !isString(item.id))
103
- return null;
104
- if (!Object.hasOwn(item, "text") || !isString(item.text))
105
- return null;
106
- if (!Object.hasOwn(item, "status") || !isString(item.status))
107
- return null;
108
- if (!Object.hasOwn(item, "updatedAt") || !isString(item.updatedAt))
109
- return null;
110
- if (!Object.hasOwn(item, "createdAt") || !isString(item.createdAt))
111
- return null;
112
- }
113
- return data;
114
- }
115
- function validateApprovalsGrouped(data) {
116
- if (!isRecord(data))
117
- return null;
118
- if (!Object.hasOwn(data, "groups") || !Array.isArray(data.groups))
119
- return null;
120
- // Validate each group element
121
- for (const g of data.groups) {
122
- if (!isRecord(g))
123
- return null;
124
- if (!Object.hasOwn(g, "principleId") || !isString(g.principleId))
125
- return null;
126
- if (!Object.hasOwn(g, "status") || !isString(g.status))
127
- return null;
128
- if (!Object.hasOwn(g, "records") || !Array.isArray(g.records))
129
- return null;
130
- for (const r of g.records) {
131
- if (!isRecord(r))
132
- return null;
133
- if (!Object.hasOwn(r, "id") || !isString(r.id))
134
- return null;
135
- if (!Object.hasOwn(r, "channel") || !isString(r.channel))
136
- return null;
137
- }
138
- }
139
- return data;
140
- }
141
- // ── Component ───────────────────────────────────────────────────────────────
142
- export function PrinciplesPage() {
143
- const { t, i18n } = useTranslation("pages");
144
- const [principles, setPrinciples] = useState([]);
145
- const [approvalGroups, setApprovalGroups] = useState([]);
146
- const [loading, setLoading] = useState(true);
147
- const [error, setError] = useState(null);
148
- // PRI-558: summary powers the metrics bar (already returned by /api/principles)
149
- const [summary, setSummary] = useState(null);
150
- // Search / filter / sort
151
- const [searchParams, setSearchParams] = useSearchParams();
152
- const updateQuery = (key, value) => { const next = new URLSearchParams(searchParams); next.set(key, value); setSearchParams(next, { replace: true, preventScrollReset: true }); };
153
- const search = searchParams.get('q') ?? '';
154
- const setSearch = (value) => updateQuery('q', value);
155
- const statusParam = searchParams.get('status');
156
- const statusFilter = statusParam === 'pending' || statusParam === 'candidate' || statusParam === 'approved' || statusParam === 'rejected' || statusParam === 'parked' ? statusParam : 'all';
157
- const setStatusFilter = (value) => updateQuery('status', value);
158
- const sortBy = searchParams.get('sort') === 'createdAt' ? 'createdAt' : 'updatedAt';
159
- const setSortBy = (value) => updateQuery('sort', value);
160
- // PRI-629 (INV-02): 默认展示全部 — candidate 是生命周期而非待办,
161
- // "只看待决策"不再作为默认视图 (真实决策在治理焦点)。
162
- const filterMode = searchParams.get('mode') === 'actionable' ? 'actionable' : 'all';
163
- const setFilterMode = (value) => updateQuery('mode', value);
164
- const [categories, setCategories] = useState();
165
- // Owner Decision Experience v1: backend semantic titles + decision states
166
- // (display-only — the page never re-derives decision qualification).
167
- const [ownerDecisionLibrary, setOwnerDecisionLibrary] = useState(null);
168
- // PRI-956 (F15, D3): runtime status cannot be confirmed when set
169
- const [revocationUnavailable, setRevocationUnavailable] = useState(null);
170
- const requestEpoch = useRef(0);
171
- // Fetch data
172
- const loadData = useCallback(async () => {
173
- const epoch = ++requestEpoch.current;
174
- setLoading(true);
175
- setError(null);
176
- try {
177
- const [pResult, aResult, dResult] = await Promise.all([
178
- fetchPrinciples(filterMode),
179
- fetchApprovalsGrouped(),
180
- fetchOwnerDecisionLibrary(),
181
- ]);
182
- if (epoch !== requestEpoch.current)
183
- return;
184
- setOwnerDecisionLibrary(dResult.success && dResult.data ? dResult.data : null);
185
- if (!pResult.success) {
186
- setError(pResult.error ?? "Failed to load principles");
187
- return;
188
- }
189
- const pData = validatePrinciplesData(pResult.data);
190
- if (!pData) {
191
- setError("Invalid principles data received");
192
- return;
193
- }
194
- setPrinciples(pData.principles);
195
- // PRI-330: Store categories for UI display
196
- setCategories(pData.categories);
197
- // PRI-558: expose summary for the metrics bar
198
- setSummary(pData.summary);
199
- // PRI-956 (F15, D3): propagate revocation check unavailability
200
- setRevocationUnavailable(pData.revocationCheckUnavailable ?? null);
201
- const aData = aResult.success ? validateApprovalsGrouped(aResult.data) : null;
202
- setApprovalGroups(aData?.groups ?? []);
203
- }
204
- catch (err) {
205
- if (epoch !== requestEpoch.current)
206
- return;
207
- setError(err instanceof Error ? err.message : "Unknown error");
208
- }
209
- finally {
210
- if (epoch === requestEpoch.current)
211
- setLoading(false);
212
- }
213
- }, [filterMode]);
214
- useEffect(() => {
215
- void loadData();
216
- return () => { requestEpoch.current++; };
217
- }, [loadData]);
218
- // Build approval lookup
219
- const approvalByPrinciple = new Map();
220
- for (const g of approvalGroups) {
221
- approvalByPrinciple.set(g.principleId, g);
222
- }
223
- // Merge principle + approval data into cards
224
- const cards = principles.map((p) => {
225
- const ag = approvalByPrinciple.get(p.id);
226
- const channels = ag
227
- ? ag.records.map((r) => r.channel).filter(isString)
228
- : ["prompt"];
229
- const uniqueChannels = [...new Set(channels)];
230
- // Owner Decision Experience v1 (SPEC §10/§11.2): the card title comes
231
- // from the backend Semantic Selector; when no readable principle exists
232
- // the card shows a NEUTRAL placeholder — the technical trigger/original
233
- // text stays reachable in the collapsed details below (never the title).
234
- const decision = ownerDecisionLibrary?.entries[p.id];
235
- const semanticTitle = decision?.learnedPrinciple.status === 'known' ? decision.learnedPrinciple.text : undefined;
236
- // PRI-332: Determine display title with bounded fallback for unreadable titles
237
- const rawTitle = p.triggerPattern || truncateByCodePoints(p.text, 80);
238
- const detectedLang = p.detectedLanguage ?? 'unknown';
239
- const readWarningCode = p.readabilityWarningCode;
240
- let displayTitle = rawTitle;
241
- let usedFallback = false;
242
- if (semanticTitle !== undefined) {
243
- displayTitle = semanticTitle;
244
- usedFallback = rawTitle !== semanticTitle;
245
- }
246
- else if (readWarningCode || decision !== undefined) {
247
- // No qualified semantic text: neutral placeholder instead of a
248
- // technical trigger as the Owner-facing title.
249
- displayTitle = t("principles.readabilityFallbackTitle");
250
- usedFallback = true;
251
- }
252
- return {
253
- principleId: p.id,
254
- title: splitReadingTitleBody(displayTitle).title,
255
- searchText: semanticTitle ?? rawTitle,
256
- originalTitle: rawTitle,
257
- titleUsedFallback: usedFallback,
258
- text: p.text,
259
- action: p.action,
260
- status: toReviewStatus(p.status, ag?.status),
261
- channels: uniqueChannels,
262
- evaluability: p.evaluability,
263
- decisionState: decision?.decisionState,
264
- runtimeDeactivated: p.runtimeDeactivated === true,
265
- updatedAt: p.updatedAt,
266
- createdAt: p.createdAt,
267
- priority: p.priority,
268
- detectedLanguage: detectedLang,
269
- readabilityWarningCode: readWarningCode,
270
- };
271
- });
272
- // Filter + sort
273
- const filtered = cards
274
- .filter((c) => {
275
- if (statusFilter !== "all" && c.status !== statusFilter)
276
- return false;
277
- if (search) {
278
- const q = search.toLowerCase();
279
- if (!c.text.toLowerCase().includes(q) && !c.title.toLowerCase().includes(q) && !c.searchText.toLowerCase().includes(q))
280
- return false;
281
- }
282
- return true;
283
- })
284
- .sort((a, b) => {
285
- const key = sortBy === "updatedAt" ? "updatedAt" : "createdAt";
286
- return new Date(b[key]).getTime() - new Date(a[key]).getTime();
287
- });
288
- const statusFilters = [
289
- { value: "all", label: t("principles.allStatuses") },
290
- { value: "pending", label: t("principles.statusPending") },
291
- { value: "approved", label: t("principles.statusApproved") },
292
- { value: "rejected", label: t("principles.statusRejected") },
293
- { value: "parked", label: t("principles.statusParked") },
294
- ];
295
- // PRI-558: most recent update across loaded principles (drives "Last Updated" metric)
296
- const latestUpdatedAt = principles.reduce((max, p) => (new Date(p.updatedAt).getTime() > new Date(max).getTime() ? p.updatedAt : max), principles[0]?.updatedAt ?? "");
297
- return (_jsxs(PageShell, { children: [revocationUnavailable && (_jsx("div", { className: "mb-4 p-3 bg-amber-50 border border-amber-300 rounded-[var(--radius-md)] text-sm text-amber-800", children: t("principles.revocationStatusUnknown") })), _jsx(SectionTitle, { children: t("principles.reviewTitle") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: !(filterMode === 'actionable' && (categories?.owner_actionable ?? 0) > 0), children: t("principles.reviewSubtitle") }), _jsx("p", { className: "text-ink-3 text-[14px] leading-relaxed mb-6", children: t("principles.reviewDescription") }), _jsx(PrinciplesViewNav, { view: "workspace" }), _jsxs("div", { className: "flex flex-wrap items-center gap-3 mb-6", children: [_jsxs("div", { className: "flex gap-1", role: "group", "aria-label": "Filter mode", children: [_jsxs("button", { onClick: () => setFilterMode('actionable'), className: "font-mono text-[11px] uppercase tracking-[0.02em] border rounded-[2px] px-2 py-1 transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov " +
298
- (filterMode === 'actionable'
299
- ? "bg-gov text-paper border-gov"
300
- : "bg-surface text-ink-3 border-line hover:border-line-2"), children: [t("principles.filterActionable", { defaultValue: "Actionable" }), categories?.owner_actionable ? ` (${categories.owner_actionable})` : ''] }), _jsxs("button", { onClick: () => setFilterMode('all'), className: "font-mono text-[11px] uppercase tracking-[0.02em] border rounded-[2px] px-2 py-1 transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov " +
301
- (filterMode === 'all'
302
- ? "bg-gov text-paper border-gov"
303
- : "bg-surface text-ink-3 border-line hover:border-line-2"), children: [t("principles.filterAll", { defaultValue: "Show All" }), categories ? ` (${Object.values(categories).reduce((a, b) => a + b, 0)})` : ''] })] }), _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: t("principles.searchPlaceholder"), className: "flex-1 min-w-[200px] border border-line rounded-[var(--radius-md)] bg-surface text-ink px-3 py-2 text-[13px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov", "aria-label": t("principles.searchPlaceholder") }), _jsx("div", { className: "flex gap-1", role: "group", "aria-label": "Status filter", children: statusFilters.map((sf) => (_jsx("button", { onClick: () => setStatusFilter(sf.value), className: "font-mono text-[11px] uppercase tracking-[0.02em] border rounded-[2px] px-2 py-1 transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov " +
304
- (statusFilter === sf.value
305
- ? "bg-gov text-paper border-gov"
306
- : "bg-surface text-ink-3 border-line hover:border-line-2"), children: sf.label }, sf.value))) }), _jsxs("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "border border-line rounded-[var(--radius-md)] bg-surface text-ink-3 px-2 py-1 text-[12px] font-mono focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov", "aria-label": "Sort order", children: [_jsx("option", { value: "updatedAt", children: t("principles.sortByUpdated") }), _jsx("option", { value: "createdAt", children: t("principles.sortByCreated") })] })] }), !loading && !error && summary && (_jsxs("details", { className: "mb-6 text-[12px] text-ink-3", "data-testid": "principle-library-overview", children: [_jsx("summary", { className: "cursor-pointer text-gov", children: t('principles.libraryOverview') }), _jsxs("div", { className: "mt-3 flex flex-wrap border border-line rounded-[var(--radius-md)] bg-panel overflow-hidden", children: [_jsx(Metric, { num: String(summary.total), label: t("principles.metricDeposited") }), _jsx(Metric, { num: String(summary.active), label: t("principles.metricActive") }), _jsx(Metric, { num: latestUpdatedAt ? formatDate(latestUpdatedAt, i18n.language) : "—", label: t("principles.metricLatest") })] })] })), loading && (_jsx("div", { className: "grid gap-3 animate-[pdFadeIn_200ms_ease-out]", role: "status", "aria-live": "polite", "aria-label": t("principles.loading", { defaultValue: "Loading…" }), children: Array.from({ length: 4 }).map((_, i) => (_jsxs("div", { className: "bg-panel border border-line rounded-[var(--radius-md)] p-4 border-l-[3px] border-l-transparent", children: [_jsxs("div", { className: "flex items-start justify-between gap-3 mb-3", children: [_jsx(Skeleton, { className: "h-5 w-[55%] rounded-sm" }), _jsx(Skeleton, { className: "h-5 w-16 rounded-[2px]" })] }), _jsx(Skeleton, { className: "h-4 w-full rounded-sm mb-2" }), _jsx(Skeleton, { className: "h-4 w-[80%] rounded-sm mb-4" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Skeleton, { className: "h-3.5 w-20 rounded-sm" }), _jsx(Skeleton, { className: "h-3.5 w-24 rounded-sm" })] })] }, i))) })), error && (_jsxs("div", { className: "border border-danger/30 rounded-[var(--radius-md)] p-4 mb-4", children: [_jsx("p", { className: "text-danger text-sm", children: error }), _jsx(Button, { variant: "outline", size: "sm", onClick: loadData, className: "mt-2", children: t("principles.retry", { defaultValue: "Retry" }) })] })), !loading && !error && filtered.length === 0 && principles.length === 0 && (_jsxs("div", { className: "text-center py-12", children: [_jsx("h2", { className: "text-ink-2 text-lg font-semibold mb-2", children: t("principles.emptyTitle") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[480px] mx-auto leading-relaxed", children: filterMode === 'actionable'
307
- ? t("principles.emptyActionable", { defaultValue: "No owner-actionable principles at this time. When PD captures behavior deviation signals, principle candidates will appear here for your review." })
308
- : t("principles.emptyDescription") }), categories && filterMode === 'actionable' && (_jsx("div", { className: "flex justify-center gap-2 flex-wrap mt-4", children: Object.entries(categories).map(([cat, count]) => (_jsxs("span", { className: "font-mono text-[11px] uppercase tracking-[0.02em] border border-line rounded-[2px] px-2 py-0.5 text-ink-4", children: [cat, ": ", count] }, cat))) }))] })), !loading && !error && filtered.length === 0 && principles.length > 0 && (_jsx("p", { className: "text-ink-3 text-sm", children: t("principles.noResults") })), !loading && !error && filtered.length > 0 && (_jsxs("div", { className: "relative pl-6 grid gap-3 animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("span", { className: "absolute left-[12.5px] top-3 bottom-3 w-px bg-line", "aria-hidden": "true" }), filtered.map((card) => {
309
- const ag = approvalByPrinciple.get(card.principleId);
310
- const decision = GOV_DECISION[card.status];
311
- const decisionRecord = ag?.records?.find((r) => r.status === ag.status) ?? ag?.records?.[0];
312
- const decisionDate = decisionRecord?.createdAt;
313
- return (_jsxs("article", { className: "relative bg-panel border border-line rounded-[var(--radius-md)] p-5 " +
314
- "border-l-[3px] " +
315
- STATUS_BORDER[card.status] + " " +
316
- "transition-[border-color,background,transform] duration-150 " +
317
- "hover:border-line-2 " +
318
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov", children: [_jsx("span", { className: "absolute -left-[19px] top-4 h-2.5 w-2.5 rounded-full border-2 border-paper " +
319
- STATUS_DOT_BG[card.status], "aria-hidden": "true" }), _jsxs("div", { className: "mb-2 flex flex-wrap items-start justify-between gap-3", children: [_jsx("h3", { className: "min-w-0 flex-1 text-[15px] font-semibold leading-relaxed text-ink", children: _jsx(Link, { className: "rounded-sm hover:text-gov focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov", to: `/principles/${card.principleId}`, state: { returnTo: `/principles?${searchParams}` }, children: card.title }) }), _jsx("span", { className: `rounded-[2px] border px-2 py-1 text-[11px] ${STATUS_TEXT[card.status]}`, children: card.decisionState !== undefined ? t(`principles.ownerDecision.state.${card.decisionState}`, { defaultValue: card.decisionState }) : t(decision.labelKey) })] }), card.readabilityWarningCode && (_jsx("div", { className: "mb-2 px-3 py-1.5 bg-amber/5 border border-amber/20 rounded-[3px] text-ink-3 text-[12px] leading-snug", children: t("principles.readabilityWarning." + card.readabilityWarningCode, { defaultValue: t("principles.readabilityFallbackTitle") }) })), card.text.trim() !== card.title.trim() && _jsx("p", { className: "text-ink-3 text-[13px] line-clamp-2 leading-relaxed", children: card.text }), card.runtimeDeactivated === true && _jsx("p", { className: "mt-3 text-[12px] text-amber", role: "status", children: t('principles.runtimeDeactivated') }), _jsxs("details", { className: "mt-4 border-t border-line/60 pt-3", "data-testid": "principle-context-disclosure", children: [_jsx("summary", { className: "cursor-pointer text-[12px] text-gov", children: t('principles.contextDisclosure') }), _jsxs("div", { className: "mt-4 space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2 mb-2 flex-wrap", children: [_jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.02em] border rounded-[2px] px-2 py-0.5 " +
320
- STATUS_TEXT[card.status] +
321
- " border-current/20", children: t("principles.status" + card.status.charAt(0).toUpperCase() + card.status.slice(1)) }), card.channels.map((ch) => (_jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.02em] border border-line rounded-[2px] px-2 py-0.5 text-ink-3", children: enumLabel('channel', ch, t) }, ch))), card.detectedLanguage && card.detectedLanguage !== 'unknown' && (_jsx("span", { className: "font-mono text-[11px] tracking-[0.02em] border border-line rounded-[2px] px-2 py-0.5 text-ink-4", children: card.detectedLanguage === 'zh'
322
- ? t("principles.languageHintZh")
323
- : t("principles.languageHintEn") })), _jsxs("span", { className: "font-mono text-[11px] text-ink-4", children: [t("principles.evaluabilityLabel", { defaultValue: "可评价性" }), ": ", enumLabel('evaluability', card.evaluability, t)] }), card.decisionState !== undefined && (_jsx("span", { className: "font-mono text-[11px] tracking-[0.02em] border border-line rounded-[2px] px-2 py-0.5 text-ink-4", children: t(`principles.ownerDecision.state.${card.decisionState}`, { defaultValue: card.decisionState }) }))] }), card.detectedLanguage && card.detectedLanguage !== 'unknown' && i18n.language && !i18n.language.startsWith(card.detectedLanguage) && (_jsx("div", { className: "mb-2 px-3 py-1.5 bg-surface/60 border-l-2 border-line rounded-[3px] text-ink-4 text-[12px] leading-snug", children: t("principles.languageMismatchHint", { lang: card.detectedLanguage === 'en' ? 'English' : '中文' }) })), card.titleUsedFallback && card.originalTitle && (_jsxs("details", { className: "mb-1", children: [_jsx("summary", { className: "text-ink-4 text-[11px] font-mono cursor-pointer hover:underline", children: t("principles.readabilityOriginalLabel") }), _jsx("div", { className: "text-ink-4 text-[12px] leading-snug mt-1 font-mono bg-surface/40 px-2 py-1 rounded-[3px] break-all", children: card.originalTitle })] })), _jsxs("p", { className: "font-mono text-[11px] text-ink-4 mt-2", children: [t("principles.updatedAt"), ": ", formatDate(card.updatedAt, i18n.language)] }), _jsx(EvolutionBlock, { label: t("principles.blockBasis"), children: t("principles.blockBasisFallback") }), _jsx(EvolutionBlock, { label: t("principles.blockImpact"), children: card.decisionState !== undefined
324
- ? t("principles.blockImpactSeeDecisionView", { defaultValue: "以详情页「当前实际执行」为准(本卡片不据此判断影响)。" })
325
- : t(BLOCK_IMPACT_KEY[card.status]) }), _jsx(EvolutionBlock, { label: t("principles.blockBehavior"), children: card.action ? card.action : t("principles.blockBehaviorFallback") }), decisionDate && _jsxs("p", { className: "text-[11px] text-ink-4", children: [t('principles.govDecision'), ": ", formatDate(decisionDate, i18n.language)] })] })] }), _jsx(Link, { className: "mt-3 inline-block text-[12px] text-gov underline underline-offset-4", to: `/principles/${card.principleId}`, state: { returnTo: `/principles?${searchParams}` }, children: t('principles.openDetails') })] }, card.principleId));
326
- })] }))] }));
327
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * PRI-641: internal navigation inside the Principles section — Workspace
3
- * Principles vs the read-only PD Core Principles reference surface. The
4
- * sidebar keeps a single "Principles" entry; this is the only extra nav.
5
- */
6
- export declare function PrinciplesViewNav({ view }: {
7
- view: "workspace" | "core";
8
- }): import("react").JSX.Element;
@@ -1,15 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Link } from "react-router-dom";
3
- import { useTranslation } from "react-i18next";
4
- /**
5
- * PRI-641: internal navigation inside the Principles section — Workspace
6
- * Principles vs the read-only PD Core Principles reference surface. The
7
- * sidebar keeps a single "Principles" entry; this is the only extra nav.
8
- */
9
- export function PrinciplesViewNav({ view }) {
10
- const { t } = useTranslation("pages");
11
- const base = "font-mono text-[11px] uppercase tracking-[0.02em] border rounded-[2px] px-2 py-1 transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gov ";
12
- const active = "bg-gov text-paper border-gov";
13
- const inactive = "bg-surface text-ink-3 border-line hover:border-line-2";
14
- return (_jsxs("div", { className: "flex gap-1 mb-6", role: "group", "aria-label": t("principles.viewNavLabel"), children: [_jsx(Link, { to: "/principles", className: base + (view === "workspace" ? active : inactive), "aria-current": view === "workspace" ? "page" : undefined, children: t("principles.tabWorkspace") }), _jsx(Link, { to: "/principles/core", className: base + (view === "core" ? active : inactive), "aria-current": view === "core" ? "page" : undefined, children: t("principles.tabCore") })] }));
15
- }
@@ -1 +0,0 @@
1
- export declare function ReportProblemPage(): import("react").JSX.Element;