@nocobase/app-plugin-projects 0.1.0-beta.7 → 0.1.0-beta.9

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 (491) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +60 -104
  3. package/dist/client/api/changed-issues.d.ts +12 -0
  4. package/dist/client/api/changed-issues.d.ts.map +1 -0
  5. package/dist/client/api/changed-issues.js +30 -0
  6. package/dist/client/api/changed-issues.js.map +1 -0
  7. package/dist/client/api/client.d.ts +4 -23
  8. package/dist/client/api/client.d.ts.map +1 -1
  9. package/dist/client/api/client.js +4 -48
  10. package/dist/client/api/client.js.map +1 -1
  11. package/dist/client/api/keys.d.ts +2 -8
  12. package/dist/client/api/keys.d.ts.map +1 -1
  13. package/dist/client/api/keys.js +2 -17
  14. package/dist/client/api/keys.js.map +1 -1
  15. package/dist/client/components/pm-badges.d.ts +1 -1
  16. package/dist/client/components/pm-badges.d.ts.map +1 -1
  17. package/dist/client/components/pm-executor-select.d.ts +2 -0
  18. package/dist/client/components/pm-executor-select.d.ts.map +1 -1
  19. package/dist/client/components/pm-executor-select.js.map +1 -1
  20. package/dist/client/components/ui/radio-group.d.ts +7 -0
  21. package/dist/client/components/ui/radio-group.d.ts.map +1 -0
  22. package/dist/client/components/ui/radio-group.js +12 -0
  23. package/dist/client/components/ui/radio-group.js.map +1 -0
  24. package/dist/client/config.d.ts +0 -2
  25. package/dist/client/config.d.ts.map +1 -1
  26. package/dist/client/config.js +1 -5
  27. package/dist/client/config.js.map +1 -1
  28. package/dist/client/issues.d.ts +2 -4
  29. package/dist/client/issues.d.ts.map +1 -1
  30. package/dist/client/issues.js +2 -3
  31. package/dist/client/issues.js.map +1 -1
  32. package/dist/client/kit/plans/lookup.d.ts +2 -2
  33. package/dist/client/kit/plans/lookup.js +3 -3
  34. package/dist/client/kit/plans/lookup.js.map +1 -1
  35. package/dist/client/kit/plans/plan-row.js +2 -2
  36. package/dist/client/kit/plans/plan-row.js.map +1 -1
  37. package/dist/client/kit.d.ts +3 -9
  38. package/dist/client/kit.d.ts.map +1 -1
  39. package/dist/client/kit.js +3 -9
  40. package/dist/client/kit.js.map +1 -1
  41. package/dist/client/lib/kinds.d.ts +3 -29
  42. package/dist/client/lib/kinds.d.ts.map +1 -1
  43. package/dist/client/lib/kinds.js +7 -46
  44. package/dist/client/lib/kinds.js.map +1 -1
  45. package/dist/client/lib/status-events.d.ts +21 -0
  46. package/dist/client/lib/status-events.d.ts.map +1 -0
  47. package/dist/client/lib/status-events.js +31 -0
  48. package/dist/client/lib/status-events.js.map +1 -0
  49. package/dist/client/lib/status.d.ts +5 -7
  50. package/dist/client/lib/status.d.ts.map +1 -1
  51. package/dist/client/lib/status.js +5 -7
  52. package/dist/client/lib/status.js.map +1 -1
  53. package/dist/client/locales/en-US.d.ts +6 -256
  54. package/dist/client/locales/en-US.d.ts.map +1 -1
  55. package/dist/client/locales/en-US.js +9 -255
  56. package/dist/client/locales/en-US.js.map +1 -1
  57. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  58. package/dist/client/locales/zh-CN.js +10 -248
  59. package/dist/client/locales/zh-CN.js.map +1 -1
  60. package/dist/client/pages/issues/board/board-model.d.ts +1 -1
  61. package/dist/client/pages/issues/board/board-model.js +1 -1
  62. package/dist/client/pages/issues/board/use-board-move.d.ts +2 -8
  63. package/dist/client/pages/issues/board/use-board-move.d.ts.map +1 -1
  64. package/dist/client/pages/issues/board/use-board-move.js +5 -42
  65. package/dist/client/pages/issues/board/use-board-move.js.map +1 -1
  66. package/dist/client/pages/issues/detail/new-subtask.d.ts.map +1 -1
  67. package/dist/client/pages/issues/detail/new-subtask.js +6 -28
  68. package/dist/client/pages/issues/detail/new-subtask.js.map +1 -1
  69. package/dist/client/pages/issues/detail/subtask-model.d.ts +1 -1
  70. package/dist/client/pages/issues/detail/subtask-model.js +1 -1
  71. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts +6 -8
  72. package/dist/client/pages/issues/detail/use-confirmed-update.d.ts.map +1 -1
  73. package/dist/client/pages/issues/detail/use-confirmed-update.js +9 -42
  74. package/dist/client/pages/issues/detail/use-confirmed-update.js.map +1 -1
  75. package/dist/client/pages/issues/detail/use-issue-page.d.ts +0 -4
  76. package/dist/client/pages/issues/detail/use-issue-page.d.ts.map +1 -1
  77. package/dist/client/pages/issues/detail/use-issue-page.js +0 -14
  78. package/dist/client/pages/issues/detail/use-issue-page.js.map +1 -1
  79. package/dist/client/pages/issues/detail/use-issue-update.d.ts +2 -2
  80. package/dist/client/pages/issues/detail/use-issue-update.d.ts.map +1 -1
  81. package/dist/client/pages/issues/detail/use-issue-update.js +4 -6
  82. package/dist/client/pages/issues/detail/use-issue-update.js.map +1 -1
  83. package/dist/client/pages/issues/new-issue-form.d.ts +11 -8
  84. package/dist/client/pages/issues/new-issue-form.d.ts.map +1 -1
  85. package/dist/client/pages/issues/new-issue-form.js +47 -79
  86. package/dist/client/pages/issues/new-issue-form.js.map +1 -1
  87. package/dist/client/pages/issues/new.d.ts.map +1 -1
  88. package/dist/client/pages/issues/new.js +2 -1
  89. package/dist/client/pages/issues/new.js.map +1 -1
  90. package/dist/client/pages/issues/use-executor-options.d.ts +3 -2
  91. package/dist/client/pages/issues/use-executor-options.d.ts.map +1 -1
  92. package/dist/client/pages/issues/use-executor-options.js +5 -23
  93. package/dist/client/pages/issues/use-executor-options.js.map +1 -1
  94. package/dist/client/pages/projects/detail/use-project-page.d.ts +4 -26
  95. package/dist/client/pages/projects/detail/use-project-page.d.ts.map +1 -1
  96. package/dist/client/pages/projects/detail/use-project-page.js +7 -53
  97. package/dist/client/pages/projects/detail/use-project-page.js.map +1 -1
  98. package/dist/client/pages/projects/new.d.ts +1 -1
  99. package/dist/client/pages/projects/new.d.ts.map +1 -1
  100. package/dist/client/pages/projects/new.js +3 -7
  101. package/dist/client/pages/projects/new.js.map +1 -1
  102. package/dist/client/plugin.d.ts +3 -0
  103. package/dist/client/plugin.d.ts.map +1 -1
  104. package/dist/client/plugin.js +8 -1
  105. package/dist/client/plugin.js.map +1 -1
  106. package/dist/client/projects.d.ts +2 -2
  107. package/dist/client/projects.d.ts.map +1 -1
  108. package/dist/client/projects.js +2 -2
  109. package/dist/client/projects.js.map +1 -1
  110. package/dist/client/providers/query-provider.d.ts.map +1 -1
  111. package/dist/client/providers/query-provider.js +13 -10
  112. package/dist/client/providers/query-provider.js.map +1 -1
  113. package/dist/database/migrations/.manifest.json +8 -0
  114. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts +4 -0
  115. package/dist/database/migrations/202610240010_pm_fixed_statuses.d.ts.map +1 -0
  116. package/dist/database/migrations/202610240010_pm_fixed_statuses.js +189 -0
  117. package/dist/database/migrations/202610240010_pm_fixed_statuses.js.map +1 -0
  118. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts +4 -0
  119. package/dist/database/migrations/202610240011_pm_issue_progress.d.ts.map +1 -0
  120. package/dist/database/migrations/202610240011_pm_issue_progress.js +19 -0
  121. package/dist/database/migrations/202610240011_pm_issue_progress.js.map +1 -0
  122. package/dist/server/composition.d.ts +11 -17
  123. package/dist/server/composition.d.ts.map +1 -1
  124. package/dist/server/composition.js +11 -56
  125. package/dist/server/composition.js.map +1 -1
  126. package/dist/server/domains/comments/comment.queries.d.ts +31 -0
  127. package/dist/server/domains/comments/comment.queries.d.ts.map +1 -1
  128. package/dist/server/domains/comments/comment.queries.js +27 -1
  129. package/dist/server/domains/comments/comment.queries.js.map +1 -1
  130. package/dist/server/domains/comments/comment.store.d.ts +19 -0
  131. package/dist/server/domains/comments/comment.store.d.ts.map +1 -1
  132. package/dist/server/domains/comments/comment.store.js +55 -0
  133. package/dist/server/domains/comments/comment.store.js.map +1 -1
  134. package/dist/server/domains/comments/index.d.ts +1 -1
  135. package/dist/server/domains/comments/index.d.ts.map +1 -1
  136. package/dist/server/domains/comments/index.js.map +1 -1
  137. package/dist/server/domains/issues/index.d.ts +1 -1
  138. package/dist/server/domains/issues/index.d.ts.map +1 -1
  139. package/dist/server/domains/issues/index.js +1 -1
  140. package/dist/server/domains/issues/index.js.map +1 -1
  141. package/dist/server/domains/issues/issue.context.d.ts +6 -22
  142. package/dist/server/domains/issues/issue.context.d.ts.map +1 -1
  143. package/dist/server/domains/issues/issue.context.js +1 -22
  144. package/dist/server/domains/issues/issue.context.js.map +1 -1
  145. package/dist/server/domains/issues/issue.fields.d.ts +5 -3
  146. package/dist/server/domains/issues/issue.fields.d.ts.map +1 -1
  147. package/dist/server/domains/issues/issue.fields.js +37 -16
  148. package/dist/server/domains/issues/issue.fields.js.map +1 -1
  149. package/dist/server/domains/issues/issue.projects.d.ts +2 -2
  150. package/dist/server/domains/issues/issue.projects.d.ts.map +1 -1
  151. package/dist/server/domains/issues/issue.projects.js +1 -2
  152. package/dist/server/domains/issues/issue.projects.js.map +1 -1
  153. package/dist/server/domains/issues/issue.queries.d.ts +10 -7
  154. package/dist/server/domains/issues/issue.queries.d.ts.map +1 -1
  155. package/dist/server/domains/issues/issue.queries.js +15 -41
  156. package/dist/server/domains/issues/issue.queries.js.map +1 -1
  157. package/dist/server/domains/issues/issue.routes.d.ts +1 -1
  158. package/dist/server/domains/issues/issue.routes.d.ts.map +1 -1
  159. package/dist/server/domains/issues/issue.routes.js +20 -38
  160. package/dist/server/domains/issues/issue.routes.js.map +1 -1
  161. package/dist/server/domains/issues/issue.service.d.ts +20 -44
  162. package/dist/server/domains/issues/issue.service.d.ts.map +1 -1
  163. package/dist/server/domains/issues/issue.service.js +26 -81
  164. package/dist/server/domains/issues/issue.service.js.map +1 -1
  165. package/dist/server/domains/issues/issue.status.d.ts +6 -10
  166. package/dist/server/domains/issues/issue.status.d.ts.map +1 -1
  167. package/dist/server/domains/issues/issue.status.js +3 -20
  168. package/dist/server/domains/issues/issue.status.js.map +1 -1
  169. package/dist/server/domains/issues/issue.store.d.ts +2 -0
  170. package/dist/server/domains/issues/issue.store.d.ts.map +1 -1
  171. package/dist/server/domains/issues/issue.store.js +2 -0
  172. package/dist/server/domains/issues/issue.store.js.map +1 -1
  173. package/dist/server/domains/issues/ports.d.ts +19 -36
  174. package/dist/server/domains/issues/ports.d.ts.map +1 -1
  175. package/dist/server/domains/issues/ports.js +0 -5
  176. package/dist/server/domains/issues/ports.js.map +1 -1
  177. package/dist/server/domains/notices/notice.planner.d.ts +2 -1
  178. package/dist/server/domains/notices/notice.planner.d.ts.map +1 -1
  179. package/dist/server/domains/notices/notice.planner.js +2 -1
  180. package/dist/server/domains/notices/notice.planner.js.map +1 -1
  181. package/dist/server/domains/notices/notice.rules.d.ts +1 -4
  182. package/dist/server/domains/notices/notice.rules.d.ts.map +1 -1
  183. package/dist/server/domains/notices/notice.rules.js +4 -5
  184. package/dist/server/domains/notices/notice.rules.js.map +1 -1
  185. package/dist/server/domains/plans/plan.ops.d.ts +3 -3
  186. package/dist/server/domains/plans/plan.ops.d.ts.map +1 -1
  187. package/dist/server/domains/plans/plan.ops.js +23 -13
  188. package/dist/server/domains/plans/plan.ops.js.map +1 -1
  189. package/dist/server/domains/projects/index.d.ts +1 -1
  190. package/dist/server/domains/projects/index.d.ts.map +1 -1
  191. package/dist/server/domains/projects/index.js.map +1 -1
  192. package/dist/server/domains/projects/project.events.d.ts +10 -0
  193. package/dist/server/domains/projects/project.events.d.ts.map +1 -0
  194. package/dist/server/domains/projects/project.events.js +2 -0
  195. package/dist/server/domains/projects/project.events.js.map +1 -0
  196. package/dist/server/domains/projects/project.routes.d.ts.map +1 -1
  197. package/dist/server/domains/projects/project.routes.js +1 -3
  198. package/dist/server/domains/projects/project.routes.js.map +1 -1
  199. package/dist/server/domains/projects/project.service.d.ts +1 -7
  200. package/dist/server/domains/projects/project.service.d.ts.map +1 -1
  201. package/dist/server/domains/projects/project.service.js +2 -17
  202. package/dist/server/domains/projects/project.service.js.map +1 -1
  203. package/dist/server/domains/projects/project.store.d.ts +0 -1
  204. package/dist/server/domains/projects/project.store.d.ts.map +1 -1
  205. package/dist/server/domains/projects/project.store.js +0 -1
  206. package/dist/server/domains/projects/project.store.js.map +1 -1
  207. package/dist/server/domains/reports/report.service.d.ts +1 -12
  208. package/dist/server/domains/reports/report.service.d.ts.map +1 -1
  209. package/dist/server/domains/reports/report.service.js +23 -79
  210. package/dist/server/domains/reports/report.service.js.map +1 -1
  211. package/dist/server/domains/statuses/event-types.d.ts +16 -0
  212. package/dist/server/domains/statuses/event-types.d.ts.map +1 -0
  213. package/dist/server/domains/statuses/event-types.js +31 -0
  214. package/dist/server/domains/statuses/event-types.js.map +1 -0
  215. package/dist/server/domains/statuses/index.d.ts +4 -0
  216. package/dist/server/domains/statuses/index.d.ts.map +1 -0
  217. package/dist/server/domains/statuses/index.js +4 -0
  218. package/dist/server/domains/statuses/index.js.map +1 -0
  219. package/dist/server/domains/statuses/status.catalog.d.ts +15 -0
  220. package/dist/server/domains/statuses/status.catalog.d.ts.map +1 -0
  221. package/dist/server/domains/statuses/status.catalog.js +119 -0
  222. package/dist/server/domains/statuses/status.catalog.js.map +1 -0
  223. package/dist/server/domains/statuses/status.events.d.ts +15 -0
  224. package/dist/server/domains/statuses/status.events.d.ts.map +1 -0
  225. package/dist/server/domains/statuses/status.events.js +2 -0
  226. package/dist/server/domains/statuses/status.events.js.map +1 -0
  227. package/dist/server/domains/statuses/status.fire.d.ts +48 -0
  228. package/dist/server/domains/statuses/status.fire.d.ts.map +1 -0
  229. package/dist/server/domains/statuses/status.fire.js +38 -0
  230. package/dist/server/domains/statuses/status.fire.js.map +1 -0
  231. package/dist/server/domains/subscriptions/subscription.routes.d.ts.map +1 -1
  232. package/dist/server/domains/subscriptions/subscription.routes.js +4 -2
  233. package/dist/server/domains/subscriptions/subscription.routes.js.map +1 -1
  234. package/dist/server/domains/subtasks/subtask.blocking.d.ts +4 -4
  235. package/dist/server/domains/subtasks/subtask.blocking.d.ts.map +1 -1
  236. package/dist/server/domains/subtasks/subtask.blocking.js +2 -10
  237. package/dist/server/domains/subtasks/subtask.blocking.js.map +1 -1
  238. package/dist/server/domains/subtasks/subtask.release.d.ts +5 -9
  239. package/dist/server/domains/subtasks/subtask.release.d.ts.map +1 -1
  240. package/dist/server/domains/subtasks/subtask.release.js +0 -4
  241. package/dist/server/domains/subtasks/subtask.release.js.map +1 -1
  242. package/dist/server/domains/subtasks/subtask.service.d.ts +1 -3
  243. package/dist/server/domains/subtasks/subtask.service.d.ts.map +1 -1
  244. package/dist/server/domains/subtasks/subtask.service.js +0 -12
  245. package/dist/server/domains/subtasks/subtask.service.js.map +1 -1
  246. package/dist/server/kernel/http.d.ts.map +1 -1
  247. package/dist/server/kernel/http.js +0 -3
  248. package/dist/server/kernel/http.js.map +1 -1
  249. package/dist/server/kernel/kinds.d.ts +24 -6
  250. package/dist/server/kernel/kinds.d.ts.map +1 -1
  251. package/dist/server/kernel/kinds.js +21 -1
  252. package/dist/server/kernel/kinds.js.map +1 -1
  253. package/dist/server/kernel/work.d.ts +8 -4
  254. package/dist/server/kernel/work.d.ts.map +1 -1
  255. package/dist/server/kernel/work.js +21 -10
  256. package/dist/server/kernel/work.js.map +1 -1
  257. package/dist/server/locales/en-US.d.ts +0 -9
  258. package/dist/server/locales/en-US.d.ts.map +1 -1
  259. package/dist/server/locales/en-US.js +0 -9
  260. package/dist/server/locales/en-US.js.map +1 -1
  261. package/dist/server/locales/zh-CN.d.ts.map +1 -1
  262. package/dist/server/locales/zh-CN.js +2 -11
  263. package/dist/server/locales/zh-CN.js.map +1 -1
  264. package/dist/server/providers/change-announcer.d.ts +27 -0
  265. package/dist/server/providers/change-announcer.d.ts.map +1 -0
  266. package/dist/server/providers/change-announcer.js +74 -0
  267. package/dist/server/providers/change-announcer.js.map +1 -0
  268. package/dist/server/providers/notifications.d.ts +1 -0
  269. package/dist/server/providers/notifications.d.ts.map +1 -1
  270. package/dist/server/providers/notifications.js +6 -120
  271. package/dist/server/providers/notifications.js.map +1 -1
  272. package/dist/server/providers/projects.d.ts +3 -8
  273. package/dist/server/providers/projects.d.ts.map +1 -1
  274. package/dist/server/providers/projects.js +14 -37
  275. package/dist/server/providers/projects.js.map +1 -1
  276. package/dist/server/routes/api.d.ts.map +1 -1
  277. package/dist/server/routes/api.js +0 -6
  278. package/dist/server/routes/api.js.map +1 -1
  279. package/dist/server/routes/schemas.d.ts +1 -27
  280. package/dist/server/routes/schemas.d.ts.map +1 -1
  281. package/dist/server/routes/schemas.js +23 -167
  282. package/dist/server/routes/schemas.js.map +1 -1
  283. package/dist/server/tokens.d.ts +12 -34
  284. package/dist/server/tokens.d.ts.map +1 -1
  285. package/dist/server/tokens.js +4 -16
  286. package/dist/server/tokens.js.map +1 -1
  287. package/dist/shared/access.d.ts +0 -1
  288. package/dist/shared/access.d.ts.map +1 -1
  289. package/dist/shared/access.js +2 -11
  290. package/dist/shared/access.js.map +1 -1
  291. package/dist/shared/issues.d.ts +14 -36
  292. package/dist/shared/issues.d.ts.map +1 -1
  293. package/dist/shared/issues.js +1 -0
  294. package/dist/shared/issues.js.map +1 -1
  295. package/dist/shared/kinds.d.ts +3 -1
  296. package/dist/shared/kinds.d.ts.map +1 -1
  297. package/dist/shared/kinds.js +1 -1
  298. package/dist/shared/locales/access.en-US.d.ts +0 -1
  299. package/dist/shared/locales/access.en-US.d.ts.map +1 -1
  300. package/dist/shared/locales/access.en-US.js +1 -2
  301. package/dist/shared/locales/access.en-US.js.map +1 -1
  302. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -1
  303. package/dist/shared/locales/access.zh-CN.js +1 -2
  304. package/dist/shared/locales/access.zh-CN.js.map +1 -1
  305. package/dist/shared/plans.d.ts +6 -6
  306. package/dist/shared/plans.d.ts.map +1 -1
  307. package/dist/shared/plans.js +2 -1
  308. package/dist/shared/plans.js.map +1 -1
  309. package/dist/shared/projects.d.ts +0 -4
  310. package/dist/shared/projects.d.ts.map +1 -1
  311. package/dist/shared/projects.js.map +1 -1
  312. package/dist/shared/realtime.d.ts +9 -3
  313. package/dist/shared/realtime.d.ts.map +1 -1
  314. package/dist/shared/realtime.js +3 -2
  315. package/dist/shared/realtime.js.map +1 -1
  316. package/dist/shared/statuses.d.ts +42 -0
  317. package/dist/shared/statuses.d.ts.map +1 -0
  318. package/dist/shared/statuses.js +73 -0
  319. package/dist/shared/statuses.js.map +1 -0
  320. package/dist/shared/subtasks.d.ts +3 -3
  321. package/dist/shared/subtasks.d.ts.map +1 -1
  322. package/package.json +9 -17
  323. package/skills/nocobase-app-plugin-projects/SKILL.md +27 -51
  324. package/dist/client/hooks/use-workflow-leave-guard.d.ts +0 -3
  325. package/dist/client/hooks/use-workflow-leave-guard.d.ts.map +0 -1
  326. package/dist/client/hooks/use-workflow-leave-guard.js +0 -31
  327. package/dist/client/hooks/use-workflow-leave-guard.js.map +0 -1
  328. package/dist/client/lib/built-in-rule-editors.d.ts +0 -13
  329. package/dist/client/lib/built-in-rule-editors.d.ts.map +0 -1
  330. package/dist/client/lib/built-in-rule-editors.js +0 -86
  331. package/dist/client/lib/built-in-rule-editors.js.map +0 -1
  332. package/dist/client/lib/built-in-rule-types.d.ts +0 -3
  333. package/dist/client/lib/built-in-rule-types.d.ts.map +0 -1
  334. package/dist/client/lib/built-in-rule-types.js +0 -63
  335. package/dist/client/lib/built-in-rule-types.js.map +0 -1
  336. package/dist/client/lib/status-rule-types.d.ts +0 -60
  337. package/dist/client/lib/status-rule-types.d.ts.map +0 -1
  338. package/dist/client/lib/status-rule-types.js +0 -38
  339. package/dist/client/lib/status-rule-types.js.map +0 -1
  340. package/dist/client/lib/workflow-events.d.ts +0 -25
  341. package/dist/client/lib/workflow-events.d.ts.map +0 -1
  342. package/dist/client/lib/workflow-events.js +0 -30
  343. package/dist/client/lib/workflow-events.js.map +0 -1
  344. package/dist/client/pages/config/workflow-detail.d.ts +0 -10
  345. package/dist/client/pages/config/workflow-detail.d.ts.map +0 -1
  346. package/dist/client/pages/config/workflow-detail.js +0 -207
  347. package/dist/client/pages/config/workflow-detail.js.map +0 -1
  348. package/dist/client/pages/config/workflows/flow-editor.d.ts +0 -15
  349. package/dist/client/pages/config/workflows/flow-editor.d.ts.map +0 -1
  350. package/dist/client/pages/config/workflows/flow-editor.js +0 -76
  351. package/dist/client/pages/config/workflows/flow-editor.js.map +0 -1
  352. package/dist/client/pages/config/workflows/status-rules.d.ts +0 -21
  353. package/dist/client/pages/config/workflows/status-rules.d.ts.map +0 -1
  354. package/dist/client/pages/config/workflows/status-rules.js +0 -203
  355. package/dist/client/pages/config/workflows/status-rules.js.map +0 -1
  356. package/dist/client/pages/config/workflows/transitions-matrix.d.ts +0 -20
  357. package/dist/client/pages/config/workflows/transitions-matrix.d.ts.map +0 -1
  358. package/dist/client/pages/config/workflows/transitions-matrix.js +0 -114
  359. package/dist/client/pages/config/workflows/transitions-matrix.js.map +0 -1
  360. package/dist/client/pages/config/workflows/use-status-name.d.ts +0 -4
  361. package/dist/client/pages/config/workflows/use-status-name.d.ts.map +0 -1
  362. package/dist/client/pages/config/workflows/use-status-name.js +0 -17
  363. package/dist/client/pages/config/workflows/use-status-name.js.map +0 -1
  364. package/dist/client/pages/config/workflows/workflow-diagram.d.ts +0 -17
  365. package/dist/client/pages/config/workflows/workflow-diagram.d.ts.map +0 -1
  366. package/dist/client/pages/config/workflows/workflow-diagram.js +0 -298
  367. package/dist/client/pages/config/workflows/workflow-diagram.js.map +0 -1
  368. package/dist/client/pages/config/workflows/workflow-model.d.ts +0 -157
  369. package/dist/client/pages/config/workflows/workflow-model.d.ts.map +0 -1
  370. package/dist/client/pages/config/workflows/workflow-model.js +0 -403
  371. package/dist/client/pages/config/workflows/workflow-model.js.map +0 -1
  372. package/dist/client/pages/config/workflows/workflow-views.d.ts +0 -31
  373. package/dist/client/pages/config/workflows/workflow-views.d.ts.map +0 -1
  374. package/dist/client/pages/config/workflows/workflow-views.js +0 -76
  375. package/dist/client/pages/config/workflows/workflow-views.js.map +0 -1
  376. package/dist/client/pages/config/workflows.d.ts +0 -8
  377. package/dist/client/pages/config/workflows.d.ts.map +0 -1
  378. package/dist/client/pages/config/workflows.js +0 -139
  379. package/dist/client/pages/config/workflows.js.map +0 -1
  380. package/dist/client/pages/issues/detail/start-dialog.d.ts +0 -20
  381. package/dist/client/pages/issues/detail/start-dialog.d.ts.map +0 -1
  382. package/dist/client/pages/issues/detail/start-dialog.js +0 -31
  383. package/dist/client/pages/issues/detail/start-dialog.js.map +0 -1
  384. package/dist/client/pages/projects/workflow-select.d.ts +0 -14
  385. package/dist/client/pages/projects/workflow-select.d.ts.map +0 -1
  386. package/dist/client/pages/projects/workflow-select.js +0 -34
  387. package/dist/client/pages/projects/workflow-select.js.map +0 -1
  388. package/dist/server/domains/approvals/approval.events.d.ts +0 -47
  389. package/dist/server/domains/approvals/approval.events.d.ts.map +0 -1
  390. package/dist/server/domains/approvals/approval.events.js +0 -2
  391. package/dist/server/domains/approvals/approval.events.js.map +0 -1
  392. package/dist/server/domains/approvals/approval.lifecycle.d.ts +0 -8
  393. package/dist/server/domains/approvals/approval.lifecycle.d.ts.map +0 -1
  394. package/dist/server/domains/approvals/approval.lifecycle.js +0 -54
  395. package/dist/server/domains/approvals/approval.lifecycle.js.map +0 -1
  396. package/dist/server/domains/approvals/approval.routes.d.ts +0 -10
  397. package/dist/server/domains/approvals/approval.routes.d.ts.map +0 -1
  398. package/dist/server/domains/approvals/approval.routes.js +0 -87
  399. package/dist/server/domains/approvals/approval.routes.js.map +0 -1
  400. package/dist/server/domains/approvals/approval.service.d.ts +0 -72
  401. package/dist/server/domains/approvals/approval.service.d.ts.map +0 -1
  402. package/dist/server/domains/approvals/approval.service.js +0 -261
  403. package/dist/server/domains/approvals/approval.service.js.map +0 -1
  404. package/dist/server/domains/approvals/approval.store.d.ts +0 -42
  405. package/dist/server/domains/approvals/approval.store.d.ts.map +0 -1
  406. package/dist/server/domains/approvals/approval.store.js +0 -66
  407. package/dist/server/domains/approvals/approval.store.js.map +0 -1
  408. package/dist/server/domains/approvals/index.d.ts +0 -4
  409. package/dist/server/domains/approvals/index.d.ts.map +0 -1
  410. package/dist/server/domains/approvals/index.js +0 -3
  411. package/dist/server/domains/approvals/index.js.map +0 -1
  412. package/dist/server/domains/checklists/checklist.routes.d.ts +0 -9
  413. package/dist/server/domains/checklists/checklist.routes.d.ts.map +0 -1
  414. package/dist/server/domains/checklists/checklist.routes.js +0 -62
  415. package/dist/server/domains/checklists/checklist.routes.js.map +0 -1
  416. package/dist/server/domains/checklists/checklist.service.d.ts +0 -26
  417. package/dist/server/domains/checklists/checklist.service.d.ts.map +0 -1
  418. package/dist/server/domains/checklists/checklist.service.js +0 -80
  419. package/dist/server/domains/checklists/checklist.service.js.map +0 -1
  420. package/dist/server/domains/checklists/checklist.store.d.ts +0 -32
  421. package/dist/server/domains/checklists/checklist.store.d.ts.map +0 -1
  422. package/dist/server/domains/checklists/checklist.store.js +0 -66
  423. package/dist/server/domains/checklists/checklist.store.js.map +0 -1
  424. package/dist/server/domains/checklists/index.d.ts +0 -4
  425. package/dist/server/domains/checklists/index.d.ts.map +0 -1
  426. package/dist/server/domains/checklists/index.js +0 -4
  427. package/dist/server/domains/checklists/index.js.map +0 -1
  428. package/dist/server/domains/workflows/built-in-rule-types.d.ts +0 -40
  429. package/dist/server/domains/workflows/built-in-rule-types.d.ts.map +0 -1
  430. package/dist/server/domains/workflows/built-in-rule-types.js +0 -260
  431. package/dist/server/domains/workflows/built-in-rule-types.js.map +0 -1
  432. package/dist/server/domains/workflows/event-types.d.ts +0 -21
  433. package/dist/server/domains/workflows/event-types.d.ts.map +0 -1
  434. package/dist/server/domains/workflows/event-types.js +0 -31
  435. package/dist/server/domains/workflows/event-types.js.map +0 -1
  436. package/dist/server/domains/workflows/index.d.ts +0 -10
  437. package/dist/server/domains/workflows/index.d.ts.map +0 -1
  438. package/dist/server/domains/workflows/index.js +0 -10
  439. package/dist/server/domains/workflows/index.js.map +0 -1
  440. package/dist/server/domains/workflows/rule-types.d.ts +0 -129
  441. package/dist/server/domains/workflows/rule-types.d.ts.map +0 -1
  442. package/dist/server/domains/workflows/rule-types.js +0 -33
  443. package/dist/server/domains/workflows/rule-types.js.map +0 -1
  444. package/dist/server/domains/workflows/templates.d.ts +0 -62
  445. package/dist/server/domains/workflows/templates.d.ts.map +0 -1
  446. package/dist/server/domains/workflows/templates.js +0 -63
  447. package/dist/server/domains/workflows/templates.js.map +0 -1
  448. package/dist/server/domains/workflows/workflow.diff.d.ts +0 -14
  449. package/dist/server/domains/workflows/workflow.diff.d.ts.map +0 -1
  450. package/dist/server/domains/workflows/workflow.diff.js +0 -80
  451. package/dist/server/domains/workflows/workflow.diff.js.map +0 -1
  452. package/dist/server/domains/workflows/workflow.events.d.ts +0 -26
  453. package/dist/server/domains/workflows/workflow.events.d.ts.map +0 -1
  454. package/dist/server/domains/workflows/workflow.events.js +0 -2
  455. package/dist/server/domains/workflows/workflow.events.js.map +0 -1
  456. package/dist/server/domains/workflows/workflow.fire.d.ts +0 -38
  457. package/dist/server/domains/workflows/workflow.fire.d.ts.map +0 -1
  458. package/dist/server/domains/workflows/workflow.fire.js +0 -57
  459. package/dist/server/domains/workflows/workflow.fire.js.map +0 -1
  460. package/dist/server/domains/workflows/workflow.registry.d.ts +0 -27
  461. package/dist/server/domains/workflows/workflow.registry.d.ts.map +0 -1
  462. package/dist/server/domains/workflows/workflow.registry.js +0 -132
  463. package/dist/server/domains/workflows/workflow.registry.js.map +0 -1
  464. package/dist/server/domains/workflows/workflow.routes.d.ts +0 -6
  465. package/dist/server/domains/workflows/workflow.routes.d.ts.map +0 -1
  466. package/dist/server/domains/workflows/workflow.routes.js +0 -148
  467. package/dist/server/domains/workflows/workflow.routes.js.map +0 -1
  468. package/dist/server/domains/workflows/workflow.rules.d.ts +0 -14
  469. package/dist/server/domains/workflows/workflow.rules.d.ts.map +0 -1
  470. package/dist/server/domains/workflows/workflow.rules.js +0 -212
  471. package/dist/server/domains/workflows/workflow.rules.js.map +0 -1
  472. package/dist/server/domains/workflows/workflow.service.d.ts +0 -71
  473. package/dist/server/domains/workflows/workflow.service.d.ts.map +0 -1
  474. package/dist/server/domains/workflows/workflow.service.js +0 -366
  475. package/dist/server/domains/workflows/workflow.service.js.map +0 -1
  476. package/dist/server/domains/workflows/workflow.store.d.ts +0 -33
  477. package/dist/server/domains/workflows/workflow.store.d.ts.map +0 -1
  478. package/dist/server/domains/workflows/workflow.store.js +0 -148
  479. package/dist/server/domains/workflows/workflow.store.js.map +0 -1
  480. package/dist/shared/approvals.d.ts +0 -37
  481. package/dist/shared/approvals.d.ts.map +0 -1
  482. package/dist/shared/approvals.js +0 -4
  483. package/dist/shared/approvals.js.map +0 -1
  484. package/dist/shared/checklists.d.ts +0 -27
  485. package/dist/shared/checklists.d.ts.map +0 -1
  486. package/dist/shared/checklists.js +0 -7
  487. package/dist/shared/checklists.js.map +0 -1
  488. package/dist/shared/workflows.d.ts +0 -276
  489. package/dist/shared/workflows.d.ts.map +0 -1
  490. package/dist/shared/workflows.js +0 -151
  491. package/dist/shared/workflows.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ export const STATUS_CATEGORIES = [
2
+ 'unstarted',
3
+ 'started',
4
+ 'done',
5
+ 'closed',
6
+ ];
7
+ export const BACKLOG_STATUS = 'backlog';
8
+ export const IN_PROGRESS_STATUS = 'in_progress';
9
+ export const BLOCKED_STATUS = 'blocked';
10
+ export const IN_REVIEW_STATUS = 'in_review';
11
+ export const DONE_STATUS = 'done';
12
+ export const CANCELLED_STATUS = 'cancelled';
13
+ /** The fixed statuses, in order. Names are English; the browser shows each in the viewer's language. */
14
+ export const FIXED_STATUSES = [
15
+ {
16
+ key: BACKLOG_STATUS,
17
+ name: 'Backlog',
18
+ category: 'unstarted',
19
+ color: 'gray',
20
+ },
21
+ {
22
+ key: IN_PROGRESS_STATUS,
23
+ name: 'In progress',
24
+ category: 'started',
25
+ color: 'yellow',
26
+ },
27
+ { key: BLOCKED_STATUS, name: 'Blocked', category: 'started', color: 'red' },
28
+ {
29
+ key: IN_REVIEW_STATUS,
30
+ name: 'In review',
31
+ category: 'started',
32
+ color: 'purple',
33
+ },
34
+ { key: DONE_STATUS, name: 'Done', category: 'done', color: 'green' },
35
+ {
36
+ key: CANCELLED_STATUS,
37
+ name: 'Cancelled',
38
+ category: 'closed',
39
+ color: 'gray',
40
+ },
41
+ ];
42
+ export const STATUS_KEYS = FIXED_STATUSES.map((status) => status.key);
43
+ /** The statuses a new issue may start in: right away, or later. */
44
+ export const START_STATUSES = [
45
+ IN_PROGRESS_STATUS,
46
+ BACKLOG_STATUS,
47
+ ];
48
+ /** Where a new issue starts when its creator names no status: nothing starts. */
49
+ export const DEFAULT_START_STATUS = BACKLOG_STATUS;
50
+ /** The owner is told when an issue enters one of these. */
51
+ export const OWNER_NOTIFIED_STATUSES = [
52
+ BLOCKED_STATUS,
53
+ IN_REVIEW_STATUS,
54
+ ];
55
+ export function isFixedStatus(key) {
56
+ return STATUS_KEYS.includes(key);
57
+ }
58
+ export function statusCategory(key) {
59
+ return FIXED_STATUSES.find((status) => status.key === key)?.category ?? null;
60
+ }
61
+ export function statusOf(key) {
62
+ return FIXED_STATUSES.find((status) => status.key === key) ?? null;
63
+ }
64
+ export function isTerminalCategory(category) {
65
+ return category === 'done' || category === 'closed';
66
+ }
67
+ /** Whether a status still has its fixed English name, so the interface shows the translation instead. */
68
+ export function hasDefaultName(status) {
69
+ return FIXED_STATUSES.some((fixed) => fixed.key === status.key && fixed.name === status.name);
70
+ }
71
+ /** A status event's key: dotted, its plugin's prefix first, such as `acme.merged`. */
72
+ export const STATUS_EVENT_PATTERN = /^[a-z][a-zA-Z0-9]{0,31}(\.[a-z][a-zA-Z0-9]{0,63}){1,3}$/u;
73
+ //# sourceMappingURL=statuses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statuses.js","sourceRoot":"","sources":["../../shared/statuses.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,WAAW;IACX,SAAS;IACT,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE5C,wGAAwG;AACxG,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD;QACE,GAAG,EAAE,cAAc;QACnB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,MAAM;KACd;IACD;QACE,GAAG,EAAE,kBAAkB;QACvB,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,QAAQ;KAChB;IACD,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3E;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,QAAQ;KAChB;IACD,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IACpE;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,MAAM;KACd;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsB,cAAc,CAAC,GAAG,CAC9D,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CACvB,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,kBAAkB;IAClB,cAAc;CACf,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAW,cAAc,CAAC;AAE3D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,cAAc;IACd,gBAAgB;CACjB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA+B;IAChE,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC;AACtD,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,cAAc,CAAC,MAG9B;IACC,OAAO,cAAc,CAAC,IAAI,CACxB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAClE,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,0DAA0D,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Sub-issues and dependencies. An issue may wait for others: `blockedBy` holds it until the other is finished (in a
3
- * done or closed status of its own workflow), `relatedTo` only links the two. Sub-issues with a stage form batches: a
3
+ * done or closed status), `relatedTo` only links the two. Sub-issues with a stage form batches: a
4
4
  * sub-issue waits until every sibling of a lower stage is finished.
5
5
  */
6
6
  import type { Executor, StatusDefinition } from './issues.js';
@@ -18,7 +18,7 @@ export interface IssueDependency {
18
18
  readonly issueId: string;
19
19
  readonly identifier: string;
20
20
  readonly title: string;
21
- /** That issue's current status, from its own workflow (it may be in another project). */
21
+ /** That issue's current status, as it is now (it may be in another project). */
22
22
  readonly status: StatusDefinition;
23
23
  readonly type: DependencyType;
24
24
  }
@@ -40,7 +40,7 @@ export interface SubtaskSummary {
40
40
  readonly executorName: string | null;
41
41
  /** Unfinished issues it waits for. */
42
42
  readonly blockedCount: number;
43
- /** Finished, by its own workflow. */
43
+ /** Finished: done or cancelled. */
44
44
  readonly terminal: boolean;
45
45
  }
46
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"subtasks.d.ts","sourceRoot":"","sources":["../../shared/subtasks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AACvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAGrD,CAAC;AAEF,eAAO,MAAM,SAAS,OAAO,CAAC;AAC9B,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B;AAED,qHAAqH;AACrH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iCAAiC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,8FAA8F;AAC9F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;CACvC"}
1
+ {"version":3,"file":"subtasks.d.ts","sourceRoot":"","sources":["../../shared/subtasks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AACvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAGrD,CAAC;AAEF,eAAO,MAAM,SAAS,OAAO,CAAC;AAC9B,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B;AAED,qHAAqH;AACrH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iCAAiC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,8FAA8F;AAC9F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;CACvC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@nocobase/app-plugin-projects",
3
3
  "displayName": "Projects",
4
- "description": "Projects, issues, workflows and collaboration for a NocoBase application.",
5
- "version": "0.1.0-beta.7",
4
+ "description": "Projects, issues and collaboration for a NocoBase application.",
5
+ "version": "0.1.0-beta.9",
6
6
  "type": "module",
7
7
  "prettier": "@nocobase/dev-config/prettier",
8
8
  "engines": {
@@ -26,18 +26,10 @@
26
26
  "types": "./dist/shared/access.d.ts",
27
27
  "import": "./dist/shared/access.js"
28
28
  },
29
- "./shared/approvals": {
30
- "types": "./dist/shared/approvals.d.ts",
31
- "import": "./dist/shared/approvals.js"
32
- },
33
29
  "./shared/attachments": {
34
30
  "types": "./dist/shared/attachments.d.ts",
35
31
  "import": "./dist/shared/attachments.js"
36
32
  },
37
- "./shared/checklists": {
38
- "types": "./dist/shared/checklists.d.ts",
39
- "import": "./dist/shared/checklists.js"
40
- },
41
33
  "./shared/common": {
42
34
  "types": "./dist/shared/common.d.ts",
43
35
  "import": "./dist/shared/common.js"
@@ -78,9 +70,9 @@
78
70
  "types": "./dist/shared/settings.d.ts",
79
71
  "import": "./dist/shared/settings.js"
80
72
  },
81
- "./shared/workflows": {
82
- "types": "./dist/shared/workflows.d.ts",
83
- "import": "./dist/shared/workflows.js"
73
+ "./shared/statuses": {
74
+ "types": "./dist/shared/statuses.d.ts",
75
+ "import": "./dist/shared/statuses.js"
84
76
  },
85
77
  "./client": {
86
78
  "types": "./dist/client/index.d.ts",
@@ -162,14 +154,14 @@
162
154
  "react-virtuoso": "^4.18.15",
163
155
  "remark-gfm": "^4.0.1",
164
156
  "@nocobase/app-client": "^3.0.0-beta.1",
165
- "@nocobase/app-plugin-authentication": "^2.0.0-beta.7",
157
+ "@nocobase/app-plugin-authentication": "^2.0.0-beta.9",
166
158
  "@nocobase/app-plugin-authorization": "^1.0.0-beta.27",
167
159
  "@nocobase/app-plugin-file": "^1.0.0-beta.23",
168
160
  "@nocobase/app-plugin-notification": "^1.0.0-beta.27",
169
161
  "@nocobase/app-plugin-users": "^2.0.0-beta.4",
170
- "@nocobase/app-server": "^2.0.0-beta.4",
162
+ "@nocobase/app-server": "^2.0.0-beta.7",
171
163
  "@nocobase/authorization": "^1.0.0-beta.13",
172
- "@nocobase/db": "^1.0.0-beta.19",
164
+ "@nocobase/db": "^1.0.0-beta.20",
173
165
  "@nocobase/i18n": "^1.0.0-beta.7",
174
166
  "@nocobase/markdown-mermaid": "^0.1.0-beta.2",
175
167
  "@nocobase/repository-input": "^0.1.0-beta.3",
@@ -189,7 +181,7 @@
189
181
  "tw-animate-css": "^1.2.5",
190
182
  "typescript": "^6.0.3",
191
183
  "vitest": "^4.1.10",
192
- "@nocobase/app-testing": "0.1.0-beta.3",
184
+ "@nocobase/app-testing": "0.1.0-beta.4",
193
185
  "@nocobase/db-sqlite": "0.1.0-beta.5",
194
186
  "@nocobase/dev-config": "0.1.0-beta.22"
195
187
  },
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: nocobase-app-plugin-projects
3
- description: Register the Projects plugin in a NocoBase App, call its /api/projects API for projects, issues, workflows, labels and members, grant its permissions, or work out why a projects request is rejected.
3
+ description: Register the Projects plugin in a NocoBase App, call its /api/projects API for projects, issues, their fixed statuses, labels and members, grant its permissions, or work out why a projects request is rejected.
4
4
  metadata:
5
- short-description: Projects, issues, workflows, labels and members
5
+ short-description: Projects, issues, statuses, labels and members
6
6
  ---
7
7
 
8
8
  # Projects App Plugin
@@ -16,20 +16,20 @@ for generic collection CRUD; the plugin's tables are only written through its AP
16
16
  `@nocobase/app-plugin-projects/server/tokens` resolves the services. The App must bind `projectsAccessToken`
17
17
  (`ProjectsAccess`: `permissionsOf`, `admit`, `changed`, `administrators`, and optionally `permissionsOfUser` so
18
18
  notices reach only those who may see the issue): the plugin keeps no roles of its own. It may bind
19
- `projectsNoticesToken` (`ProjectsNotices`: `send`, `resolve`) to receive the plugin's notices (owner notified,
20
- approval requested as a `decision`, approval decided, commented, mentioned, status changed, owner or executor
21
- assigned; information carries a `group` to merge by) and keep its own inbox; otherwise they go to the in-app
19
+ `projectsNoticesToken` (`ProjectsNotices`: `send`) to receive the plugin's notices (owner notified, commented,
20
+ mentioned, status changed, owner or executor assigned; information carries a `group` to merge by) and keep its own
21
+ inbox; otherwise they go to the in-app
22
22
  channel `projects.inboxChannel`. Another plugin binds `projectsTriggersToken` (`IssueTriggers`) to start work when
23
23
  a person comments, and adds notice rules through `projectsNoticeRulesToken`. Operation plans (`shared/plans.ts`)
24
24
  are proposed through `projects.plans` (`PlanService`: rehearse, create, propose to someone else, execute, preview an undo and undo in one step), and
25
25
  a plugin binds `projectsPlanHooksToken` (`PlanHooks.onPlanDecided`) to hear their decisions.
26
26
  - Shared types: `@nocobase/app-plugin-projects/shared/<name>` (`access`, `attachments`, `comments`, `common`, `issues`,
27
- `labels`, `members`, `plans`, `projects`, `settings`, `subscriptions`, `subtasks`, `workflows`).
27
+ `labels`, `members`, `plans`, `projects`, `settings`, `statuses`, `subscriptions`, `subtasks`).
28
28
  - Server routes: everything under `/api/projects`; see the package README for the list. Failures are the standard error body with domain `projects`: branch on `reason`, read details from `metadata`.
29
29
  - Client: the default export of `@nocobase/app-plugin-projects/client` adds `/projects` (the list and "New project").
30
30
  The App owns a project's page (`/projects/:projectId`, routed as that route's child) and composes it from the
31
31
  headless `@nocobase/app-plugin-projects/client/projects` (`useProjectDetail`, `useProjectUpdate`,
32
- `useProjectMembership`, `useProjectResources`, `useResourceValidation`, `useDeleteProject`, `useProjectWorkflow`).
32
+ `useProjectMembership`, `useProjectResources`, `useResourceValidation`, `useDeleteProject`).
33
33
  The App also owns `/issues` and
34
34
  `/my-issues`: it composes them from the headless `@nocobase/app-plugin-projects/client/issues` (list and board queries,
35
35
  board moves, filters in the query string, executor options) and routes the plugin's pages under `/issues` (the New
@@ -37,9 +37,9 @@ for generic collection CRUD; the plugin's tables are only written through its AP
37
37
  issue's page (`/issues/:issueId`), presented over the same headless entry (`useIssueDetail`, `useIssuePageActions`,
38
38
  `useIssueTimeline`, `useIssueCommentActions` and the rest), and hosts the plugin's "New sub-issue" dialog under it
39
39
  (`issueDetailChildRoutes`).
40
- The settings pages (issue prefix, labels, workflows) are exported from
40
+ The settings pages (issue prefix, labels) are exported from
41
41
  `@nocobase/app-plugin-projects/client/config` for the App to route under its own settings page, and shared page
42
- components from `@nocobase/app-plugin-projects/client/kit`. Changes are announced on the realtime topic `pm:changes`.
42
+ components from `@nocobase/app-plugin-projects/client/kit`. Changes are announced on the realtime topic `pm:changes`, naming the changed issues in `issueIds` when they can; refresh only those issues' reads then.
43
43
 
44
44
  The NocoBase UI Library presents these headless entries; install an item rather than building the page from scratch, and read its example (`pnpm exec shadcn view @nocobase/<item>-demo`) first. `project-detail` is a block for a project's page, `issue-detail` a block for an issue's page, and `issue-table`, `kanban` and `comment-thread` the components for the issue list, the board and an issue's activity. For agents working on issues, `agent-queue` (a block) and `agent-run-history` (a component) take the runs of `@nocobase/app-plugin-agents`. Each is installed with `yes n | pnpm exec shadcn add @nocobase/<item>` and is presentational: map the hooks' data to its props and its callbacks to the hooks' mutations.
45
45
 
@@ -58,50 +58,26 @@ grants from before roles moved to the App; the App converts them (for example, `
58
58
  moderate-comments, close, change-owner, delete; `pm.attachments`: upload) reach none, related or all records. The
59
59
  plugin registers them as the `pm` resource type, one action per level (`edit.related`, `edit.all`; `create` and
60
60
  `delete` without levels; `shared/access.ts`: `levelActionsOf`), and a role grants the level's action; the App's
61
- `permissionsOf` says which for each request. Settings items (`pm.general`, `pm.labels`, `pm.workflows`: read,
62
- update; `pm.members`: read, invite, assign, define-roles) are registered by the plugin. Creating an issue needs `pm.issues` `create`, not `edit`. `GET /api/projects/me` returns what the caller
61
+ `permissionsOf` says which for each request. Settings items (`pm.general`, `pm.labels`: read, update; `pm.members`: read, invite, assign, define-roles) are registered by the plugin. Creating an issue needs `pm.issues` `create`, not `edit`. `GET /api/projects/me` returns what the caller
63
62
  holds.
64
63
  - Authorized original inviters can generate and privately deliver invitation links using an unscoped person credential, without global user creation permissions or an email channel. New accounts register from the link and remain email-unverified; existing users sign in with the matching account. Links use `app.publicOrigin` or the request origin. Generating a new link invalidates the old link; current access to every remaining project is rechecked. Other managers and scoped credentials remain email-only.
65
64
  - Issue updates need the `revision` the caller read; a stale revision is 409 `REVISION_CONFLICT` (`ABORTED`).
66
- - An issue cannot be created in a terminal status, and moving it to another project needs a status that project's
67
- workflow has. A status change the workflow does not allow for the caller is 400 `TRANSITION_NOT_ALLOWED`.
68
- - Workflows (`/api/projects/workflows`) are read by every member and changed with `pm.workflows` `update`. A definition is
69
- `{ states: [{ key, name, category, color, builtIn? }], transitions: [{ from, to, actors }] }` (`*` for any
70
- status, actors: registered kind keys, `user` and `system` built in); the seven built-in statuses stay, each
71
- transition stays within what its kinds allow (`mayEnter`, `mayTargetAny`), and people can leave every status. Problems are 400 `INVALID_WORKFLOW` with `metadata.issues`; dropping a
72
- status issues are in is 400 `WORKFLOW_STATUS_CONFLICT` (`FAILED_PRECONDITION`). A project's `workflowId` (null: the default) switches only
73
- when every issue keeps its status.
74
- - A status may carry `rules`: `{ type: 'checklist', config: { items: [{ key, label, required }] } }` and
75
- `{ type: 'notifyOwner', config: { message? } }`, each at most once. Entering the status copies the checklist to the
76
- issue (`GET /api/projects/issues/{issueId}/checklists`, `PATCH …/checklists/{statusKey}/items/{itemKey} { checked }` by anyone who may
77
- edit the issue); leaving it for anything but a closed status is 400 `CHECKLIST_INCOMPLETE` until the required items
78
- are checked. `notifyOwner` records `owner_notified` and sends an `owner_notified` notice (see `projectsNoticesToken`
79
- above); nothing is sent when the owner moved the issue.
80
- - Another plugin adds status rule types through `projectsStatusRulesToken` (`StatusRuleTypes.add({ type, categories?,
81
- validate?, describe?, canEnter?, entered? })`; `entered` runs in the move's transaction with the issue after the move
82
- and may `setExecutor`; `canEnter` runs before every move into the status, the system's event moves included, and
83
- answers null or `{ code, message, details? }`, which refuses the move with 400 `code`) and workflows that use them through `projectsWorkflowTemplatesToken` (installed once each, marked by
84
- `builtInKey`, titled by the template's `title`). What such a rule did is recorded as `stage_action_applied` or
85
- `stage_action_skipped { reason }`. A rule whose type is gone stays in the definition: saving keeps it unchanged,
86
- entering skips it as `unavailable`. `POST /api/projects/workflows/{workflowId}/preview { definition }` (with `pm.workflows`
87
- `update`) lists the rules a save would add or remove and those that wake someone without confirmation. In the
88
- browser, `StatusRuleTypesContext` from `client/kit` gives each type its title, editor and summary.
89
- - Another plugin registers workflow events through `projectsWorkflowEventsToken` (`WorkflowEventTypes.add({ key, from?,
90
- to? })`, a dotted key such as `acme.merged`; `from`/`to` are the status categories a transition on it may leave and
91
- enter) and fires one with `projects.workflowEvents.fire({ event, issueIds, actor?, note?, details? }, tx?)`. Each
92
- issue with a `{ from, to, actors: ['system'], on: event }` transition from its status moves as the system, inside
93
- `tx` when given; the activity `status_changed { event, note, cause }` names `actor`. The answer lists one outcome
94
- per issue: `moved`, `ignored { reason: 'notFound' | 'noTransition' }` or `refused { code }` (an entry condition held
95
- it back, recorded as `auto_move_skipped`). Only registered, contributed events may be fired. A transition on an
96
- event whose plugin is gone is kept while unchanged. In the browser, `WorkflowEventsContext` (`client/kit`) gives
97
- each event its title and hint for the workflow editor and the timeline.
98
- - A transition may carry `approval: { approvers: ['owner' | 'projectLead' | 'admin', …] }`. A status change through
99
- it answers `PATCH /api/projects/issues/{issueId}` with 202 `{ data: { issue, pendingApproval } }` (the issue unchanged) unless the
100
- mover is an approver or none resolves. `GET /api/projects/approvals` lists the caller's; `POST /api/projects/approvals/{approvalId}/
101
- approve|reject` (403 `NOT_APPROVER`) and `/withdraw` (403 `NOT_REQUESTER`) decide; a decided request is 400
102
- `APPROVAL_DECIDED`, a second pending one 400 `APPROVAL_PENDING`. Approving moves the issue, or leaves the request
103
- `stale` when the move no longer passes; the issue leaving the status also makes its request stale.
104
- - A sub-issue may have a `stage` (0–1000, 400 `INVALID_STAGE`). `POST /api/projects/issues/{issueId}/dependencies { dependsOnIssueId, type: 'blockedBy' | 'relatedTo' }` links issues (201); `DELETE …/dependencies/{dependencyId}` removes a link (204). `PATCH …/dependencies/{dependencyId} { type, expectedType }` changes its type atomically and preserves its ID (200); a stale type is 409 `DEPENDENCY_CHANGED`, and an existing target relationship is 409 `DEPENDENCY_EXISTS` with both links preserved. A related link can be converted from either end; the current issue waits when converted to `blockedBy`. A cycle is 400 `DEPENDENCY_CYCLE`, a duplicate 409 `DEPENDENCY_EXISTS`. Concurrent dependency graph changes can return 409 `DEPENDENCY_GRAPH_CHANGED`; reload and retry the whole operation, including a plan if the write belongs to one. All relationship writes, including both removal endpoints, share this protection so duplicate checks, activity and release notifications use a consistent relationship type and direction. Plans take the graph guard before their first row during rehearsal, execution and undo. Issue status/project changes, approval execution, workflow events and deletion take the same guard before writing issue rows, so concurrent releases cannot leave unblocked work idle; automatic parent/stage completion retains it. Creation, parent/stage changes and restoration share this protection; independent creates without waits lock without changing the graph revision and do not conflict with each other; restoring a deleted issue can be rejected with `DEPENDENCY_CYCLE`. Issue detail carries `subtasks`, `blockedBy`, `blocks`, `relatedTo`, `blockers` and `hiddenBlockerCount`; list items `subtaskCount` and `blockedCount`. Finishing an issue releases the issues waiting on it (`dependency_released` notice) and tells the parent's owner when a stage or all sub-issues finish (`batch_done`). A workflow transition `{ from, to, actors: ['system'], on: 'subtasks.done' }` moves the parent then; status rules `{ type: 'subtasksDone' }` (400 `SUBTASKS_OPEN`) and `{ type: 'blockersDone' }` (400 `ISSUE_BLOCKED`) refuse entering a status too early.
65
+ - Statuses are fixed (`shared/statuses.ts`): `backlog`, `in_progress`, `blocked`, `in_review`, `done`, `cancelled`, the
66
+ same for every project (`GET /api/projects/issues/statuses`). A new issue starts in `backlog` (nothing starts) or
67
+ `in_progress` (its work starts); any other `statusKey` is 400 `INVALID_STATUS`. Left without `executor`, it gets the
68
+ default executor a kind names (`PrincipalKind.defaultExecutor`; `GET /api/projects/executors` marks it `isDefault`).
69
+ People move an issue between any two statuses; a principal of another kind only along its kind's `moves`, and only
70
+ when its `mayMove` agrees; anything else is 400 `TRANSITION_NOT_ALLOWED`. Entering `blocked` or `in_review` records
71
+ `owner_notified` and sends an `owner_notified` notice, unless the owner moved it. `PATCH /api/projects/issues/{issueId}`
72
+ answers 200 `{ data: { issue } }`.
73
+ - Another plugin registers status events through `projectsStatusEventsToken` (`StatusEventTypes.add({ key, from, to })`,
74
+ a dotted key such as `acme.merged`, the statuses it moves an issue out of and the one it moves it to) and fires one
75
+ with `projects.statusEvents.fire({ event, issueIds, actor?, note?, details? }, tx?)`. Each issue in one of `from`
76
+ moves to `to` as the system, inside `tx` when given; the activity `status_changed { event, note, cause }` names
77
+ `actor`. The answer lists one outcome per issue: `moved`, `ignored { reason: 'notFound' | 'noTransition' }` or
78
+ `refused { code }` (recorded as `auto_move_skipped`). `projects.statusEvents.target(event, issueId)` says where it
79
+ would take one issue. In the browser, `StatusEventsContext` (`client/kit`) titles each event for the timeline.
80
+ - A sub-issue may have a `stage` (0–1000, 400 `INVALID_STAGE`). `POST /api/projects/issues/{issueId}/dependencies { dependsOnIssueId, type: 'blockedBy' | 'relatedTo' }` links issues (201); `DELETE …/dependencies/{dependencyId}` removes a link (204). `PATCH …/dependencies/{dependencyId} { type, expectedType }` changes its type atomically and preserves its ID (200); a stale type is 409 `DEPENDENCY_CHANGED`, and an existing target relationship is 409 `DEPENDENCY_EXISTS` with both links preserved. A related link can be converted from either end; the current issue waits when converted to `blockedBy`. A cycle is 400 `DEPENDENCY_CYCLE`, a duplicate 409 `DEPENDENCY_EXISTS`. Concurrent dependency graph changes can return 409 `DEPENDENCY_GRAPH_CHANGED`; reload and retry the whole operation, including a plan if the write belongs to one. All relationship writes, including both removal endpoints, share this protection so duplicate checks, activity and release notifications use a consistent relationship type and direction. Plans take the graph guard before their first row during rehearsal, execution and undo. Issue status/project changes, status events and deletion take the same guard before writing issue rows, so concurrent releases cannot leave unblocked work idle; automatic parent/stage completion retains it. Creation, parent/stage changes and restoration share this protection; independent creates without waits lock without changing the graph revision and do not conflict with each other; restoring a deleted issue can be rejected with `DEPENDENCY_CYCLE`. Issue detail carries `subtasks`, `blockedBy`, `blocks`, `relatedTo`, `blockers` and `hiddenBlockerCount`; list items `subtaskCount` and `blockedCount`. Finishing an issue releases the issues waiting on it (`dependency_released` notice) and tells the parent's owner when a stage or all sub-issues finish (`batch_done`, and the `onSubtasksFinished` trigger); the parent's status does not move on its own.
105
81
  - Comments (`/api/projects/issues/{issueId}/comments`, `/api/projects/comments/{commentId}…`): posting, replying and resolving need
106
82
  `pm.issues` `comment`; only the author edits a comment (403 otherwise); deleting another's needs
107
83
  `moderate-comments`. Content is 1 to 200,000 characters (400 `INVALID_COMMENT`); a reply's parent must be a comment of the
@@ -119,7 +95,7 @@ approve|reject` (403 `NOT_APPROVER`) and `/withdraw` (403 `NOT_REQUESTER`) decid
119
95
 
120
96
  ## Verification
121
97
 
122
- Work handlers receive the original optional `actor` on `onOwnerChanged`, `onUnblocked` and `onSubtasksFinished`, including `actor.trace.runId` when supplied. Status rule conditions and entry actions receive optional `sourceActor` for the original cause (including its full trace); `actor` remains the identity used by the workflow for permissions, so event moves still use `system`. For ordinary moves, `sourceActor` equals `actor`. Use `sourceActor` to attribute work started by a rule, and pass the real actor when firing workflow events; omitted event actors default to the system.
98
+ Work handlers receive the original optional `actor` on `onOwnerChanged`, `onUnblocked` and `onSubtasksFinished`, including `actor.trace.runId` when supplied. A status event moves as the system but records the actor it was fired with; pass the real actor when firing one, since an omitted actor defaults to the system.
123
99
 
124
100
  `GET /api/projects/me` as a signed-in user returns 200 with `permissions`; `POST /api/projects/issues` with a `title` returns 201
125
101
  with an identifier such as `PM-1`.
@@ -1,3 +0,0 @@
1
- /** Reports the editor's leave decision to the host; only dirty or pending editors subscribe to page unload. */
2
- export declare function useWorkflowLeaveGuard(dirty: boolean, pending: boolean, message: string): () => void;
3
- //# sourceMappingURL=use-workflow-leave-guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-workflow-leave-guard.d.ts","sourceRoot":"","sources":["../../../client/hooks/use-workflow-leave-guard.ts"],"names":[],"mappings":"AAGA,+GAA+G;AAC/G,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,IAAI,CAwBZ"}
@@ -1,31 +0,0 @@
1
- import { useNavigationGuard } from '@nocobase/app-client';
2
- import { useCallback, useLayoutEffect, useRef } from 'react';
3
- /** Reports the editor's leave decision to the host; only dirty or pending editors subscribe to page unload. */
4
- export function useWorkflowLeaveGuard(dirty, pending, message) {
5
- const stateRef = useRef({ dirty, pending, message });
6
- useLayoutEffect(() => {
7
- stateRef.current = { dirty, pending, message };
8
- }, [dirty, pending, message]);
9
- useNavigationGuard(() => {
10
- const state = stateRef.current;
11
- return !state.pending && (!state.dirty || window.confirm(state.message));
12
- });
13
- const active = dirty || pending;
14
- useLayoutEffect(() => {
15
- if (!active)
16
- return;
17
- const onBeforeUnload = (event) => {
18
- const state = stateRef.current;
19
- if (!state.dirty && !state.pending)
20
- return;
21
- event.preventDefault();
22
- event.returnValue = '';
23
- };
24
- window.addEventListener('beforeunload', onBeforeUnload);
25
- return () => window.removeEventListener('beforeunload', onBeforeUnload);
26
- }, [active]);
27
- return useCallback(() => {
28
- stateRef.current = { ...stateRef.current, dirty: false, pending: false };
29
- }, []);
30
- }
31
- //# sourceMappingURL=use-workflow-leave-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-workflow-leave-guard.js","sourceRoot":"","sources":["../../../client/hooks/use-workflow-leave-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE7D,+GAA+G;AAC/G,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,OAAgB,EAChB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,eAAe,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9B,kBAAkB,CAAC,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,CAAC;IAChC,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,cAAc,GAAG,CAAC,KAAwB,EAAQ,EAAE;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO;YAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,QAAQ,CAAC,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { ReactElement } from 'react';
2
- import type { StatusRuleEditorProps, StatusRuleSummaryProps } from './status-rule-types.js';
3
- /** The items, each with its label and whether it is required. A checklist keeps at least one; remove the rule instead. */
4
- export declare function ChecklistEditor({ config, onChange, }: StatusRuleEditorProps): ReactElement;
5
- export declare function ChecklistSummary({ config, }: StatusRuleSummaryProps): ReactElement;
6
- export declare function NotifyOwnerEditor({ config, onChange, idPrefix, }: StatusRuleEditorProps): ReactElement;
7
- export declare function NotifyOwnerSummary({ config, }: StatusRuleSummaryProps): ReactElement;
8
- export declare function SubtasksDoneSummary(): ReactElement;
9
- export declare function BlockersDoneSummary(): ReactElement;
10
- /** A `startOption` rule's label and hint; a keyed one (a template's) shows in the reader's words until edited. */
11
- export declare function StartOptionEditor({ config, onChange, idPrefix, }: StatusRuleEditorProps): ReactElement;
12
- export declare function StartOptionSummary({ config, }: StatusRuleSummaryProps): ReactElement;
13
- //# sourceMappingURL=built-in-rule-editors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"built-in-rule-editors.d.ts","sourceRoot":"","sources":["../../../client/lib/built-in-rule-editors.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAc1C,OAAO,KAAK,EAEV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAahC,0HAA0H;AAC1H,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,GACT,EAAE,qBAAqB,GAAG,YAAY,CAqEtC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,GACP,EAAE,sBAAsB,GAAG,YAAY,CAWvC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE,qBAAqB,GAAG,YAAY,CAoBtC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,GACP,EAAE,sBAAsB,GAAG,YAAY,CAavC;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAGlD;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAGlD;AAED,kHAAkH;AAClH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE,qBAAqB,GAAG,YAAY,CAmCtC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,GACP,EAAE,sBAAsB,GAAG,YAAY,CAavC"}
@@ -1,86 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /** The settings editors and summaries of this plugin's own status rule types (`built-in-rule-types.ts`). */
3
- import { useTranslation } from '@nocobase/i18n/client';
4
- import { PlusIcon, Trash2Icon } from 'lucide-react';
5
- import { CHECKLIST_ITEMS_MAX, CHECKLIST_LABEL_MAX, NOTIFY_MESSAGE_MAX, START_LABEL_MAX, messageText, } from '../../shared/workflows.js';
6
- import { PmExpandableTextarea } from '../components/pm-expandable-textarea.js';
7
- import { Button } from '../components/ui/button.js';
8
- import { Checkbox } from '../components/ui/checkbox.js';
9
- import { Input } from '../components/ui/input.js';
10
- const itemsOf = (config) => Array.isArray(config.items)
11
- ? config.items
12
- : [];
13
- /** A key for a new checklist item: `item_1`, `item_2`… whichever is free; it stays when the label changes. */
14
- function newItemKey(items) {
15
- const taken = new Set(items.map((item) => item.key));
16
- for (let n = 1;; n += 1)
17
- if (!taken.has(`item_${n}`))
18
- return `item_${n}`;
19
- }
20
- /** The items, each with its label and whether it is required. A checklist keeps at least one; remove the rule instead. */
21
- export function ChecklistEditor({ config, onChange, }) {
22
- const { t } = useTranslation();
23
- const items = itemsOf(config);
24
- const setItems = (next) => onChange({ items: next });
25
- const update = (key, patch) => setItems(items.map((entry) => entry.key === key ? { ...entry, ...patch } : entry));
26
- return (_jsxs("ul", { className: 'space-y-2', children: [items.map((item, index) => (_jsxs("li", { className: 'flex min-w-0 items-center gap-2', children: [_jsx(Input, { value: item.label, maxLength: CHECKLIST_LABEL_MAX, placeholder: t('workflows.rules.itemPlaceholder'), "aria-label": t('workflows.rules.itemLabel', {
27
- position: index + 1,
28
- }), className: 'h-8 min-w-0 flex-1', onChange: (event) => update(item.key, { label: event.target.value }) }), _jsxs("label", { className: 'flex shrink-0 items-center gap-1.5 text-xs', children: [_jsx(Checkbox, { checked: item.required, onCheckedChange: (checked) => update(item.key, { required: checked === true }) }), t('workflows.rules.required')] }), _jsx(Button, { variant: 'ghost', size: 'icon-sm', disabled: items.length <= 1, "aria-label": t('workflows.rules.removeItem', {
29
- position: index + 1,
30
- }), onClick: () => setItems(items.filter((entry) => entry.key !== item.key)), children: _jsx(Trash2Icon, {}) })] }, item.key))), _jsx("li", { children: _jsxs(Button, { variant: 'outline', size: 'sm', disabled: items.length >= CHECKLIST_ITEMS_MAX, onClick: () => setItems([
31
- ...items,
32
- { key: newItemKey(items), label: '', required: true },
33
- ]), children: [_jsx(PlusIcon, { "data-icon": 'inline-start' }), t('workflows.rules.addItem')] }) })] }));
34
- }
35
- export function ChecklistSummary({ config, }) {
36
- const { t } = useTranslation();
37
- const items = itemsOf(config);
38
- return (_jsx(_Fragment, { children: t('workflows.ruleChecklistShort', {
39
- count: items.length,
40
- required: items.filter((item) => item.required).length,
41
- }) }));
42
- }
43
- export function NotifyOwnerEditor({ config, onChange, idPrefix, }) {
44
- const { t } = useTranslation();
45
- return (_jsxs("div", { className: 'space-y-1.5', children: [_jsx("label", { htmlFor: `${idPrefix}-message`, className: 'text-sm font-medium', children: t('workflows.rules.message') }), _jsx(PmExpandableTextarea, { id: `${idPrefix}-message`,
46
- // A keyed message (a template's) shows in the reader's words; editing it makes it plain text.
47
- value: messageText(config.message, t) ?? '', maxLength: NOTIFY_MESSAGE_MAX, rows: 2, placeholder: t('workflows.rules.messagePlaceholder'), onChange: (event) => onChange(event.target.value ? { message: event.target.value } : {}) })] }));
48
- }
49
- export function NotifyOwnerSummary({ config, }) {
50
- const { t } = useTranslation();
51
- const message = messageText(config.message, t);
52
- return (_jsx(_Fragment, { children: message
53
- ? t('workflows.ruleNotifyOwnerWith', {
54
- message,
55
- interpolation: { escapeValue: false },
56
- })
57
- : t('workflows.ruleNotifyOwnerShort') }));
58
- }
59
- export function SubtasksDoneSummary() {
60
- const { t } = useTranslation();
61
- return _jsx(_Fragment, { children: t('workflows.ruleSubtasksDoneShort') });
62
- }
63
- export function BlockersDoneSummary() {
64
- const { t } = useTranslation();
65
- return _jsx(_Fragment, { children: t('workflows.ruleBlockersDoneShort') });
66
- }
67
- /** A `startOption` rule's label and hint; a keyed one (a template's) shows in the reader's words until edited. */
68
- export function StartOptionEditor({ config, onChange, idPrefix, }) {
69
- const { t } = useTranslation();
70
- const set = (field, value) => {
71
- const { [field]: _dropped, ...rest } = config;
72
- onChange(value ? { ...rest, [field]: value } : rest);
73
- };
74
- return (_jsxs("div", { className: 'space-y-3', children: [_jsxs("div", { className: 'space-y-1.5', children: [_jsx("label", { htmlFor: `${idPrefix}-label`, className: 'text-sm font-medium', children: t('workflows.rules.startLabel') }), _jsx(Input, { id: `${idPrefix}-label`, value: messageText(config.label, t) ?? '', maxLength: START_LABEL_MAX, placeholder: t('workflows.rules.startLabelPlaceholder'), onChange: (event) => set('label', event.target.value) })] }), _jsxs("div", { className: 'space-y-1.5', children: [_jsx("label", { htmlFor: `${idPrefix}-hint`, className: 'text-sm font-medium', children: t('workflows.rules.startHint') }), _jsx(PmExpandableTextarea, { id: `${idPrefix}-hint`, value: messageText(config.hint, t) ?? '', maxLength: NOTIFY_MESSAGE_MAX, rows: 2, placeholder: t('workflows.rules.startHintPlaceholder'), onChange: (event) => set('hint', event.target.value) })] })] }));
75
- }
76
- export function StartOptionSummary({ config, }) {
77
- const { t } = useTranslation();
78
- const label = messageText(config.label, t);
79
- return (_jsx(_Fragment, { children: label
80
- ? t('workflows.ruleStartOptionWith', {
81
- label,
82
- interpolation: { escapeValue: false },
83
- })
84
- : t('workflows.ruleStartOptionShort') }));
85
- }
86
- //# sourceMappingURL=built-in-rule-editors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"built-in-rule-editors.js","sourceRoot":"","sources":["../../../client/lib/built-in-rule-editors.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { StatusRuleTypeUI } from './status-rule-types.js';
2
- export declare const BUILT_IN_STATUS_RULE_TYPES: readonly StatusRuleTypeUI[];
3
- //# sourceMappingURL=built-in-rule-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"built-in-rule-types.d.ts","sourceRoot":"","sources":["../../../client/lib/built-in-rule-types.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,eAAO,MAAM,0BAA0B,EAAE,SAAS,gBAAgB,EAmDjE,CAAC"}
@@ -1,63 +0,0 @@
1
- /**
2
- * This plugin's own status rule types in the workflow editor, described like the ones other plugins contribute
3
- * (`status-rule-types.ts`), so the editor treats every type the same way. The server's are in
4
- * `server/domains/workflows/built-in-rule-types.ts`; their stored form is unchanged (`subtasksDone` and `blockersDone`
5
- * keep no settings, so they have no `initialConfig`).
6
- */
7
- import { BellIcon, HourglassIcon, ListChecksIcon, ListTreeIcon, SquarePlusIcon, } from 'lucide-react';
8
- import { ACCESS_NAMESPACE } from '../../shared/access.js';
9
- import { BlockersDoneSummary, ChecklistEditor, ChecklistSummary, NotifyOwnerEditor, NotifyOwnerSummary, StartOptionEditor, StartOptionSummary, SubtasksDoneSummary, } from './built-in-rule-editors.js';
10
- const text = (key) => ({ key, ns: ACCESS_NAMESPACE });
11
- export const BUILT_IN_STATUS_RULE_TYPES = [
12
- {
13
- type: 'checklist',
14
- title: text('workflows.rules.checklist'),
15
- hint: text('workflows.rules.checklistHint'),
16
- group: 'action',
17
- Icon: ListChecksIcon,
18
- initialConfig: { items: [{ key: 'item_1', label: '', required: true }] },
19
- Editor: ChecklistEditor,
20
- Summary: ChecklistSummary,
21
- },
22
- {
23
- type: 'notifyOwner',
24
- title: text('workflows.rules.notifyOwner'),
25
- hint: text('workflows.rules.notifyOwnerHint'),
26
- group: 'action',
27
- Icon: BellIcon,
28
- initialConfig: {},
29
- Editor: NotifyOwnerEditor,
30
- Summary: NotifyOwnerSummary,
31
- },
32
- {
33
- type: 'subtasksDone',
34
- title: text('workflows.rules.subtasksDone'),
35
- hint: text('workflows.rules.subtasksDoneHint'),
36
- // A closed status never waits, so the rule is not offered there.
37
- categories: ['unstarted', 'started', 'done'],
38
- group: 'condition',
39
- Icon: ListTreeIcon,
40
- Summary: SubtasksDoneSummary,
41
- },
42
- {
43
- type: 'blockersDone',
44
- title: text('workflows.rules.blockersDone'),
45
- hint: text('workflows.rules.blockersDoneHint'),
46
- group: 'condition',
47
- Icon: HourglassIcon,
48
- Summary: BlockersDoneSummary,
49
- },
50
- {
51
- type: 'startOption',
52
- title: text('workflows.rules.startOption'),
53
- hint: text('workflows.rules.startOptionHint'),
54
- // A new issue cannot be created finished.
55
- categories: ['unstarted', 'started'],
56
- group: 'condition',
57
- Icon: SquarePlusIcon,
58
- initialConfig: {},
59
- Editor: StartOptionEditor,
60
- Summary: StartOptionSummary,
61
- },
62
- ];
63
- //# sourceMappingURL=built-in-rule-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"built-in-rule-types.js","sourceRoot":"","sources":["../../../client/lib/built-in-rule-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,0BAA0B,GAAgC;IACrE;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,+BAA+B,CAAC;QAC3C,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,cAAc;QACpB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;QACxE,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,gBAAgB;KAC1B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,IAAI,CAAC,6BAA6B,CAAC;QAC1C,IAAI,EAAE,IAAI,CAAC,iCAAiC,CAAC;QAC7C,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,IAAI,CAAC,8BAA8B,CAAC;QAC3C,IAAI,EAAE,IAAI,CAAC,kCAAkC,CAAC;QAC9C,iEAAiE;QACjE,UAAU,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;QAC5C,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,IAAI,CAAC,8BAA8B,CAAC;QAC3C,IAAI,EAAE,IAAI,CAAC,kCAAkC,CAAC;QAC9C,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,IAAI,CAAC,6BAA6B,CAAC;QAC1C,IAAI,EAAE,IAAI,CAAC,iCAAiC,CAAC;QAC7C,0CAA0C;QAC1C,UAAU,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;QACpC,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,cAAc;QACpB,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,kBAAkB;KAC5B;CACF,CAAC"}