@rytass/bpm-core-react 0.17.9 → 0.18.1

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 (275) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +8 -0
  3. package/dist/chunks/FormBuilderView-CHaAQL5v.cjs +3 -0
  4. package/dist/chunks/FormBuilderView-CHaAQL5v.cjs.map +1 -0
  5. package/dist/chunks/{FormBuilderView-ClLnQ1e_.js → FormBuilderView-vQfVc08Z.js} +493 -437
  6. package/dist/chunks/FormBuilderView-vQfVc08Z.js.map +1 -0
  7. package/dist/chunks/{FormRendererView-BsTwZkqU.js → FormRendererView-CTLlG13b.js} +300 -189
  8. package/dist/chunks/FormRendererView-CTLlG13b.js.map +1 -0
  9. package/dist/chunks/FormRendererView-ChmM_4Yc.cjs +4 -0
  10. package/dist/chunks/FormRendererView-ChmM_4Yc.cjs.map +1 -0
  11. package/dist/chunks/admin-pickers-BjbkBpSJ.cjs +2 -0
  12. package/dist/chunks/admin-pickers-BjbkBpSJ.cjs.map +1 -0
  13. package/dist/chunks/{admin-pickers-Djq3h-UR.js → admin-pickers-DfGxsjpp.js} +42 -42
  14. package/dist/chunks/admin-pickers-DfGxsjpp.js.map +1 -0
  15. package/dist/chunks/{approval-instance-list-page-CPXMP3PL.js → approval-instance-list-page-BnI4t5mD.js} +7 -8
  16. package/dist/chunks/{approval-instance-list-page-CPXMP3PL.js.map → approval-instance-list-page-BnI4t5mD.js.map} +1 -1
  17. package/dist/chunks/{approval-instance-list-page-ax0pm8bt.cjs → approval-instance-list-page-fqvmkBlg.cjs} +2 -2
  18. package/dist/chunks/{approval-instance-list-page-ax0pm8bt.cjs.map → approval-instance-list-page-fqvmkBlg.cjs.map} +1 -1
  19. package/dist/chunks/approver-filled-form-B4zPg9kz.cjs +2 -0
  20. package/dist/chunks/approver-filled-form-B4zPg9kz.cjs.map +1 -0
  21. package/dist/chunks/approver-filled-form-Bgazhbvd.js +112 -0
  22. package/dist/chunks/approver-filled-form-Bgazhbvd.js.map +1 -0
  23. package/dist/chunks/auth-provider-4BeCw7cI.cjs.map +1 -1
  24. package/dist/chunks/{auth-provider-B5oPmvk2.js → auth-provider-C2b-5mGt.js} +2 -3
  25. package/dist/chunks/{auth-provider-B5oPmvk2.js.map → auth-provider-C2b-5mGt.js.map} +1 -1
  26. package/dist/chunks/{bpm-form-field-Cao0rMol.js → bpm-form-field-9B-Det0u.js} +2 -3
  27. package/dist/chunks/{bpm-form-field-Cao0rMol.js.map → bpm-form-field-9B-Det0u.js.map} +1 -1
  28. package/dist/chunks/bpm-form-field-Bc6k4ZEO.cjs.map +1 -1
  29. package/dist/chunks/{categories-riC33J_j.js → categories-BAdxjNSA.js} +14 -15
  30. package/dist/chunks/{categories-riC33J_j.js.map → categories-BAdxjNSA.js.map} +1 -1
  31. package/dist/chunks/{categories-AxxhqjLZ.cjs → categories-DQUtVEiV.cjs} +2 -2
  32. package/dist/chunks/{categories-AxxhqjLZ.cjs.map → categories-DQUtVEiV.cjs.map} +1 -1
  33. package/dist/chunks/{compose-jnvnnVfN.js → compose-D9ipJpF_.js} +131 -148
  34. package/dist/chunks/compose-D9ipJpF_.js.map +1 -0
  35. package/dist/chunks/compose-DtfX8DQ9.cjs +2 -0
  36. package/dist/chunks/compose-DtfX8DQ9.cjs.map +1 -0
  37. package/dist/chunks/{dashboard-page-DdBvV6YI.js → dashboard-page-BoqNhjT_.js} +5 -6
  38. package/dist/chunks/{dashboard-page-DdBvV6YI.js.map → dashboard-page-BoqNhjT_.js.map} +1 -1
  39. package/dist/chunks/{dashboard-page-BWQBSGDq.cjs → dashboard-page-D7YJ3udk.cjs} +2 -2
  40. package/dist/chunks/{dashboard-page-BWQBSGDq.cjs.map → dashboard-page-D7YJ3udk.cjs.map} +1 -1
  41. package/dist/chunks/{delegations-MxF3uJGW.js → delegations-BfhCDz5e.js} +15 -16
  42. package/dist/chunks/{delegations-MxF3uJGW.js.map → delegations-BfhCDz5e.js.map} +1 -1
  43. package/dist/chunks/{delegations-Ckf03icM.cjs → delegations-BmFGcuhA.cjs} +2 -2
  44. package/dist/chunks/{delegations-Ckf03icM.cjs.map → delegations-BmFGcuhA.cjs.map} +1 -1
  45. package/dist/chunks/{delegations-V9HIe3_P.cjs → delegations-CcS0SHbf.cjs} +2 -2
  46. package/dist/chunks/{delegations-V9HIe3_P.cjs.map → delegations-CcS0SHbf.cjs.map} +1 -1
  47. package/dist/chunks/{delegations-xUt1tj8d.js → delegations-DBh5TT6G.js} +16 -17
  48. package/dist/chunks/{delegations-xUt1tj8d.js.map → delegations-DBh5TT6G.js.map} +1 -1
  49. package/dist/chunks/designer-Df79YzUn.cjs +65 -0
  50. package/dist/chunks/designer-Df79YzUn.cjs.map +1 -0
  51. package/dist/chunks/{designer-B8Gvew_k.js → designer-ubnZbP-A.js} +1779 -1360
  52. package/dist/chunks/designer-ubnZbP-A.js.map +1 -0
  53. package/dist/chunks/detail-BBC9kqXd.cjs +5 -0
  54. package/dist/chunks/detail-BBC9kqXd.cjs.map +1 -0
  55. package/dist/chunks/detail-C6XKZjlF.js +2665 -0
  56. package/dist/chunks/detail-C6XKZjlF.js.map +1 -0
  57. package/dist/chunks/{format-date-time-CB-LxzqT.js → format-date-time-B0LdmWg4.js} +2 -3
  58. package/dist/chunks/{format-date-time-CB-LxzqT.js.map → format-date-time-B0LdmWg4.js.map} +1 -1
  59. package/dist/chunks/format-date-time-D-cx5M8z.cjs.map +1 -1
  60. package/dist/chunks/{format-member-label-DudVI55w.js → format-member-label-C73FuP-d.js} +2 -3
  61. package/dist/chunks/{format-member-label-DudVI55w.js.map → format-member-label-C73FuP-d.js.map} +1 -1
  62. package/dist/chunks/format-member-label-t7ANTF62.cjs.map +1 -1
  63. package/dist/chunks/language-provider-Bdnx3Gxl.cjs.map +1 -1
  64. package/dist/chunks/{language-provider-B3cEbLe4.js → language-provider-phkWOapf.js} +2 -3
  65. package/dist/chunks/{language-provider-B3cEbLe4.js.map → language-provider-phkWOapf.js.map} +1 -1
  66. package/dist/chunks/{login-C6qlTC6F.js → login-D6cc3bo7.js} +4 -5
  67. package/dist/chunks/{login-C6qlTC6F.js.map → login-D6cc3bo7.js.map} +1 -1
  68. package/dist/chunks/{login-AtVxZBsC.cjs → login-uvVcltrS.cjs} +2 -2
  69. package/dist/chunks/{login-AtVxZBsC.cjs.map → login-uvVcltrS.cjs.map} +1 -1
  70. package/dist/chunks/notifications-Bc4mgSds.cjs.map +1 -1
  71. package/dist/chunks/{notifications-DJ5wzCye.js → notifications-Cvme5Qbl.js} +2 -3
  72. package/dist/chunks/{notifications-DJ5wzCye.js.map → notifications-Cvme5Qbl.js.map} +1 -1
  73. package/dist/chunks/orgs-B_2J2tLX.cjs +2 -0
  74. package/dist/chunks/{orgs-BeeDDWL1.cjs.map → orgs-B_2J2tLX.cjs.map} +1 -1
  75. package/dist/chunks/{orgs-8hje_l2n.js → orgs-DqxMds26.js} +48 -49
  76. package/dist/chunks/{orgs-8hje_l2n.js.map → orgs-DqxMds26.js.map} +1 -1
  77. package/dist/chunks/{providers-B_d5tbCL.js → providers-BbCs23sk.js} +21 -25
  78. package/dist/chunks/{providers-B_d5tbCL.js.map → providers-BbCs23sk.js.map} +1 -1
  79. package/dist/chunks/{providers-chuJvMgv.cjs → providers-D_KAgOOu.cjs} +2 -2
  80. package/dist/chunks/{providers-chuJvMgv.cjs.map → providers-D_KAgOOu.cjs.map} +1 -1
  81. package/dist/chunks/router-adapter--gYs13E8.cjs.map +1 -1
  82. package/dist/chunks/{router-adapter-DftlFTOd.js → router-adapter-CkxCyzf5.js} +2 -3
  83. package/dist/chunks/{router-adapter-DftlFTOd.js.map → router-adapter-CkxCyzf5.js.map} +1 -1
  84. package/dist/chunks/{routes-config-yZbESPlw.js → routes-config-BcNaWJWJ.js} +2 -3
  85. package/dist/chunks/{routes-config-yZbESPlw.js.map → routes-config-BcNaWJWJ.js.map} +1 -1
  86. package/dist/chunks/routes-config-C1j_vFKo.cjs.map +1 -1
  87. package/dist/chunks/task-decision-3d17ZvZE.js +29 -0
  88. package/dist/chunks/task-decision-3d17ZvZE.js.map +1 -0
  89. package/dist/chunks/task-decision-CqZ4WQOC.cjs +2 -0
  90. package/dist/chunks/task-decision-CqZ4WQOC.cjs.map +1 -0
  91. package/dist/chunks/{use-bpm-member-D57LKe_u.js → use-bpm-member-BPzcNU1g.js} +3 -4
  92. package/dist/chunks/{use-bpm-member-D57LKe_u.js.map → use-bpm-member-BPzcNU1g.js.map} +1 -1
  93. package/dist/chunks/use-bpm-member-DpNAQtNC.cjs.map +1 -1
  94. package/dist/chunks/{users-Pl6hY5Y5.js → users-BBtiZ9QQ.js} +22 -25
  95. package/dist/chunks/{users-Pl6hY5Y5.js.map → users-BBtiZ9QQ.js.map} +1 -1
  96. package/dist/chunks/{users-O2L_M3BK.cjs → users-EqSzDhuj.cjs} +2 -2
  97. package/dist/chunks/{users-O2L_M3BK.cjs.map → users-EqSzDhuj.cjs.map} +1 -1
  98. package/dist/components/admin-picker-options.d.cts +11 -0
  99. package/dist/components/admin-picker-options.d.ts +11 -0
  100. package/dist/components/admin-pickers.d.cts +2 -11
  101. package/dist/components/admin-pickers.d.ts +2 -11
  102. package/dist/index.cjs +1 -1
  103. package/dist/index.cjs.map +1 -1
  104. package/dist/index.js +17 -19
  105. package/dist/index.js.map +1 -1
  106. package/dist/lib/task-decision.d.cts +16 -0
  107. package/dist/lib/task-decision.d.ts +16 -0
  108. package/dist/lib/use-org-unit-names.d.cts +10 -0
  109. package/dist/lib/use-org-unit-names.d.ts +10 -0
  110. package/dist/next/index.cjs +1 -1
  111. package/dist/next/index.cjs.map +1 -1
  112. package/dist/next/index.js +7 -8
  113. package/dist/next/index.js.map +1 -1
  114. package/dist/next/workflow-chat-route.cjs +19 -1
  115. package/dist/next/workflow-chat-route.cjs.map +1 -1
  116. package/dist/next/workflow-chat-route.js +2 -3
  117. package/dist/next/workflow-chat-route.js.map +1 -1
  118. package/dist/pages/admin/delegations/index.cjs +1 -1
  119. package/dist/pages/admin/delegations/index.cjs.map +1 -1
  120. package/dist/pages/admin/delegations/index.js +2 -3
  121. package/dist/pages/admin/orgs/index.cjs +1 -1
  122. package/dist/pages/admin/orgs/index.cjs.map +1 -1
  123. package/dist/pages/admin/orgs/index.js +2 -3
  124. package/dist/pages/admin/users/index.cjs +1 -1
  125. package/dist/pages/admin/users/index.cjs.map +1 -1
  126. package/dist/pages/admin/users/index.js +2 -3
  127. package/dist/pages/admin/webhook-endpoints/index.cjs.map +1 -1
  128. package/dist/pages/admin/webhook-endpoints/index.js +1 -2
  129. package/dist/pages/cc/index.cjs.map +1 -1
  130. package/dist/pages/cc/index.js +1 -2
  131. package/dist/pages/dashboard/index.cjs.map +1 -1
  132. package/dist/pages/dashboard/index.js +1 -2
  133. package/dist/pages/delegations/index.cjs +1 -1
  134. package/dist/pages/delegations/index.cjs.map +1 -1
  135. package/dist/pages/delegations/index.js +2 -3
  136. package/dist/pages/inbox/index.cjs.map +1 -1
  137. package/dist/pages/inbox/index.js +1 -2
  138. package/dist/pages/instances/detail/index.cjs +1 -1
  139. package/dist/pages/instances/detail/index.cjs.map +1 -1
  140. package/dist/pages/instances/detail/index.js +2 -3
  141. package/dist/pages/instances/new/index.cjs.map +1 -1
  142. package/dist/pages/instances/new/index.js +1 -2
  143. package/dist/pages/login/index.cjs +1 -1
  144. package/dist/pages/login/index.cjs.map +1 -1
  145. package/dist/pages/login/index.js +2 -3
  146. package/dist/pages/root/index.cjs.map +1 -1
  147. package/dist/pages/root/index.js +1 -2
  148. package/dist/pages/search/index.cjs.map +1 -1
  149. package/dist/pages/search/index.js +1 -2
  150. package/dist/pages/sent/index.cjs.map +1 -1
  151. package/dist/pages/sent/index.js +1 -2
  152. package/dist/pages/settings/notifications/index.cjs.map +1 -1
  153. package/dist/pages/settings/notifications/index.js +2 -3
  154. package/dist/pages/templates/categories/index.cjs +1 -1
  155. package/dist/pages/templates/categories/index.cjs.map +1 -1
  156. package/dist/pages/templates/categories/index.js +2 -3
  157. package/dist/pages/templates/compose/index.cjs +1 -1
  158. package/dist/pages/templates/compose/index.cjs.map +1 -1
  159. package/dist/pages/templates/compose/index.js +2 -3
  160. package/dist/pages/templates/designer/index.cjs +1 -1
  161. package/dist/pages/templates/designer/index.cjs.map +1 -1
  162. package/dist/pages/templates/designer/index.js +2 -3
  163. package/dist/pages/templates/index.cjs.map +1 -1
  164. package/dist/pages/templates/index.js +1 -2
  165. package/dist/pages/templates/versions/index.cjs.map +1 -1
  166. package/dist/pages/templates/versions/index.js +1 -2
  167. package/dist/views/admin/delegations/index.cjs +1 -1
  168. package/dist/views/admin/delegations/index.js +1 -1
  169. package/dist/views/admin/index.cjs +1 -1
  170. package/dist/views/admin/index.js +3 -3
  171. package/dist/views/admin/orgs/index.cjs +1 -1
  172. package/dist/views/admin/orgs/index.js +1 -1
  173. package/dist/views/admin/users/index.cjs +1 -1
  174. package/dist/views/admin/users/index.js +1 -1
  175. package/dist/views/admin/webhook-endpoints/index.cjs +1 -1
  176. package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -1
  177. package/dist/views/admin/webhook-endpoints/index.js +52 -53
  178. package/dist/views/admin/webhook-endpoints/index.js.map +1 -1
  179. package/dist/views/cc/index.cjs +1 -1
  180. package/dist/views/cc/index.cjs.map +1 -1
  181. package/dist/views/cc/index.js +2 -3
  182. package/dist/views/dashboard/index.cjs +1 -1
  183. package/dist/views/dashboard/index.cjs.map +1 -1
  184. package/dist/views/dashboard/index.js +2 -3
  185. package/dist/views/delegations/index.cjs +1 -1
  186. package/dist/views/delegations/index.js +1 -1
  187. package/dist/views/forms/builder/index.cjs +1 -1
  188. package/dist/views/forms/builder/index.js +1 -1
  189. package/dist/views/forms/renderer/index.cjs +1 -1
  190. package/dist/views/forms/renderer/index.js +1 -1
  191. package/dist/views/forms/renderer/org-unit-field-options.d.cts +44 -0
  192. package/dist/views/forms/renderer/org-unit-field-options.d.ts +44 -0
  193. package/dist/views/forms/renderer/org-unit-field.d.cts +23 -0
  194. package/dist/views/forms/renderer/org-unit-field.d.ts +23 -0
  195. package/dist/views/inbox/index.cjs +1 -1
  196. package/dist/views/inbox/index.cjs.map +1 -1
  197. package/dist/views/inbox/index.js +133 -137
  198. package/dist/views/inbox/index.js.map +1 -1
  199. package/dist/views/instances/approver-filled-form.d.cts +9 -2
  200. package/dist/views/instances/approver-filled-form.d.ts +9 -2
  201. package/dist/views/instances/detail/index.cjs +1 -1
  202. package/dist/views/instances/detail/index.js +1 -1
  203. package/dist/views/instances/detail/sections/InstanceHistorySection.d.cts +8 -1
  204. package/dist/views/instances/detail/sections/InstanceHistorySection.d.ts +8 -1
  205. package/dist/views/instances/detail/sections/container-helpers.d.cts +0 -1
  206. package/dist/views/instances/detail/sections/container-helpers.d.ts +0 -1
  207. package/dist/views/instances/detail/sections/shared.d.cts +2 -2
  208. package/dist/views/instances/detail/sections/shared.d.ts +2 -2
  209. package/dist/views/instances/new/index.cjs +1 -1
  210. package/dist/views/instances/new/index.cjs.map +1 -1
  211. package/dist/views/instances/new/index.js +24 -21
  212. package/dist/views/instances/new/index.js.map +1 -1
  213. package/dist/views/login/index.cjs +1 -1
  214. package/dist/views/login/index.js +1 -1
  215. package/dist/views/search/index.cjs +1 -1
  216. package/dist/views/search/index.cjs.map +1 -1
  217. package/dist/views/search/index.js +2 -3
  218. package/dist/views/sent/index.cjs +1 -1
  219. package/dist/views/sent/index.cjs.map +1 -1
  220. package/dist/views/sent/index.js +2 -3
  221. package/dist/views/settings/index.js +1 -1
  222. package/dist/views/settings/notifications/index.js +1 -1
  223. package/dist/views/templates/categories/index.cjs +1 -1
  224. package/dist/views/templates/categories/index.js +1 -1
  225. package/dist/views/templates/compose/index.cjs +1 -1
  226. package/dist/views/templates/compose/index.js +1 -1
  227. package/dist/views/templates/designer/approver-resolver-model.d.cts +211 -0
  228. package/dist/views/templates/designer/approver-resolver-model.d.ts +211 -0
  229. package/dist/views/templates/designer/dry-run-assignee-label.d.cts +2 -0
  230. package/dist/views/templates/designer/dry-run-assignee-label.d.ts +2 -0
  231. package/dist/views/templates/designer/dry-run-sample-data.d.cts +6 -0
  232. package/dist/views/templates/designer/dry-run-sample-data.d.ts +6 -0
  233. package/dist/views/templates/designer/dynamic-form-resolver-options.d.cts +25 -0
  234. package/dist/views/templates/designer/dynamic-form-resolver-options.d.ts +25 -0
  235. package/dist/views/templates/designer/index.cjs +1 -1
  236. package/dist/views/templates/designer/index.js +1 -1
  237. package/dist/views/templates/designer/node-actor-resolver-options.d.cts +38 -0
  238. package/dist/views/templates/designer/node-actor-resolver-options.d.ts +38 -0
  239. package/dist/views/templates/index.cjs +1 -1
  240. package/dist/views/templates/index.cjs.map +1 -1
  241. package/dist/views/templates/index.js +50 -51
  242. package/dist/views/templates/index.js.map +1 -1
  243. package/dist/views/templates/versions/index.cjs +1 -1
  244. package/dist/views/templates/versions/index.cjs.map +1 -1
  245. package/dist/views/templates/versions/index.js +7 -8
  246. package/dist/views/templates/versions/index.js.map +1 -1
  247. package/package.json +3 -3
  248. package/dist/chunks/FormBuilderView-CUOyS07f.cjs +0 -3
  249. package/dist/chunks/FormBuilderView-CUOyS07f.cjs.map +0 -1
  250. package/dist/chunks/FormBuilderView-ClLnQ1e_.js.map +0 -1
  251. package/dist/chunks/FormRendererView-BsTwZkqU.js.map +0 -1
  252. package/dist/chunks/FormRendererView-GpsE03np.cjs +0 -4
  253. package/dist/chunks/FormRendererView-GpsE03np.cjs.map +0 -1
  254. package/dist/chunks/admin-pickers-BRHk3qKq.cjs +0 -2
  255. package/dist/chunks/admin-pickers-BRHk3qKq.cjs.map +0 -1
  256. package/dist/chunks/admin-pickers-Djq3h-UR.js.map +0 -1
  257. package/dist/chunks/approver-filled-form-D1DmqDVP.cjs +0 -2
  258. package/dist/chunks/approver-filled-form-D1DmqDVP.cjs.map +0 -1
  259. package/dist/chunks/approver-filled-form-DuQGPtNB.js +0 -95
  260. package/dist/chunks/approver-filled-form-DuQGPtNB.js.map +0 -1
  261. package/dist/chunks/compose-Cock_B2Q.cjs +0 -2
  262. package/dist/chunks/compose-Cock_B2Q.cjs.map +0 -1
  263. package/dist/chunks/compose-jnvnnVfN.js.map +0 -1
  264. package/dist/chunks/designer-B8Gvew_k.js.map +0 -1
  265. package/dist/chunks/designer-CAEFV1ve.cjs +0 -65
  266. package/dist/chunks/designer-CAEFV1ve.cjs.map +0 -1
  267. package/dist/chunks/detail-CExpbazF.js +0 -2629
  268. package/dist/chunks/detail-CExpbazF.js.map +0 -1
  269. package/dist/chunks/detail-DIY-L4i-.cjs +0 -2
  270. package/dist/chunks/detail-DIY-L4i-.cjs.map +0 -1
  271. package/dist/chunks/orgs-BeeDDWL1.cjs +0 -2
  272. package/dist/chunks/task-node-label-BF6UllxP.cjs +0 -2
  273. package/dist/chunks/task-node-label-BF6UllxP.cjs.map +0 -1
  274. package/dist/chunks/task-node-label-CWZgOBj0.js +0 -9
  275. package/dist/chunks/task-node-label-CWZgOBj0.js.map +0 -1
@@ -0,0 +1,2665 @@
1
+ "use client";
2
+ import '../style.css';import '../detail.css';/* empty css */
3
+ import { t as e } from "./bpm-form-field-9B-Det0u.js";
4
+ import { t } from "./format-date-time-B0LdmWg4.js";
5
+ import { n } from "./auth-provider-C2b-5mGt.js";
6
+ import { t as r } from "./use-bpm-member-BPzcNU1g.js";
7
+ import { n as i, s as a, t as o } from "./FormRendererView-CTLlG13b.js";
8
+ import { a as s, n as c, o as l, r as u, t as d } from "./task-decision-3d17ZvZE.js";
9
+ import { t as f } from "./format-member-label-C73FuP-d.js";
10
+ import { a as p, c as m, d as h, i as g, l as ee, n as te, o as ne, r as _, s as re, t as ie, u as v } from "./approver-filled-form-Bgazhbvd.js";
11
+ import { Fragment as ae, forwardRef as y, useCallback as oe, useEffect as se, useImperativeHandle as ce, useMemo as b, useRef as le, useState as x } from "react";
12
+ import { AutoComplete as ue, Badge as de, Button as S, Description as C, DescriptionContent as fe, InlineMessage as w, Input as pe, Message as me, Modal as T, PageHeader as he, Section as ge, SectionGroup as _e, Select as ve, Stepper as ye, Table as be, Textarea as xe, Tooltip as Se, Typography as E } from "@mezzanine-ui/react";
13
+ import { Fragment as Ce, jsx as D, jsxs as O } from "react/jsx-runtime";
14
+ import { cancelAdhocDirective as we, cancelApprovalInstance as Te, configureAdhocCompletionNotification as Ee, configureAdhocStageNotification as De, decideTask as Oe, listAdhocDirectives as ke, listAttachments as Ae, listTaskDecisions as k, listWorkflowWebhookDeliveries as je, readApprovalInstance as Me, readAttachmentDownloadUrl as Ne, readAttachmentPreviewUrl as Pe, readInstanceSignatures as Fe, requestAdhocCountersign as Ie, requestAdhocPreApproval as Le, resolveMemberProfiles as Re, resubmitApprovalInstance as ze, retryWorkflowWebhookDelivery as Be, searchMembers as Ve, uploadAttachment as He } from "@rytass/bpm-core-client/workflow";
15
+ import Ue from "@mezzanine-ui/react/ContentHeader";
16
+ import { CheckedIcon as We, ChevronLeftIcon as Ge, ChevronRightIcon as Ke, DangerousOutlineIcon as qe, DownloadIcon as A, FileSearchIcon as Je, NotificationUnreadIcon as Ye, PlusIcon as Xe, RefreshCcwIcon as Ze, ResetIcon as Qe, ShareIcon as $e, UserIcon as et, ZoomInIcon as tt, ZoomOutIcon as j } from "@mezzanine-ui/icons";
17
+ import { readNodeFillableFieldKeys as nt, readRevealedFieldKeys as rt, readTopLevelFieldKey as it, resolveFieldAccess as M } from "@rytass/bpm-core-shared";
18
+ import { buildFormRendererValues as N, focusFormRendererField as at, readFormDataSourceErrorMessage as ot, validateFormRendererValuesInWorker as st } from "@rytass/bpm-core-client/form";
19
+ import { resolveOrgUnitOptions as ct } from "@rytass/bpm-core-client/organization";
20
+ import { Background as lt, Controls as ut, Handle as dt, Position as P, ReactFlow as ft } from "@xyflow/react";
21
+ import * as pt from "dagre";
22
+ import { Document as mt, Page as ht } from "react-pdf";
23
+ import { readSelectableReturnTargetNodeIds as gt } from "@rytass/bpm-core-shared/workflow-graph";
24
+ import { stepClasses as F } from "@mezzanine-ui/core/stepper";
25
+ function _t(e) {
26
+ let [t, n] = x(/* @__PURE__ */ new Map()), r = e.join("\n");
27
+ return se(() => {
28
+ let e = r ? [...new Set(r.split("\n"))].filter((e) => !t.has(e)) : [], a = !1;
29
+ return e.length === 0 ? () => void 0 : (ct(e).then((e) => e.map(i)).catch(() => []).then((t) => {
30
+ a || n((n) => new Map([...n, ...e.map((e) => [e, t.find((t) => t.id.toLowerCase() === e.toLowerCase())?.name ?? null])]));
31
+ }), () => {
32
+ a = !0;
33
+ });
34
+ }, [r, t]), b(() => new Map((r ? [...new Set(r.split("\n"))] : []).flatMap((e) => {
35
+ let n = t.get(e);
36
+ return n === null ? [] : [[e, n ?? "讀取中…"]];
37
+ })), [r, t]);
38
+ }
39
+ var I = {
40
+ root: "bpm_root_ehm7w",
41
+ toolbar: "bpm_toolbar_R-tis",
42
+ pageControls: "bpm_pageControls_jM-rC",
43
+ zoomControls: "bpm_zoomControls_7RAbJ",
44
+ counter: "bpm_counter_ILUsD",
45
+ viewport: "bpm_viewport_DQXms",
46
+ page: "bpm_page_Cv5Rg",
47
+ state: "bpm_state_bpgp3"
48
+ }, vt = 760, yt = 920, bt = 320, xt = 32, St = .75, Ct = 1.75, L = .25;
49
+ function wt({ filename: e, fileUrl: t, onDownload: n }) {
50
+ let r = le(null), [i, a] = x(null), [o, s] = x(1), [c, l] = x(1), [u, d] = x(vt);
51
+ se(() => {
52
+ let e = r.current;
53
+ if (!e || typeof ResizeObserver > "u") return;
54
+ let t = new ResizeObserver((e) => {
55
+ let t = e[0]?.contentRect.width;
56
+ t && d(t);
57
+ });
58
+ return t.observe(e), () => t.disconnect();
59
+ }, []), se(() => {
60
+ a(null), s(1), l(1);
61
+ }, [t]);
62
+ let f = b(() => {
63
+ let e = Math.max(bt, u - xt);
64
+ return Math.round(Math.min(yt, e) * c);
65
+ }, [c, u]), p = oe((e) => {
66
+ a(e.numPages), s(1);
67
+ }, []), m = o > 1, h = i !== null && o < i, g = c > St, ee = c < Ct, te = i === null ? `第 ${o} 頁` : `第 ${o} / ${i} 頁`, ne = `${Math.round(c * 100)}%`;
68
+ return /* @__PURE__ */ O("section", {
69
+ "aria-label": `${e} PDF 預覽`,
70
+ className: I.root,
71
+ children: [/* @__PURE__ */ O("div", {
72
+ className: I.toolbar,
73
+ children: [
74
+ /* @__PURE__ */ O("div", {
75
+ className: I.pageControls,
76
+ "aria-label": "頁面切換",
77
+ children: [
78
+ /* @__PURE__ */ D(S, {
79
+ "aria-label": "上一頁",
80
+ disabled: !m,
81
+ icon: Ge,
82
+ onClick: () => {
83
+ s((e) => Math.max(1, e - 1));
84
+ },
85
+ size: "minor",
86
+ variant: "base-secondary"
87
+ }),
88
+ /* @__PURE__ */ D(E, {
89
+ className: I.counter,
90
+ component: "span",
91
+ variant: "body",
92
+ children: te
93
+ }),
94
+ /* @__PURE__ */ D(S, {
95
+ "aria-label": "下一頁",
96
+ disabled: !h,
97
+ icon: Ke,
98
+ onClick: () => {
99
+ s((e) => i === null ? e : Math.min(i, e + 1));
100
+ },
101
+ size: "minor",
102
+ variant: "base-secondary"
103
+ })
104
+ ]
105
+ }),
106
+ /* @__PURE__ */ O("div", {
107
+ className: I.zoomControls,
108
+ "aria-label": "縮放",
109
+ children: [
110
+ /* @__PURE__ */ D(S, {
111
+ "aria-label": "縮小",
112
+ disabled: !g,
113
+ icon: j,
114
+ onClick: () => {
115
+ l((e) => Math.max(St, e - L));
116
+ },
117
+ size: "minor",
118
+ variant: "base-secondary"
119
+ }),
120
+ /* @__PURE__ */ D(E, {
121
+ className: I.counter,
122
+ component: "span",
123
+ variant: "body",
124
+ children: ne
125
+ }),
126
+ /* @__PURE__ */ D(S, {
127
+ "aria-label": "放大",
128
+ disabled: !ee,
129
+ icon: tt,
130
+ onClick: () => {
131
+ l((e) => Math.min(Ct, e + L));
132
+ },
133
+ size: "minor",
134
+ variant: "base-secondary"
135
+ })
136
+ ]
137
+ }),
138
+ n ? /* @__PURE__ */ D(S, {
139
+ icon: A,
140
+ iconType: "leading",
141
+ onClick: n,
142
+ size: "minor",
143
+ variant: "base-primary",
144
+ children: "下載"
145
+ }) : null
146
+ ]
147
+ }), /* @__PURE__ */ D("div", {
148
+ className: I.viewport,
149
+ ref: r,
150
+ children: /* @__PURE__ */ D(mt, {
151
+ error: /* @__PURE__ */ D(Tt, { message: "PDF 無法載入。" }),
152
+ file: t,
153
+ loading: /* @__PURE__ */ D(Tt, { message: "正在載入 PDF..." }),
154
+ noData: /* @__PURE__ */ D(Tt, { message: "沒有可預覽的 PDF。" }),
155
+ onLoadSuccess: p,
156
+ suspense: !1,
157
+ children: /* @__PURE__ */ D(ht, {
158
+ className: I.page,
159
+ loading: /* @__PURE__ */ D(Tt, { message: "正在載入頁面..." }),
160
+ pageNumber: o,
161
+ renderAnnotationLayer: !0,
162
+ renderTextLayer: !0,
163
+ width: f
164
+ })
165
+ })
166
+ })]
167
+ });
168
+ }
169
+ function Tt({ message: e }) {
170
+ return /* @__PURE__ */ D("div", {
171
+ className: I.state,
172
+ children: /* @__PURE__ */ D(E, {
173
+ color: "text-neutral",
174
+ variant: "body",
175
+ children: e
176
+ })
177
+ });
178
+ }
179
+ // src/views/instances/detail/submitted-by.ts
180
+ function Et({ initiatorMemberId: e, submittedByMemberId: t }) {
181
+ return t && t !== e ? t : null;
182
+ }
183
+ function Dt(e, t) {
184
+ let n = Et(e);
185
+ if (!n || !e.initiatorMemberId) return null;
186
+ let r = (e) => t.get(e)?.name ?? e;
187
+ return `由 ${r(n)} 代 ${r(e.initiatorMemberId)} 送出`;
188
+ }
189
+ // src/views/instances/detail/sections/shared.ts
190
+ function Ot(e) {
191
+ let t = R(e, "from"), n = R(e, "to"), r = R(e, "reason");
192
+ return !t || !n || !r ? null : {
193
+ from: t,
194
+ reason: r,
195
+ ruleId: R(e, "ruleId"),
196
+ to: n
197
+ };
198
+ }
199
+ function kt(e) {
200
+ try {
201
+ let t = JSON.parse(e);
202
+ return Array.isArray(t) ? t.map((e) => jt(e) ? Ot(e) : null).filter((e) => e !== null) : [];
203
+ } catch {
204
+ return [];
205
+ }
206
+ }
207
+ function R(e, t) {
208
+ let n = e[t];
209
+ return typeof n == "string" ? n : null;
210
+ }
211
+ function At(e, t) {
212
+ let n = e[t];
213
+ return Array.isArray(n) ? n.filter((e) => typeof e == "string") : [];
214
+ }
215
+ function z(e, t) {
216
+ let n = e[t];
217
+ return typeof n == "number" ? n : null;
218
+ }
219
+ function B(e) {
220
+ return typeof e == "string" && e.trim().length > 0;
221
+ }
222
+ function jt(e) {
223
+ return typeof e == "object" && !!e;
224
+ }
225
+ function Mt(e) {
226
+ return e.status === "PENDING" || e.status === "IN_PROGRESS";
227
+ }
228
+ function V(e) {
229
+ return ot(e) || (e instanceof Error ? e.message : "發生未知錯誤");
230
+ }
231
+ function Nt(e) {
232
+ return !Number.isFinite(e) || e <= 0 ? "-" : e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(1)} KB` : `${(e / 1024 / 1024).toFixed(1)} MB`;
233
+ }
234
+ function H(e) {
235
+ return e.length > 16 ? `${e.slice(0, 12)}...` : e;
236
+ }
237
+ function Pt(e) {
238
+ return e === "APPROVED" ? "已同意" : e === "CANCELLED" ? "已取消" : e === "DRAFT" ? "草稿" : e === "EXPIRED" ? "已逾期" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "RUNNING" ? "進行中" : e;
239
+ }
240
+ function U(e) {
241
+ return e === "PENDING" ? "待處理" : e === "IN_PROGRESS" ? "處理中" : e === "COMPLETED" ? "已完成" : e === "CANCELLED" ? "已取消" : e === "TRANSFERRED" ? "已轉派" : e;
242
+ }
243
+ function Ft(e) {
244
+ return e === "APPROVED" ? "同意" : e === "REJECTED" ? "拒絕" : e === "RETURNED" ? "退回" : e === "TRANSFERRED" ? "轉派" : e;
245
+ }
246
+ function It(e) {
247
+ return e === "startEvent" ? "開始" : e === "endEvent" ? "完成" : e === "userTask" ? "簽核節點" : e === "serviceTask" ? "知會節點" : e === "exclusiveGateway" ? "條件分流" : "平行處理";
248
+ }
249
+ function Lt(e, t) {
250
+ return t?.nodes.find((t) => t.id === e)?.data.label ?? e;
251
+ }
252
+ function W(e, t) {
253
+ if (!e) return "-";
254
+ let n = t.get(e);
255
+ return n ? f(n.name, n.email, "fullwidth") : e;
256
+ }
257
+ function Rt(e, t = /* @__PURE__ */ new Map()) {
258
+ let n = kt(e.delegationChainJson);
259
+ if (!e.assigneeMemberId) return e.candidateMemberIds.length ? `候選 ${e.candidateMemberIds.map((e) => W(e, t)).join("、")}` : "未指定";
260
+ let r = W(e.assigneeMemberId, t), i = W(e.originalAssigneeMemberId, t);
261
+ return n.length === 0 || e.originalAssigneeMemberId === e.assigneeMemberId ? r : `${r}(原:${i})`;
262
+ }
263
+ function zt(e, t) {
264
+ return t ? e.assigneeMemberId === t || (e.openCandidateMemberIds ?? e.candidateMemberIds).includes(t) : !1;
265
+ }
266
+ function Bt(e, t) {
267
+ let n = e.filter((e) => zt(e, t) && (e.status === "PENDING" || e.status === "IN_PROGRESS"));
268
+ return n.find((e) => !e.isAdhoc) ?? n[0] ?? null;
269
+ }
270
+ function Vt(e, t) {
271
+ if (t.type !== "userTask" || !t.data.returnBehavior.allowReturn) return [];
272
+ if (t.data.returnBehavior.allowedTargets === "ANY") {
273
+ let n = gt(e, t.id);
274
+ return e.nodes.filter((e) => n.includes(e.id)).map((e) => ({
275
+ id: e.id,
276
+ name: `${e.data.label}(${It(e.type)})`
277
+ }));
278
+ }
279
+ let n = t.data.returnBehavior.allowedTargets === "INITIATOR" ? e.nodes.find((e) => e.type === "startEvent")?.id : e.edges.find((e) => e.target === t.id)?.source, r = e.nodes.find((e) => e.id === n);
280
+ return r ? [{
281
+ id: r.id,
282
+ name: `${r.data.label}(${It(r.type)})`
283
+ }] : [];
284
+ }
285
+ function Ht(e) {
286
+ return {
287
+ email: e.email,
288
+ id: e.memberId,
289
+ name: f(e.name, e.email, "dot")
290
+ };
291
+ }
292
+ function G({ memberIds: e, useWebhookTarget: t, webhookUrl: n }) {
293
+ if (t) {
294
+ let e = n.trim();
295
+ return e ? {
296
+ target: {
297
+ kind: "WEBHOOK",
298
+ webhookUrl: e
299
+ },
300
+ valid: !0
301
+ } : {
302
+ error: "請輸入 Webhook URL",
303
+ valid: !1
304
+ };
305
+ }
306
+ return e.length > 0 ? {
307
+ target: {
308
+ kind: "MEMBER",
309
+ memberIds: e
310
+ },
311
+ valid: !0
312
+ } : {
313
+ error: "請選擇對象成員",
314
+ valid: !1
315
+ };
316
+ }
317
+ function Ut(e) {
318
+ return !!e;
319
+ }
320
+ function Wt(e) {
321
+ if (!jt(e)) return null;
322
+ let t = e.email, n = e.id, r = e.name;
323
+ return typeof n == "string" && typeof r == "string" ? {
324
+ email: typeof t == "string" ? t : null,
325
+ id: n,
326
+ name: r
327
+ } : null;
328
+ }
329
+ function Gt(e, t) {
330
+ let n = e.trim().toLocaleLowerCase();
331
+ if (!n) return null;
332
+ let r = t.filter((e) => [
333
+ e.id,
334
+ e.name,
335
+ e.email ?? ""
336
+ ].some((e) => e.toLocaleLowerCase().includes(n)));
337
+ return r.length === 1 ? r[0] ?? null : null;
338
+ }
339
+ function K(e) {
340
+ return B(e) ? {
341
+ text: e,
342
+ type: "text"
343
+ } : null;
344
+ }
345
+ function q(e, t, n = "neutral") {
346
+ return B(t) ? {
347
+ label: e,
348
+ text: t,
349
+ tone: n,
350
+ type: "comment"
351
+ } : null;
352
+ }
353
+ function Kt(e, t, n, r) {
354
+ let i = t ? n.get(t) : null;
355
+ return {
356
+ email: i?.email ?? null,
357
+ label: i?.name ?? r,
358
+ memberId: t,
359
+ prefix: e,
360
+ type: "member"
361
+ };
362
+ }
363
+ function J(e) {
364
+ return !!e;
365
+ }
366
+ function Y(e) {
367
+ let t = e.findIndex((e) => e.id.startsWith("pending-task-") || e.id.startsWith("future-node-"));
368
+ return t === -1 ? e.length : t;
369
+ }
370
+ function X(e) {
371
+ return e.eventType === "INSTANCE_STARTED" || e.eventType === "INSTANCE_CANCELLED" || e.eventType === "INSTANCE_EXPIRED" || e.eventType === "INSTANCE_RESUBMITTED" || e.eventType === "TASK_DECIDED" || e.eventType === "SLA_TRIGGERED" || e.eventType === "TASK_CANDIDATE_ACTIVATED" || e.eventType === "TASK_REASSIGNED" || Z(e) || Yt(e.eventType, $t(e));
372
+ }
373
+ function Z(e) {
374
+ return e.eventType === "TASK_CREATED" && At($t(e), "sequentialCandidateMemberIds").length > 0;
375
+ }
376
+ function qt(e) {
377
+ if (e.eventType !== "TASK_CANDIDATE_ACTIVATED" && e.eventType !== "TASK_CREATED") return [];
378
+ let t = $t(e);
379
+ return [
380
+ ...At(t, "sequentialCandidateMemberIds"),
381
+ R(t, "candidateMemberId"),
382
+ R(t, "previousMemberId")
383
+ ].filter(B);
384
+ }
385
+ var Jt = /* @__PURE__ */ new Set([
386
+ "SERVICE_TASK_EXECUTED",
387
+ "SERVICE_TASK_FAILED",
388
+ "WEBHOOK_DELIVERY_RETRIED"
389
+ ]);
390
+ function Yt(e, t) {
391
+ return Jt.has(e) && R(t, "action") === "NOTIFY_WEBHOOK";
392
+ }
393
+ function Xt(e) {
394
+ return R(e, "endpointLabel") ?? R(e, "endpointKey") ?? "外部系統";
395
+ }
396
+ function Zt(e) {
397
+ return e === "APPROVED" ? "已同意" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "TRANSFERRED" ? "已轉派" : "簽核已決議";
398
+ }
399
+ function Qt(e, t) {
400
+ if (e === "INSTANCE_STARTED") return "案件已發起";
401
+ if (e === "INSTANCE_CANCELLED") return "案件已取消";
402
+ if (e === "INSTANCE_EXPIRED") return "案件逾期,已由系統終止";
403
+ if (e === "INSTANCE_RESUBMITTED") return "申請人重新送出";
404
+ if (e === "TOKEN_CREATED") return "流程路徑已建立";
405
+ if (e === "ENGINE_PROCESS_REQUESTED") return "流程引擎已處理";
406
+ if (e === "TOKEN_ADVANCED") return "流程已前進";
407
+ if (e === "TASK_CREATED") return "待簽任務已建立";
408
+ if (e === "TASK_CANDIDATE_ACTIVATED") return "輪到下一位簽核";
409
+ if (e === "TASK_DECIDED") return Zt(R(t, "action"));
410
+ if (e === "SLA_TRIGGERED") return "時限提醒已觸發";
411
+ if (e === "TASK_REASSIGNED") return "管理者改派待辦";
412
+ if (Yt(e, t)) {
413
+ let n = Xt(t);
414
+ return e === "SERVICE_TASK_EXECUTED" ? `已通知外部系統:${n}` : e === "SERVICE_TASK_FAILED" ? `通知外部系統失敗:${n}` : `管理者重新傳送外部系統通知:${n}`;
415
+ }
416
+ return e;
417
+ }
418
+ function $t(e) {
419
+ try {
420
+ let t = JSON.parse(e.payloadJson);
421
+ return jt(t) ? t : {};
422
+ } catch {
423
+ return {};
424
+ }
425
+ }
426
+ function en(e, t) {
427
+ return e.eventType === "SLA_TRIGGERED" || e.eventType === "INSTANCE_EXPIRED" || e.eventType === "SERVICE_TASK_FAILED" && Yt(e.eventType, t) || R(t, "action") === "REJECTED" || R(t, "instanceState") === "REJECTED";
428
+ }
429
+ function tn(e) {
430
+ return t(e);
431
+ }
432
+ function nn(e, t, n, r) {
433
+ if (e.eventType === "INSTANCE_STARTED") return Dt({
434
+ initiatorMemberId: e.actorMemberId,
435
+ submittedByMemberId: R(t, "submittedByMemberId")
436
+ }, r);
437
+ if (e.eventType === "TASK_CANDIDATE_ACTIVATED") {
438
+ let e = R(t, "candidateMemberId"), n = R(t, "previousMemberId");
439
+ if (!e) return null;
440
+ let i = W(e, r);
441
+ return n ? `輪到:${i}(前一位:${W(n, r)})` : `輪到:${i}`;
442
+ }
443
+ if (e.eventType === "TASK_CREATED") {
444
+ let e = At(t, "sequentialCandidateMemberIds");
445
+ if (e.length) return `簽核順序:${e.map((e) => W(e, r)).join(" → ")}`;
446
+ let n = R(t, "assigneeMemberId"), i = R(t, "originalAssigneeMemberId");
447
+ if (!n) {
448
+ let e = At(t, "candidateMemberIds");
449
+ return e.length ? `候選簽核人:${e.map((e) => W(e, r)).join("、")}` : null;
450
+ }
451
+ let a = W(n, r), o = W(i, r);
452
+ return i && i !== n ? `待簽人:${a}(原簽核人:${o})` : `待簽人:${a}`;
453
+ }
454
+ if (e.eventType === "TASK_DECIDED") {
455
+ let e = R(t, "action"), n = R(t, "comment"), i = e ? `決議:${Ft(e)}` : null, a = R(t, "transferToMemberId");
456
+ return e === "REJECTED" && n ? [i, `拒絕原因:${n}`].filter(B).join(" · ") : e === "APPROVED" && n ? [i, `同意說明:${n}`].filter(B).join(" · ") : e === "TRANSFERRED" ? [i, `轉派給:${W(a, r)}`].filter(B).join(" · ") : i;
457
+ }
458
+ if (e.eventType === "TOKEN_ADVANCED") {
459
+ let e = R(t, "action");
460
+ if (e) return `流程結果:${Ft(e)}`;
461
+ let r = z(t, "arrivedCount"), i = z(t, "requiredCount");
462
+ if (r !== null && i !== null) return `等待匯合:${r}/${i}`;
463
+ let a = R(t, "fromNodeId"), o = R(t, "toNodeId");
464
+ if (a && o) return `由 ${Lt(a, n)} 前進至 ${Lt(o, n)}`;
465
+ }
466
+ if (e.eventType === "ENGINE_PROCESS_REQUESTED") {
467
+ let e = R(t, "state");
468
+ return e ? `案件狀態:${Pt(e)}` : null;
469
+ }
470
+ return null;
471
+ }
472
+ function rn(e, t, n, r, i, a, o, s = null, c = null) {
473
+ if (e.eventType === "INSTANCE_RESUBMITTED") return [q("簽核意見", R(t, "comment"))].filter(J);
474
+ if (e.eventType !== "TASK_DECIDED") return [K(nn(e, t, n, o))].filter(J);
475
+ let l = an(e, t, r, c), u = R(t, "action") ?? l?.action ?? null, d = R(t, "comment") ?? l?.comment ?? null, f = R(t, "transferToMemberId") ?? l?.transferToMemberId ?? null, p = R(t, "signatureId") ?? l?.signatureId ?? null, m = p ? i.get(p) : null;
476
+ return [
477
+ K(u ? `決議:${Ft(u)}` : null),
478
+ u === "REJECTED" ? q("拒絕原因", d ?? "-", "danger") : null,
479
+ u === "APPROVED" ? q("同意說明", d) : null,
480
+ u === "RETURNED" ? q("退回說明", d ?? "-") : null,
481
+ u === "TRANSFERRED" ? K(`轉派給:${W(f, o)}`) : null,
482
+ u === "TRANSFERRED" ? q("轉派說明", d ?? "-") : null,
483
+ K(sn(t, s)),
484
+ m ? K(a?.valid ? `簽章:已驗證(${H(m.signedPayloadHash)})` : `簽章:待檢查(${H(m.signedPayloadHash)})`) : null
485
+ ].filter(J);
486
+ }
487
+ function an(e, t, n, r) {
488
+ let i = e.taskId;
489
+ if (!i) return null;
490
+ let a = R(t, "decisionId"), o = (t) => a ? t.id === a : t.decidedByMemberId === e.actorMemberId;
491
+ if (!r) {
492
+ let e = n.get(i) ?? null;
493
+ return e && o(e) ? e : null;
494
+ }
495
+ return on(r.filter((e) => e.taskId === i && o(e)), new Date(e.createdAt).getTime());
496
+ }
497
+ function on(e, t) {
498
+ let n = (e) => Math.abs(u(e) - t), r = (e, t) => {
499
+ let r = n(e) - n(t);
500
+ return r < 0 || !(r > 0) && d(e, t) < 0;
501
+ };
502
+ return e.reduce((e, t) => !e || r(t, e) ? t : e, null);
503
+ }
504
+ function sn(e, t) {
505
+ let n = e.changedFieldKeys;
506
+ if (!Array.isArray(n)) return null;
507
+ let r = n.filter((e) => typeof e == "string" && e !== "");
508
+ if (r.length === 0) return null;
509
+ let i = r.map((e) => t?.fields.find((t) => t.fieldKey === e)?.label || e);
510
+ return `補填 ${r.length} 個欄位:${i.join("、")}`;
511
+ }
512
+ function cn(e, t, n, r, i) {
513
+ if (e.type === "startEvent" || i.has(e.id)) return !1;
514
+ if (r === "REJECTED") return !0;
515
+ let a = _n(e, t, n, r);
516
+ return a.tone === "neutral" || a.tone === "waiting";
517
+ }
518
+ function ln(e, t, n, r, i) {
519
+ if (r !== "RUNNING" && r !== "REJECTED") return [];
520
+ let a = e.nodes.filter((e) => cn(e, t, n, r, i)), o = Q(e, a, t, n, i), s = new Map(e.nodes.map((e, t) => [e.id, t]));
521
+ return a.filter((e) => o.has(e.id)).sort((e, t) => {
522
+ let n = o.get(e.id) ?? 0, r = o.get(t.id) ?? 0;
523
+ return n === r ? e.position.x === t.position.x ? e.position.y === t.position.y ? (s.get(e.id) ?? 0) - (s.get(t.id) ?? 0) : e.position.y - t.position.y : e.position.x - t.position.x : n - r;
524
+ });
525
+ }
526
+ function Q(e, t, n, r, i) {
527
+ let a = new Set(t.map((e) => e.id)), o = e.edges.reduce((e, t) => {
528
+ let n = [...e.get(t.source) ?? [], t.target];
529
+ return new Map(e).set(t.source, n);
530
+ }, /* @__PURE__ */ new Map());
531
+ return un(e, n, r, i).reduce((e, t) => pn(e, dn(t, o, a)), /* @__PURE__ */ new Map());
532
+ }
533
+ function un(e, t, n, r) {
534
+ let i = n.filter((e) => e.status === "ACTIVE" || e.status === "WAITING").map((e) => e.currentNodeId), a = t.filter(Mt).map((e) => e.nodeId), o = e.nodes.filter((e) => r.has(e.id)).map((e) => e.id), s = [.../* @__PURE__ */ new Set([
535
+ ...i,
536
+ ...a,
537
+ ...o
538
+ ])], c = e.nodes.filter((e) => e.type === "startEvent").map((e) => e.id);
539
+ return s.length > 0 ? s : c;
540
+ }
541
+ function dn(e, t, n) {
542
+ return fn([{
543
+ distance: 0,
544
+ nodeId: e
545
+ }], t, n);
546
+ }
547
+ function fn(e, t, n, r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Map()) {
548
+ let [a, ...o] = e;
549
+ if (!a) return i;
550
+ if (r.has(a.nodeId)) return fn(o, t, n, r, i);
551
+ let s = new Set(r).add(a.nodeId), c = n.has(a.nodeId) ? new Map(i).set(a.nodeId, Math.min(i.get(a.nodeId) ?? a.distance, a.distance)) : i;
552
+ return fn([...o, ...(t.get(a.nodeId) ?? []).map((e) => ({
553
+ distance: a.distance + 1,
554
+ nodeId: e
555
+ }))], t, n, s, c);
556
+ }
557
+ function pn(e, t) {
558
+ return [...t.entries()].reduce((e, [t, n]) => new Map(e).set(t, Math.min(e.get(t) ?? n, n)), e);
559
+ }
560
+ function mn(e) {
561
+ return e.type === "userTask" ? `未來簽核:${e.data.label}` : e.type === "serviceTask" ? `未來知會:${e.data.label}` : e.type === "exclusiveGateway" ? `未來分流:${e.data.label}` : e.type === "parallelGateway" ? `未來匯合:${e.data.label}` : e.type === "endEvent" ? `流程完成:${e.data.label}` : `未來節點:${e.data.label}`;
562
+ }
563
+ function hn(e, t, n, r, i, a, o, s, l, u = null, d = null) {
564
+ let f = d ? c(d) : null, p = e.filter(X).map((e) => {
565
+ let t = $t(e), n = e.nodeId ? Lt(e.nodeId, r) : null;
566
+ return {
567
+ descriptionParts: [
568
+ K(n ? `節點:${n}` : "節點:全流程"),
569
+ Kt("操作者", e.actorMemberId, a, "系統"),
570
+ K(`時間:${tn(e.createdAt)}`),
571
+ ...rn(e, t, r, o, s, l, a, u, f ? f.get(e.taskId ?? "") ?? [] : null)
572
+ ].filter(J),
573
+ error: en(e, t),
574
+ id: e.id,
575
+ title: Qt(e.eventType, t)
576
+ };
577
+ }), m = t.filter(Mt).map((e) => ({
578
+ descriptionParts: [
579
+ K(`節點:${Lt(e.nodeId, r)}`),
580
+ Kt("處理者", e.assigneeMemberId, a, "未指定"),
581
+ K(`建立時間:${tn(e.createdAt)}`)
582
+ ].filter(J),
583
+ error: !1,
584
+ id: `pending-task-${e.id}`,
585
+ title: e.status === "IN_PROGRESS" ? "簽核處理中" : "等待簽核處理"
586
+ })), h = new Set([...e.filter(X).map((e) => e.nodeId), ...t.map((e) => e.nodeId)].filter(B)), g = r ? ln(r, t, n, i, h).map((e) => ({
587
+ descriptionParts: [K(`${It(e.type)} · 尚未抵達`)].filter(J),
588
+ error: !1,
589
+ forcePending: !0,
590
+ id: `future-node-${e.id}`,
591
+ title: mn(e)
592
+ })) : [];
593
+ return [
594
+ ...p,
595
+ ...m,
596
+ ...g
597
+ ];
598
+ }
599
+ var gn = {
600
+ APPROVED: {
601
+ statusLabel: "已完成",
602
+ tone: "completed"
603
+ },
604
+ CANCELLED: {
605
+ statusLabel: "已取消",
606
+ tone: "cancelled"
607
+ },
608
+ EXPIRED: {
609
+ statusLabel: "已逾期終止",
610
+ tone: "cancelled"
611
+ },
612
+ REJECTED: {
613
+ statusLabel: "已拒絕",
614
+ tone: "cancelled"
615
+ }
616
+ };
617
+ function _n(e, t, n, r) {
618
+ let i = t.filter((t) => t.nodeId === e.id), a = i.find((e) => e.status === "PENDING" || e.status === "IN_PROGRESS"), o = i.find((e) => e.status === "CANCELLED"), s = i.find((e) => e.status === "COMPLETED"), c = n.filter((t) => t.currentNodeId === e.id), l = c.find((e) => e.status === "ACTIVE"), u = c.find((e) => e.status === "WAITING");
619
+ if (a) return {
620
+ secondaryLabel: `處理者 ${Rt(a)}`,
621
+ statusLabel: "待處理",
622
+ tone: "current"
623
+ };
624
+ if (o) return {
625
+ secondaryLabel: `已取消 ${Rt(o)}`,
626
+ statusLabel: "已取消",
627
+ tone: "cancelled"
628
+ };
629
+ if (s) return {
630
+ secondaryLabel: `已完成 ${Rt(s)}`,
631
+ statusLabel: "已完成",
632
+ tone: "completed"
633
+ };
634
+ if (l) return {
635
+ secondaryLabel: `token ${l.id}`,
636
+ statusLabel: "執行中",
637
+ tone: "current"
638
+ };
639
+ if (u) return {
640
+ secondaryLabel: `token ${u.id}`,
641
+ statusLabel: "等待前置",
642
+ tone: "waiting"
643
+ };
644
+ if (e.type === "startEvent") return {
645
+ secondaryLabel: "流程已發起",
646
+ statusLabel: "已發起",
647
+ tone: "completed"
648
+ };
649
+ let d = e.type === "endEvent" ? gn[r] : void 0;
650
+ return d ? {
651
+ ...d,
652
+ secondaryLabel: r
653
+ } : {
654
+ secondaryLabel: It(e.type),
655
+ statusLabel: "未抵達",
656
+ tone: "neutral"
657
+ };
658
+ }
659
+ // src/views/instances/detail/sections/container-helpers.ts
660
+ async function vn({ activityLogs: e, adhocDirectives: t = [], instance: n, tasks: r }) {
661
+ let i = [...new Set([
662
+ n?.initiatorMemberId ?? null,
663
+ n?.submittedByMemberId ?? null,
664
+ ...e.map((e) => e.actorMemberId),
665
+ ...e.flatMap(qt),
666
+ ...r.map((e) => e.assigneeMemberId),
667
+ ...r.map((e) => e.originalAssigneeMemberId),
668
+ ...r.flatMap((e) => e.candidateMemberIds),
669
+ ...r.flatMap((e) => kt(e.delegationChainJson).flatMap((e) => [e.from, e.to])),
670
+ ...t.flatMap((e) => [e.createdByMemberId, ...$(e.targetValueJson)])
671
+ ].filter(B))];
672
+ try {
673
+ return await Re(i);
674
+ } catch {
675
+ return [];
676
+ }
677
+ }
678
+ function $(e) {
679
+ try {
680
+ return (JSON.parse(e).memberIds ?? []).filter((e) => typeof e == "string");
681
+ } catch {
682
+ return [];
683
+ }
684
+ }
685
+ async function yn(e) {
686
+ return (await Promise.all(e.map((e) => k(e.id)))).flat();
687
+ }
688
+ // src/views/instances/detail/use-resubmit-comment-draft.ts
689
+ function bn(e) {
690
+ let [t, n] = x({
691
+ instanceId: e,
692
+ text: ""
693
+ }), r = oe((t) => n({
694
+ instanceId: e,
695
+ text: t
696
+ }), [e]);
697
+ return {
698
+ clearAfterResubmit: oe((e) => n((t) => t.instanceId === e ? {
699
+ instanceId: e,
700
+ text: ""
701
+ } : t), []),
702
+ comment: t.instanceId === e ? t.text : "",
703
+ setComment: r
704
+ };
705
+ }
706
+ // src/views/instances/detail/sections/InstanceFormSection.tsx
707
+ var xn = {
708
+ display: "grid",
709
+ gap: 16
710
+ }, Sn = {
711
+ display: "flex",
712
+ flexWrap: "wrap",
713
+ gap: 8
714
+ }, Cn = 2e3, wn = {
715
+ minWidth: "100%",
716
+ width: "100%"
717
+ };
718
+ function Tn(e) {
719
+ e && (e.style.width = "100%");
720
+ }
721
+ function En({ canResubmitInstance: t, deciding: n, error: r, fieldAccess: i, fieldLabelMarkers: a, fill: s = null, instance: c, loading: l, onDataSourceStateChange: u, onResubmitFormChange: d, onReloadAfterConflict: f = null, onResubmitCommentChange: p = null, onResubmitInstance: m, onUploadAttachment: h, resubmitComment: g = "", resubmitFormData: ee, resubmitFormErrors: ne }) {
722
+ let _ = c?.formDefinitionSnapshot.schema, re = c?.workflowSnapshot, ie = b(() => t && _ && re ? te(_, re) : s?.schema ?? _, [
723
+ t,
724
+ s?.schema,
725
+ _,
726
+ re
727
+ ]), v = !t && s !== null;
728
+ return /* @__PURE__ */ O("div", {
729
+ style: xn,
730
+ children: [
731
+ r ? /* @__PURE__ */ D(E, {
732
+ color: "text-error",
733
+ variant: "body",
734
+ children: r
735
+ }) : null,
736
+ l ? /* @__PURE__ */ D(E, {
737
+ color: "text-neutral",
738
+ variant: "body",
739
+ children: "載入中..."
740
+ }) : null,
741
+ f ? /* @__PURE__ */ O("div", {
742
+ style: xn,
743
+ children: [/* @__PURE__ */ D(w, {
744
+ content: "表單在你填寫期間被更新了,你填的內容還在。請重新載入後確認再同意。",
745
+ severity: "error"
746
+ }), /* @__PURE__ */ D("div", {
747
+ style: Sn,
748
+ children: /* @__PURE__ */ D(S, {
749
+ disabled: l,
750
+ icon: Ze,
751
+ iconType: "leading",
752
+ onClick: f,
753
+ variant: "base-secondary",
754
+ children: "重新載入"
755
+ })
756
+ })]
757
+ }) : null,
758
+ v && s.fieldCount > 0 ? /* @__PURE__ */ D(w, {
759
+ content: `本關需要你補填 ${s.fieldCount} 個欄位,按「同意」時會一起送出並納入簽章。`,
760
+ severity: "info"
761
+ }) : null,
762
+ ie && c?.formDefinitionSnapshot.uiSchema ? /* @__PURE__ */ O(Ce, { children: [
763
+ /* @__PURE__ */ D(o, {
764
+ dataSourceContext: t ? {
765
+ instanceId: c.id,
766
+ kind: "runtime"
767
+ } : void 0,
768
+ dataSourceInitialValues: c.formData,
769
+ errors: v ? s.errors : ne,
770
+ ...!t && i ? { fieldAccess: i } : {},
771
+ ...!t && a ? { fieldLabelMarkers: a } : {},
772
+ onChange: (e) => {
773
+ v ? s.onChange(e) : d(e);
774
+ },
775
+ onDataSourceStateChange: u,
776
+ onUploadAttachment: t ? h : void 0,
777
+ optionSnapshots: c.formDataOptionSnapshot,
778
+ readonly: !t,
779
+ schema: ie,
780
+ uiSchema: c.formDefinitionSnapshot.uiSchema,
781
+ value: t ? ee : v ? s.value : c.formData
782
+ }),
783
+ t && p ? /* @__PURE__ */ D(e, {
784
+ label: "簽核意見",
785
+ name: "resubmitComment",
786
+ children: /* @__PURE__ */ D(xe, {
787
+ disabled: n,
788
+ onChange: (e) => p(e.target.value),
789
+ placeholder: "選填,例如說明這次補正或修改了哪些內容",
790
+ maxLength: Cn,
791
+ ref: Tn,
792
+ resize: "vertical",
793
+ rows: 4,
794
+ style: wn,
795
+ value: g
796
+ })
797
+ }) : null,
798
+ t ? /* @__PURE__ */ D("div", {
799
+ style: Sn,
800
+ children: /* @__PURE__ */ D(S, {
801
+ disabled: n,
802
+ icon: Ze,
803
+ iconType: "leading",
804
+ onClick: m,
805
+ variant: "base-primary",
806
+ children: "重新送出"
807
+ })
808
+ }) : null
809
+ ] }) : /* @__PURE__ */ D(E, {
810
+ color: "text-neutral",
811
+ variant: "body",
812
+ children: "此案件沒有可顯示的表單快照。"
813
+ })
814
+ ]
815
+ });
816
+ }
817
+ // src/views/instances/detail/sections/InstanceAttachmentsSection.tsx
818
+ var Dn = {
819
+ display: "grid",
820
+ gap: 16
821
+ };
822
+ function On({ attachments: e, onDownload: n, onPreview: r }) {
823
+ let i = b(() => e.map((e) => ({
824
+ attachment: e,
825
+ createdAt: e.createdAt,
826
+ filename: e.filename,
827
+ id: e.id,
828
+ key: e.id,
829
+ mimeType: e.mimeType,
830
+ sizeLabel: Nt(Number(e.sizeBytes))
831
+ })), [e]), a = b(() => [
832
+ {
833
+ dataIndex: "filename",
834
+ key: "filename",
835
+ title: "檔名",
836
+ width: 260
837
+ },
838
+ {
839
+ dataIndex: "mimeType",
840
+ key: "mimeType",
841
+ title: "類型",
842
+ width: 180
843
+ },
844
+ {
845
+ dataIndex: "sizeLabel",
846
+ key: "sizeLabel",
847
+ title: "大小",
848
+ width: 120
849
+ },
850
+ {
851
+ key: "createdAt",
852
+ render: (e) => /* @__PURE__ */ D(E, {
853
+ component: "span",
854
+ variant: "body",
855
+ children: t(e.createdAt)
856
+ }),
857
+ title: "上傳時間",
858
+ width: 220
859
+ }
860
+ ], []), o = b(() => ({
861
+ render: (e) => [...e.mimeType === "application/pdf" ? [{
862
+ icon: Je,
863
+ iconType: "leading",
864
+ name: "預覽",
865
+ onClick: () => {
866
+ r(e.attachment);
867
+ }
868
+ }] : [], {
869
+ icon: A,
870
+ iconType: "leading",
871
+ name: "下載",
872
+ onClick: () => {
873
+ n(e.attachment);
874
+ }
875
+ }],
876
+ variant: "base-secondary",
877
+ width: 160
878
+ }), [n, r]);
879
+ return /* @__PURE__ */ O("div", {
880
+ style: Dn,
881
+ children: [/* @__PURE__ */ D(E, {
882
+ component: "h2",
883
+ variant: "h3",
884
+ children: "附件"
885
+ }), i.length > 0 ? /* @__PURE__ */ D(be, {
886
+ actions: o,
887
+ columns: a,
888
+ dataSource: i,
889
+ fullWidth: !0
890
+ }) : /* @__PURE__ */ D(E, {
891
+ color: "text-neutral",
892
+ variant: "body",
893
+ children: "此案件沒有附件。"
894
+ })]
895
+ });
896
+ }
897
+ // src/views/instances/detail/sections/InstanceTasksSection.tsx
898
+ var kn = {
899
+ display: "grid",
900
+ gap: 12,
901
+ width: "100%"
902
+ }, An = {
903
+ minWidth: "100%",
904
+ width: "100%"
905
+ }, jn = {
906
+ display: "grid",
907
+ gap: 12,
908
+ width: "100%"
909
+ }, Mn = { marginTop: 12 }, Nn = { marginTop: 24 };
910
+ function Pn(e) {
911
+ e && (e.style.width = "100%");
912
+ }
913
+ var Fn = {
914
+ COMPLETION_NOTIFY: "結案通知",
915
+ COUNTERSIGN: "臨時會簽",
916
+ PRE_APPROVAL: "臨時加簽",
917
+ STAGE_NOTIFY: "階段完成通知"
918
+ }, In = {
919
+ COMPLETION_NOTIFY: "本張單到達結案狀態(核准 / 拒絕 / 取消)後,通知指定對象。",
920
+ COUNTERSIGN: "指定對象會併入下一層簽核,下一層需所有人都完成才會繼續。",
921
+ PRE_APPROVAL: "指定對象需先完成加簽,本階段才會往下一層繼續。",
922
+ STAGE_NOTIFY: "本階段完成後(不論通過與否)通知指定對象。"
923
+ }, Ln = [{
924
+ id: "REJECT_INSTANCE",
925
+ name: "加簽拒絕時整單駁回"
926
+ }, {
927
+ id: "RETURN_TO_ORIGIN",
928
+ name: "加簽拒絕時退回給我重新處理"
929
+ }], Rn = [{
930
+ id: "MEMBER",
931
+ name: "指定成員"
932
+ }, {
933
+ id: "WEBHOOK",
934
+ name: "Webhook"
935
+ }], zn = y(function({ adhocDirectives: n, currentMemberId: r, fill: i = null, instance: a, memberProfilesById: o, onChanged: s, onDecidingChange: c, onFillApproveError: u, tasks: d }, f) {
936
+ let [p, m] = x(!1), [h, g] = x(null);
937
+ se(() => {
938
+ c?.(p);
939
+ }, [p, c]);
940
+ let [ee, te] = x(""), [ne, _] = x(!1), [re, ie] = x(""), [v, ae] = x(null), [y, oe] = x(!1), [le, w] = x(""), [me, he] = x(!1), [ge, _e] = x(null), [ye, Se] = x(""), [Te, ke] = x(null), [Ae, k] = x(!1), [je, Me] = x([]), [Ne, Pe] = x(!1), [Fe, Re] = x(""), [ze, Be] = x([]), [He, Ue] = x(!1), [We, Ge] = x([]), [Ke, qe] = x(!1), [A, Je] = x("COUNTERSIGN"), [Ye, Xe] = x("REJECT_INSTANCE"), [Ze, Qe] = x(!1), [$e, et] = x("MEMBER"), [tt, j] = x(""), nt = re.trim(), rt = le.trim(), it = ye.trim(), M = b(() => Bt(d, r), [r, d]), N = b(() => M && a ? a.workflowSnapshot.nodes.find((e) => e.id === M.nodeId) ?? null : null, [M, a]), at = b(() => N && a ? Vt(a.workflowSnapshot, N) : [], [N, a]), ot = N?.type === "userTask" && N.data.returnBehavior.allowReturn, st = N?.type === "userTask" && N.data.allowReject !== !1, ct = N?.type === "userTask" && N.data.allowTransfer !== !1, lt = N?.type === "userTask" && N.data.returnBehavior.requireComment === !0, ut = N?.type === "userTask" && N.data.allowAddSigner, dt = b(() => n.filter((e) => e.status === "PENDING"), [n]), P = at.find((e) => e.id === ge) ?? at[0] ?? null, ft = b(() => d.map((e) => ({
941
+ ...e,
942
+ assigneeLabel: Rt(e, o),
943
+ fillFieldCount: Vn(e, a?.workflowSnapshot ?? null),
944
+ key: e.id,
945
+ nodeLabel: l({
946
+ ...e,
947
+ nodeLabel: Lt(e.nodeId, a?.workflowSnapshot ?? null)
948
+ }),
949
+ statusLabel: U(e.status)
950
+ })), [
951
+ a,
952
+ o,
953
+ d
954
+ ]), pt = b(() => [
955
+ {
956
+ dataIndex: "nodeLabel",
957
+ key: "nodeLabel",
958
+ title: "節點",
959
+ width: 180
960
+ },
961
+ {
962
+ key: "assigneeMemberId",
963
+ title: "處理者",
964
+ render: (e) => /* @__PURE__ */ D(E, {
965
+ component: "span",
966
+ variant: "body",
967
+ children: e.assigneeLabel
968
+ }),
969
+ width: 180
970
+ },
971
+ {
972
+ dataIndex: "statusLabel",
973
+ key: "statusLabel",
974
+ title: "狀態",
975
+ width: 120
976
+ },
977
+ {
978
+ key: "fill",
979
+ render: (e) => e.fillFieldCount > 0 ? /* @__PURE__ */ D(de, {
980
+ size: "sub",
981
+ text: `需補填 ${e.fillFieldCount} 欄`,
982
+ variant: "dot-warning"
983
+ }) : null,
984
+ title: "補填",
985
+ width: 140
986
+ },
987
+ {
988
+ key: "createdAt",
989
+ render: (e) => /* @__PURE__ */ D(E, {
990
+ component: "span",
991
+ variant: "body",
992
+ children: t(e.createdAt)
993
+ }),
994
+ title: "建立時間",
995
+ width: 220
996
+ }
997
+ ], []), mt = b(() => dt.map((e) => ({
998
+ ...e,
999
+ createdByLabel: W(e.createdByMemberId, o),
1000
+ key: e.id,
1001
+ targetLabel: Bn(e, o),
1002
+ typeLabel: Fn[e.type]
1003
+ })), [o, dt]), ht = b(() => [
1004
+ {
1005
+ dataIndex: "typeLabel",
1006
+ key: "typeLabel",
1007
+ title: "類型",
1008
+ width: 180
1009
+ },
1010
+ {
1011
+ key: "targetLabel",
1012
+ render: (e) => /* @__PURE__ */ D(E, {
1013
+ component: "span",
1014
+ variant: "body",
1015
+ children: e.targetLabel
1016
+ }),
1017
+ title: "對象",
1018
+ width: 220
1019
+ },
1020
+ {
1021
+ key: "createdByLabel",
1022
+ render: (e) => /* @__PURE__ */ D(E, {
1023
+ component: "span",
1024
+ variant: "body",
1025
+ children: e.createdByLabel
1026
+ }),
1027
+ title: "設定者",
1028
+ width: 180
1029
+ },
1030
+ {
1031
+ key: "createdAt",
1032
+ render: (e) => /* @__PURE__ */ D(E, {
1033
+ component: "span",
1034
+ variant: "body",
1035
+ children: t(e.createdAt)
1036
+ }),
1037
+ title: "建立時間",
1038
+ width: 220
1039
+ },
1040
+ {
1041
+ key: "actions",
1042
+ render: (e) => e.createdByMemberId === r ? /* @__PURE__ */ D(S, {
1043
+ disabled: Ze,
1044
+ onClick: () => void z(e.id),
1045
+ size: "minor",
1046
+ variant: "destructive-secondary",
1047
+ children: "撤回"
1048
+ }) : /* @__PURE__ */ D(Ce, {}),
1049
+ title: "操作",
1050
+ width: 100
1051
+ }
1052
+ ], [Ze, r]);
1053
+ async function gt({ action: e, comment: t, returnToNodeId: n = null, transferToMemberId: a = null }) {
1054
+ if (!r || !M || e === "REJECTED" && !st || e === "TRANSFERRED" && !ct) return !1;
1055
+ m(!0), g(null);
1056
+ let o = e === "APPROVED" && i !== null && !M.isAdhoc ? {
1057
+ expectedFormDataFingerprint: i.expectedFormDataFingerprint,
1058
+ formData: i.formData
1059
+ } : null;
1060
+ try {
1061
+ await Oe({
1062
+ action: e,
1063
+ comment: t,
1064
+ decidedByMemberId: r,
1065
+ fill: o,
1066
+ returnToNodeId: n,
1067
+ taskId: M.id,
1068
+ transferToMemberId: a
1069
+ }), oe(!1), he(!1), Pe(!1), ie(""), w(""), Se(""), ke(null), _e(null), ae(null);
1070
+ } catch (e) {
1071
+ return m(!1), o !== null && e instanceof Error && u?.(e.message) === !0 ? (_(!1), !1) : (g(V(e)), !1);
1072
+ }
1073
+ try {
1074
+ await s();
1075
+ } catch (e) {
1076
+ g(V(e));
1077
+ } finally {
1078
+ m(!1);
1079
+ }
1080
+ return !0;
1081
+ }
1082
+ function F() {
1083
+ r && M && (g(null), _(!0));
1084
+ }
1085
+ function _t() {
1086
+ p || (_(!1), te(""));
1087
+ }
1088
+ async function I() {
1089
+ p || await gt({
1090
+ action: "APPROVED",
1091
+ comment: ee.trim() || null
1092
+ }) && (_(!1), te(""));
1093
+ }
1094
+ function vt() {
1095
+ st && (ie(""), ae(null), oe(!0));
1096
+ }
1097
+ function yt() {
1098
+ p || (oe(!1), ie(""), ae(null));
1099
+ }
1100
+ function bt() {
1101
+ w(""), _e(at[0]?.id ?? null), he(!0);
1102
+ }
1103
+ function xt() {
1104
+ p || (he(!1), w(""), _e(null));
1105
+ }
1106
+ function St() {
1107
+ ct && (Se(""), ke(null), Pe(!0), L(""));
1108
+ }
1109
+ function Ct() {
1110
+ p || (Pe(!1), Se(""), ke(null));
1111
+ }
1112
+ async function L(e) {
1113
+ k(!0);
1114
+ try {
1115
+ Me((await Ve(e)).filter((e) => e.memberId !== r).map(Ht));
1116
+ } catch (e) {
1117
+ g(V(e));
1118
+ } finally {
1119
+ k(!1);
1120
+ }
1121
+ }
1122
+ async function wt() {
1123
+ st && (nt ? await gt({
1124
+ action: "REJECTED",
1125
+ comment: nt
1126
+ }) : ae("請輸入拒絕原因"));
1127
+ }
1128
+ async function Tt() {
1129
+ ct && (Te ? await gt({
1130
+ action: "TRANSFERRED",
1131
+ comment: it || null,
1132
+ transferToMemberId: Te.id
1133
+ }) : g("請選擇轉派對象"));
1134
+ }
1135
+ async function Et() {
1136
+ await gt({
1137
+ action: "RETURNED",
1138
+ comment: rt || null,
1139
+ returnToNodeId: P?.id ?? null
1140
+ });
1141
+ }
1142
+ function Dt() {
1143
+ Re(""), Be([]), Xe("REJECT_INSTANCE"), et("MEMBER"), j("");
1144
+ }
1145
+ function Ot(e) {
1146
+ Je(e), Dt(), qe(!0), R("");
1147
+ }
1148
+ function kt() {
1149
+ Ze || (qe(!1), Dt());
1150
+ }
1151
+ async function R(e) {
1152
+ Ue(!0);
1153
+ try {
1154
+ Ge((await Ve(e)).map(Ht));
1155
+ } catch (e) {
1156
+ g(V(e));
1157
+ } finally {
1158
+ Ue(!1);
1159
+ }
1160
+ }
1161
+ async function At() {
1162
+ if (!M) return;
1163
+ let e = (A === "STAGE_NOTIFY" || A === "COMPLETION_NOTIFY") && $e === "WEBHOOK", t = G({
1164
+ memberIds: ze.map((e) => e.id),
1165
+ useWebhookTarget: e,
1166
+ webhookUrl: tt
1167
+ });
1168
+ if (!t.valid) {
1169
+ g(t.error);
1170
+ return;
1171
+ }
1172
+ let { target: n } = t, r = Fe.trim() || null;
1173
+ Qe(!0), g(null);
1174
+ try {
1175
+ A === "COUNTERSIGN" ? await Ie({
1176
+ comment: r,
1177
+ target: n,
1178
+ taskId: M.id
1179
+ }) : A === "PRE_APPROVAL" ? await Le({
1180
+ comment: r,
1181
+ onReject: Ye,
1182
+ target: n,
1183
+ taskId: M.id
1184
+ }) : A === "STAGE_NOTIFY" ? await De({
1185
+ target: n,
1186
+ taskId: M.id
1187
+ }) : await Ee({
1188
+ target: n,
1189
+ taskId: M.id
1190
+ }), qe(!1), Dt(), await s();
1191
+ } catch (e) {
1192
+ g(V(e));
1193
+ } finally {
1194
+ Qe(!1);
1195
+ }
1196
+ }
1197
+ async function z(e) {
1198
+ Qe(!0), g(null);
1199
+ try {
1200
+ await we(e), await s();
1201
+ } catch (e) {
1202
+ g(V(e));
1203
+ } finally {
1204
+ Qe(!1);
1205
+ }
1206
+ }
1207
+ ce(f, () => ({
1208
+ canAddSignerCurrentTask: ut,
1209
+ canRejectCurrentTask: st,
1210
+ canReturnCurrentTask: ot,
1211
+ canTransferCurrentTask: ct,
1212
+ deciding: p,
1213
+ handleApprove: F,
1214
+ hasCurrentTask: M !== null,
1215
+ openAdhocModal: Ot,
1216
+ openRejectModal: vt,
1217
+ openReturnModal: bt,
1218
+ openTransferModal: St
1219
+ }), [
1220
+ ut,
1221
+ st,
1222
+ ot,
1223
+ ct,
1224
+ r,
1225
+ M,
1226
+ p
1227
+ ]);
1228
+ let B = A === "STAGE_NOTIFY" || A === "COMPLETION_NOTIFY", jt = B && $e === "WEBHOOK" ? !tt.trim() : ze.length === 0, Mt = Ln.find((e) => e.id === Ye) ?? Ln[0], Nt = Rn.find((e) => e.id === $e) ?? Rn[0];
1229
+ return /* @__PURE__ */ O(Ce, { children: [
1230
+ /* @__PURE__ */ D(E, {
1231
+ component: "h2",
1232
+ variant: "h3",
1233
+ children: "任務"
1234
+ }),
1235
+ h ? /* @__PURE__ */ D(E, {
1236
+ color: "text-error",
1237
+ variant: "body",
1238
+ children: h
1239
+ }) : null,
1240
+ /* @__PURE__ */ D("div", {
1241
+ style: Mn,
1242
+ children: /* @__PURE__ */ D(be, {
1243
+ columns: pt,
1244
+ dataSource: ft,
1245
+ fullWidth: !0
1246
+ })
1247
+ }),
1248
+ dt.length > 0 ? /* @__PURE__ */ O(Ce, { children: [/* @__PURE__ */ D(E, {
1249
+ component: "h3",
1250
+ style: Nn,
1251
+ variant: "h3",
1252
+ children: "待生效的臨時設定"
1253
+ }), /* @__PURE__ */ D("div", {
1254
+ style: Mn,
1255
+ children: /* @__PURE__ */ D(be, {
1256
+ columns: ht,
1257
+ dataSource: mt,
1258
+ fullWidth: !0
1259
+ })
1260
+ })] }) : null,
1261
+ /* @__PURE__ */ O(T, {
1262
+ cancelText: "取消",
1263
+ confirmText: "送出同意",
1264
+ loading: p,
1265
+ modalType: "standard",
1266
+ onCancel: _t,
1267
+ onClose: _t,
1268
+ onConfirm: () => void I(),
1269
+ open: ne,
1270
+ showModalFooter: !0,
1271
+ showModalHeader: !0,
1272
+ size: "regular",
1273
+ supportingText: "可以留下同意的說明,內容會記錄在簽核歷程;不填也可以直接送出。",
1274
+ title: "簽核意見",
1275
+ children: [
1276
+ h ? /* @__PURE__ */ D(E, {
1277
+ color: "text-error",
1278
+ role: "alert",
1279
+ variant: "body",
1280
+ children: h
1281
+ }) : null,
1282
+ i !== null && i.summary.length > 0 ? /* @__PURE__ */ O("div", {
1283
+ style: kn,
1284
+ children: [/* @__PURE__ */ D(E, {
1285
+ variant: "body",
1286
+ children: "將一併送出的補填欄位:"
1287
+ }), i.summary.map((e) => /* @__PURE__ */ D(C, {
1288
+ title: e.label,
1289
+ children: /* @__PURE__ */ D(fe, { children: e.text })
1290
+ }, e.fieldKey))]
1291
+ }) : null,
1292
+ /* @__PURE__ */ D("div", {
1293
+ style: kn,
1294
+ children: /* @__PURE__ */ D(e, {
1295
+ label: "簽核意見",
1296
+ name: "approveComment",
1297
+ children: /* @__PURE__ */ D(xe, {
1298
+ autoFocus: !0,
1299
+ onChange: (e) => te(e.target.value),
1300
+ placeholder: "選填,例如補充核准的條件或提醒事項",
1301
+ ref: Pn,
1302
+ resize: "vertical",
1303
+ rows: 4,
1304
+ style: An,
1305
+ value: ee
1306
+ })
1307
+ })
1308
+ })
1309
+ ]
1310
+ }),
1311
+ /* @__PURE__ */ D(T, {
1312
+ cancelText: "取消",
1313
+ confirmButtonProps: {
1314
+ disabled: !nt,
1315
+ variant: "destructive-primary"
1316
+ },
1317
+ confirmText: "送出拒絕",
1318
+ loading: p,
1319
+ modalStatusType: "error",
1320
+ modalType: "standard",
1321
+ onCancel: yt,
1322
+ onClose: yt,
1323
+ onConfirm: () => void wt(),
1324
+ open: y,
1325
+ showModalFooter: !0,
1326
+ showModalHeader: !0,
1327
+ size: "regular",
1328
+ supportingText: "拒絕案件時必須留下原因,供發起人與後續追蹤查看。",
1329
+ title: "拒絕原因",
1330
+ children: /* @__PURE__ */ O("div", {
1331
+ style: kn,
1332
+ children: [/* @__PURE__ */ D(e, {
1333
+ label: "拒絕原因",
1334
+ name: "rejectReason",
1335
+ required: !0,
1336
+ children: /* @__PURE__ */ D(xe, {
1337
+ autoFocus: !0,
1338
+ onChange: (e) => {
1339
+ ie(e.target.value), ae(null);
1340
+ },
1341
+ placeholder: "請說明拒絕原因",
1342
+ ref: Pn,
1343
+ resize: "vertical",
1344
+ rows: 4,
1345
+ style: An,
1346
+ type: v ? "error" : "default",
1347
+ value: re
1348
+ })
1349
+ }), v ? /* @__PURE__ */ D(E, {
1350
+ color: "text-error",
1351
+ variant: "body",
1352
+ children: v
1353
+ }) : null]
1354
+ })
1355
+ }),
1356
+ /* @__PURE__ */ D(T, {
1357
+ cancelText: "取消",
1358
+ confirmButtonProps: { disabled: !Te },
1359
+ confirmText: "送出轉派",
1360
+ loading: p,
1361
+ modalType: "standard",
1362
+ onCancel: Ct,
1363
+ onClose: Ct,
1364
+ onConfirm: () => void Tt(),
1365
+ open: Ne,
1366
+ showModalFooter: !0,
1367
+ showModalHeader: !0,
1368
+ size: "regular",
1369
+ supportingText: "轉派後,原任務會保留轉派紀錄,新的待簽任務會指派給指定成員。",
1370
+ title: "轉派簽核",
1371
+ children: /* @__PURE__ */ O("div", {
1372
+ style: jn,
1373
+ children: [/* @__PURE__ */ D(e, {
1374
+ label: "轉派對象",
1375
+ name: "transferToMemberId",
1376
+ required: !0,
1377
+ children: /* @__PURE__ */ D(ue, {
1378
+ asyncData: !0,
1379
+ disabledOptionsFilter: !0,
1380
+ emptyText: "沒有符合的成員",
1381
+ inputProps: {
1382
+ autoCapitalize: "none",
1383
+ autoCorrect: "off",
1384
+ name: "transfer-member-search",
1385
+ spellCheck: !1
1386
+ },
1387
+ loading: Ae,
1388
+ loadingText: "搜尋成員中...",
1389
+ mode: "single",
1390
+ onChange: (e) => ke(Wt(e)),
1391
+ onSearch: L,
1392
+ onSearchTextChange: (e) => ke(Gt(e, je)),
1393
+ onVisibilityChange: (e) => {
1394
+ e && L("");
1395
+ },
1396
+ options: [...je],
1397
+ placeholder: "搜尋姓名或信箱",
1398
+ searchDebounceTime: 300,
1399
+ value: Te
1400
+ })
1401
+ }), /* @__PURE__ */ D(e, {
1402
+ label: "轉派說明",
1403
+ name: "transferComment",
1404
+ children: /* @__PURE__ */ D(xe, {
1405
+ onChange: (e) => Se(e.target.value),
1406
+ placeholder: "可補充轉派原因",
1407
+ ref: Pn,
1408
+ resize: "vertical",
1409
+ rows: 4,
1410
+ style: An,
1411
+ value: ye
1412
+ })
1413
+ })]
1414
+ })
1415
+ }),
1416
+ /* @__PURE__ */ D(T, {
1417
+ cancelText: "取消",
1418
+ confirmButtonProps: { disabled: !P || lt && !rt },
1419
+ confirmText: "送出退回",
1420
+ loading: p,
1421
+ modalType: "standard",
1422
+ onCancel: xt,
1423
+ onClose: xt,
1424
+ onConfirm: () => void Et(),
1425
+ open: me,
1426
+ showModalFooter: !0,
1427
+ showModalHeader: !0,
1428
+ size: "regular",
1429
+ supportingText: "退回後,流程會回到指定節點並等待重新處理。",
1430
+ title: "退回簽核",
1431
+ children: /* @__PURE__ */ O("div", {
1432
+ style: jn,
1433
+ children: [/* @__PURE__ */ D(e, {
1434
+ label: "退回節點",
1435
+ name: "returnTargetNodeId",
1436
+ required: !0,
1437
+ children: /* @__PURE__ */ D(ve, {
1438
+ clearable: !1,
1439
+ fullWidth: !0,
1440
+ onChange: (e) => _e(e?.id ?? null),
1441
+ options: [...at],
1442
+ placeholder: "選擇退回節點",
1443
+ value: P
1444
+ })
1445
+ }), /* @__PURE__ */ D(e, {
1446
+ hintText: lt ? "此關卡設定退回時必須填寫意見。" : void 0,
1447
+ label: "退回說明",
1448
+ name: "returnComment",
1449
+ required: lt,
1450
+ children: /* @__PURE__ */ D(xe, {
1451
+ onChange: (e) => w(e.target.value),
1452
+ placeholder: lt ? "請說明退回原因" : "可補充需要修改的內容",
1453
+ ref: Pn,
1454
+ resize: "vertical",
1455
+ rows: 4,
1456
+ style: An,
1457
+ value: le
1458
+ })
1459
+ })]
1460
+ })
1461
+ }),
1462
+ /* @__PURE__ */ D(T, {
1463
+ cancelText: "取消",
1464
+ confirmButtonProps: { disabled: jt },
1465
+ confirmText: "送出",
1466
+ loading: Ze,
1467
+ modalType: "standard",
1468
+ onCancel: kt,
1469
+ onClose: kt,
1470
+ onConfirm: () => void At(),
1471
+ open: Ke,
1472
+ showModalFooter: !0,
1473
+ showModalHeader: !0,
1474
+ size: "regular",
1475
+ supportingText: In[A],
1476
+ title: Fn[A],
1477
+ children: /* @__PURE__ */ O("div", {
1478
+ style: jn,
1479
+ children: [
1480
+ B ? /* @__PURE__ */ D(e, {
1481
+ label: "通知時機",
1482
+ name: "adhocNotifyMode",
1483
+ required: !0,
1484
+ children: /* @__PURE__ */ D(ve, {
1485
+ clearable: !1,
1486
+ fullWidth: !0,
1487
+ onChange: (e) => Je(e?.id === "COMPLETION_NOTIFY" ? "COMPLETION_NOTIFY" : "STAGE_NOTIFY"),
1488
+ options: [{
1489
+ id: "STAGE_NOTIFY",
1490
+ name: Fn.STAGE_NOTIFY
1491
+ }, {
1492
+ id: "COMPLETION_NOTIFY",
1493
+ name: Fn.COMPLETION_NOTIFY
1494
+ }],
1495
+ value: {
1496
+ id: A,
1497
+ name: Fn[A]
1498
+ }
1499
+ })
1500
+ }) : null,
1501
+ B ? /* @__PURE__ */ D(e, {
1502
+ label: "通知對象類型",
1503
+ name: "adhocTargetKind",
1504
+ required: !0,
1505
+ children: /* @__PURE__ */ D(ve, {
1506
+ clearable: !1,
1507
+ fullWidth: !0,
1508
+ onChange: (e) => et(e?.id === "WEBHOOK" ? "WEBHOOK" : "MEMBER"),
1509
+ options: [...Rn],
1510
+ value: Nt
1511
+ })
1512
+ }) : null,
1513
+ B && $e === "WEBHOOK" ? /* @__PURE__ */ D(e, {
1514
+ label: "Webhook URL",
1515
+ name: "adhocWebhookUrl",
1516
+ required: !0,
1517
+ children: /* @__PURE__ */ D(pe, {
1518
+ fullWidth: !0,
1519
+ onChange: (e) => j(e.target.value),
1520
+ placeholder: "https://example.com/webhook",
1521
+ value: tt
1522
+ })
1523
+ }) : /* @__PURE__ */ D(e, {
1524
+ label: B ? "通知對象" : "簽核對象",
1525
+ name: "adhocMemberId",
1526
+ required: !0,
1527
+ children: /* @__PURE__ */ D(ue, {
1528
+ asyncData: !0,
1529
+ disabledOptionsFilter: !0,
1530
+ emptyText: "沒有符合的成員",
1531
+ inputProps: {
1532
+ autoCapitalize: "none",
1533
+ autoCorrect: "off",
1534
+ name: "adhoc-member-search",
1535
+ spellCheck: !1
1536
+ },
1537
+ loading: He,
1538
+ loadingText: "搜尋成員中...",
1539
+ menuMaxHeight: 320,
1540
+ mode: "multiple",
1541
+ onChange: (e) => Be(e.map(Wt).filter(Ut)),
1542
+ onSearch: R,
1543
+ onVisibilityChange: (e) => {
1544
+ e && R("");
1545
+ },
1546
+ options: [...We],
1547
+ overflowStrategy: "wrap",
1548
+ placeholder: "搜尋姓名或信箱,可加入多位",
1549
+ searchDebounceTime: 300,
1550
+ value: [...ze]
1551
+ })
1552
+ }),
1553
+ A === "PRE_APPROVAL" ? /* @__PURE__ */ D(e, {
1554
+ label: "拒簽處理方式",
1555
+ name: "adhocOnReject",
1556
+ required: !0,
1557
+ children: /* @__PURE__ */ D(ve, {
1558
+ clearable: !1,
1559
+ fullWidth: !0,
1560
+ onChange: (e) => Xe(e?.id === "RETURN_TO_ORIGIN" ? "RETURN_TO_ORIGIN" : "REJECT_INSTANCE"),
1561
+ options: [...Ln],
1562
+ value: Mt
1563
+ })
1564
+ }) : null,
1565
+ B ? null : /* @__PURE__ */ D(e, {
1566
+ label: "說明",
1567
+ name: "adhocComment",
1568
+ children: /* @__PURE__ */ D(xe, {
1569
+ onChange: (e) => Re(e.target.value),
1570
+ placeholder: "可補充原因",
1571
+ ref: Pn,
1572
+ resize: "vertical",
1573
+ rows: 3,
1574
+ style: An,
1575
+ value: Fe
1576
+ })
1577
+ })
1578
+ ]
1579
+ })
1580
+ })
1581
+ ] });
1582
+ });
1583
+ function Bn(e, t) {
1584
+ try {
1585
+ let n = JSON.parse(e.targetValueJson);
1586
+ if (n.memberIds?.length) return n.memberIds.map((e) => W(e, t)).join("、");
1587
+ if (n.webhookUrl) return n.webhookUrl;
1588
+ if (n.positionId) return `職位 ${n.positionId}`;
1589
+ if (n.orgUnitId) return `部門 ${n.orgUnitId}`;
1590
+ } catch {}
1591
+ return e.targetKind;
1592
+ }
1593
+ function Vn(e, t) {
1594
+ if (e.isAdhoc || e.status !== "PENDING" && e.status !== "IN_PROGRESS") return 0;
1595
+ let n = t?.nodes.find((t) => t.id === e.nodeId);
1596
+ return n?.type === "userTask" ? nt(n).size : 0;
1597
+ }
1598
+ // src/views/instances/detail/sections/InstanceSignaturesSection.tsx
1599
+ var Hn = {
1600
+ display: "grid",
1601
+ gap: 16
1602
+ };
1603
+ function Un({ signatureVerification: e, signatures: n }) {
1604
+ let r = b(() => n.map((e) => ({
1605
+ algorithm: e.algorithm,
1606
+ hashLabel: H(e.signedPayloadHash),
1607
+ key: e.id,
1608
+ keyVersion: e.keyVersion,
1609
+ signedAtLabel: t(e.signedAt),
1610
+ signerMemberId: e.signerMemberId
1611
+ })), [n]), i = b(() => [
1612
+ {
1613
+ dataIndex: "signerMemberId",
1614
+ key: "signerMemberId",
1615
+ title: "簽章者",
1616
+ width: 160
1617
+ },
1618
+ {
1619
+ dataIndex: "algorithm",
1620
+ key: "algorithm",
1621
+ title: "演算法",
1622
+ width: 150
1623
+ },
1624
+ {
1625
+ dataIndex: "keyVersion",
1626
+ key: "keyVersion",
1627
+ title: "Key 版本",
1628
+ width: 100
1629
+ },
1630
+ {
1631
+ dataIndex: "hashLabel",
1632
+ key: "hashLabel",
1633
+ title: "Payload Hash",
1634
+ width: 180
1635
+ },
1636
+ {
1637
+ dataIndex: "signedAtLabel",
1638
+ key: "signedAtLabel",
1639
+ title: "簽章時間",
1640
+ width: 220
1641
+ }
1642
+ ], []);
1643
+ return /* @__PURE__ */ O("div", {
1644
+ style: Hn,
1645
+ children: [
1646
+ /* @__PURE__ */ D(E, {
1647
+ component: "h2",
1648
+ variant: "h3",
1649
+ children: "簽章"
1650
+ }),
1651
+ /* @__PURE__ */ D(E, {
1652
+ color: e?.valid ? "text-success" : "text-error",
1653
+ variant: "body",
1654
+ children: e ? e.valid ? `簽章鏈已驗證,共 ${e.checkedCount} 筆。` : `簽章鏈驗證失敗:${e.errors.join("、")}` : "尚無簽章紀錄。"
1655
+ }),
1656
+ r.length > 0 ? /* @__PURE__ */ D(be, {
1657
+ columns: i,
1658
+ dataSource: r,
1659
+ fullWidth: !0
1660
+ }) : null
1661
+ ]
1662
+ });
1663
+ }
1664
+ // src/views/instances/detail/sections/InstanceHistorySection.tsx
1665
+ var Wn = {
1666
+ display: "grid",
1667
+ gap: 16
1668
+ }, Gn = {
1669
+ cursor: "help",
1670
+ textDecoration: "underline dotted",
1671
+ textUnderlineOffset: 3
1672
+ }, Kn = {
1673
+ borderLeftColor: "var(--mzn-color-border)",
1674
+ borderLeftStyle: "solid",
1675
+ borderLeftWidth: 2,
1676
+ fontSize: "var(--mzn-typography-h3-font-size)",
1677
+ lineHeight: "var(--mzn-typography-h3-line-height)",
1678
+ marginTop: 4,
1679
+ paddingLeft: 8,
1680
+ whiteSpace: "pre-wrap"
1681
+ }, qn = { color: "var(--mzn-color-text-secondary)" }, Jn = {
1682
+ ...Kn,
1683
+ borderLeftColor: "var(--mzn-color-text-error)",
1684
+ color: "var(--mzn-color-text-error)"
1685
+ };
1686
+ function Yn(...e) {
1687
+ return e.filter((e) => B(e ?? null)).join(" ");
1688
+ }
1689
+ var Xn = y(function({ className: e, descriptionParts: t, error: n, forcePending: r = !1, index: i = 0, orientation: a, status: o = "pending", title: s, type: c = "number", ...l }, u) {
1690
+ let d = r ? "pending" : o, f = t.filter((e) => e.type !== "comment"), p = t.filter((e) => e.type === "comment");
1691
+ return /* @__PURE__ */ O("div", {
1692
+ ...l,
1693
+ className: Yn(F.host, c === "dot" ? F.dot : null, n && d !== "processing" ? F.error : null, a === "horizontal" ? F.horizontal : null, c === "number" ? F.number : null, d === "pending" ? F.pending : null, d === "processing" ? F.processing : null, n && d === "processing" ? F.processingError : null, !n && d === "succeeded" ? F.succeeded : null, a === "vertical" ? F.vertical : null, e),
1694
+ ref: u,
1695
+ children: [c === "dot" ? /* @__PURE__ */ D("span", { className: Yn(F.statusIndicator, F.statusIndicatorDot) }) : /* @__PURE__ */ D("span", {
1696
+ className: F.statusIndicator,
1697
+ children: i + 1
1698
+ }), /* @__PURE__ */ O("div", {
1699
+ className: F.textContainer,
1700
+ children: [
1701
+ /* @__PURE__ */ O(E, {
1702
+ className: F.title,
1703
+ variant: "label-primary-highlight",
1704
+ children: [s, /* @__PURE__ */ D("span", { className: F.titleConnectLine })]
1705
+ }),
1706
+ f.length > 0 ? /* @__PURE__ */ D(E, {
1707
+ className: F.description,
1708
+ component: "div",
1709
+ variant: "body",
1710
+ children: f.map((e, t) => /* @__PURE__ */ O(ae, { children: [t > 0 ? " · " : null, Zn(e)] }, `${e.type}-${t}`))
1711
+ }) : null,
1712
+ p.map((e, t) => /* @__PURE__ */ O(E, {
1713
+ style: e.tone === "danger" ? Jn : Kn,
1714
+ variant: "body",
1715
+ children: [/* @__PURE__ */ O("span", {
1716
+ style: e.tone === "danger" ? void 0 : qn,
1717
+ children: [e.label, ":"]
1718
+ }), e.text]
1719
+ }, `comment-${t}`))
1720
+ ]
1721
+ })]
1722
+ });
1723
+ });
1724
+ function Zn(e) {
1725
+ return e.type === "text" ? e.text : e.email?.trim() ? /* @__PURE__ */ O(Ce, { children: [
1726
+ e.prefix,
1727
+ ":",
1728
+ /* @__PURE__ */ D(Se, {
1729
+ title: e.email,
1730
+ children: ({ ref: t, ...n }) => /* @__PURE__ */ D("span", {
1731
+ ...n,
1732
+ "data-testid": e.memberId ? `member-tooltip-${e.memberId}` : void 0,
1733
+ ref: t,
1734
+ style: Gn,
1735
+ children: e.label
1736
+ })
1737
+ })
1738
+ ] }) : `${e.prefix}:${e.label}`;
1739
+ }
1740
+ function Qn({ activityLogs: e, formSchema: t = null, instanceState: n, memberProfilesById: r, signatureVerification: i, signaturesById: a, taskDecisions: o = null, taskDecisionsByTaskId: s, tasks: c, workflowSnapshot: l, workflowTokens: u }) {
1741
+ let d = b(() => hn(e, c, u, l, n, r, s, a, i, t, o), [
1742
+ e,
1743
+ t,
1744
+ n,
1745
+ r,
1746
+ i,
1747
+ a,
1748
+ o,
1749
+ s,
1750
+ c,
1751
+ l,
1752
+ u
1753
+ ]), f = Y(d), p = d.map((e) => ({
1754
+ ...e,
1755
+ descriptionParts: e.descriptionParts.filter(J)
1756
+ }));
1757
+ return /* @__PURE__ */ O("div", {
1758
+ style: Wn,
1759
+ children: [/* @__PURE__ */ D(E, {
1760
+ component: "h2",
1761
+ variant: "h3",
1762
+ children: "歷程"
1763
+ }), p.length > 0 ? /* @__PURE__ */ D(ye, {
1764
+ currentStep: f,
1765
+ orientation: "vertical",
1766
+ type: "dot",
1767
+ children: p.map((e) => /* @__PURE__ */ D(Xn, {
1768
+ descriptionParts: e.descriptionParts,
1769
+ error: e.error,
1770
+ forcePending: e.forcePending,
1771
+ title: e.title
1772
+ }, e.id))
1773
+ }) : /* @__PURE__ */ D(E, {
1774
+ color: "text-neutral",
1775
+ variant: "body",
1776
+ children: "尚無歷程紀錄。"
1777
+ })]
1778
+ });
1779
+ }
1780
+ // src/views/instances/detail/sections/InstanceWebhookDeliveriesSection.tsx
1781
+ var $n = {
1782
+ display: "grid",
1783
+ gap: 16
1784
+ }, er = {
1785
+ display: "grid",
1786
+ gap: 2
1787
+ }, tr = {
1788
+ overflowWrap: "anywhere",
1789
+ whiteSpace: "pre-wrap"
1790
+ };
1791
+ function nr({ deliveries: e, onRetry: t, readNodeLabel: n }) {
1792
+ let [r, i] = x(null), [a, o] = x(!1), [s, c] = x(null), l = b(() => e.map((e) => ({
1793
+ delivery: e,
1794
+ key: e.id
1795
+ })), [e]), u = b(() => [
1796
+ {
1797
+ key: "endpoint",
1798
+ render: ({ delivery: e }) => /* @__PURE__ */ O("div", {
1799
+ style: er,
1800
+ children: [/* @__PURE__ */ D(E, {
1801
+ component: "span",
1802
+ variant: "body",
1803
+ children: e.endpointLabel ?? e.endpointKey
1804
+ }), /* @__PURE__ */ O(E, {
1805
+ color: "text-neutral",
1806
+ component: "span",
1807
+ variant: "caption",
1808
+ children: [
1809
+ e.endpointKey,
1810
+ "@",
1811
+ e.endpointVersion,
1812
+ " ·",
1813
+ " ",
1814
+ n(e.nodeId)
1815
+ ]
1816
+ })]
1817
+ }),
1818
+ title: "外部系統",
1819
+ width: 240
1820
+ },
1821
+ {
1822
+ key: "status",
1823
+ render: ({ delivery: e }) => /* @__PURE__ */ D(rr, { status: e.status }),
1824
+ title: "狀態",
1825
+ width: 120
1826
+ },
1827
+ {
1828
+ key: "attemptCount",
1829
+ render: ({ delivery: e }) => /* @__PURE__ */ D(E, {
1830
+ component: "span",
1831
+ variant: "body",
1832
+ children: e.attemptCount
1833
+ }),
1834
+ title: "嘗試次數",
1835
+ width: 100
1836
+ },
1837
+ {
1838
+ key: "lastError",
1839
+ render: ({ delivery: e }) => e.lastErrorCode && e.status !== "SENT" ? /* @__PURE__ */ O("div", {
1840
+ style: er,
1841
+ children: [/* @__PURE__ */ D(E, {
1842
+ color: "text-error",
1843
+ component: "span",
1844
+ variant: "body",
1845
+ children: e.lastErrorCode
1846
+ }), e.lastErrorDetail ? /* @__PURE__ */ D(E, {
1847
+ color: "text-neutral",
1848
+ component: "span",
1849
+ style: tr,
1850
+ variant: "caption",
1851
+ children: e.lastErrorDetail
1852
+ }) : null]
1853
+ }) : /* @__PURE__ */ D(E, {
1854
+ color: "text-neutral",
1855
+ component: "span",
1856
+ variant: "body",
1857
+ children: "—"
1858
+ }),
1859
+ title: "最後錯誤",
1860
+ width: 280
1861
+ },
1862
+ {
1863
+ key: "time",
1864
+ render: ({ delivery: e }) => /* @__PURE__ */ D(E, {
1865
+ component: "span",
1866
+ variant: "body",
1867
+ children: ir(e)
1868
+ }),
1869
+ title: "時間",
1870
+ width: 220
1871
+ }
1872
+ ], [n]), d = b(() => ({
1873
+ render: ({ delivery: e }) => e.status === "FAILED" && e.attemptCount > 0 ? [{
1874
+ disabled: () => a,
1875
+ icon: Qe,
1876
+ iconType: "leading",
1877
+ name: "重新傳送",
1878
+ onClick: () => {
1879
+ c(null), i(e);
1880
+ }
1881
+ }] : [],
1882
+ variant: "base-secondary",
1883
+ width: 140
1884
+ }), [a]);
1885
+ async function f() {
1886
+ if (r) {
1887
+ o(!0), c(null);
1888
+ try {
1889
+ await t(r), i(null);
1890
+ } catch (e) {
1891
+ i(null), c(e instanceof Error && e.message ? e.message : "重新傳送失敗,請稍後再試。");
1892
+ } finally {
1893
+ o(!1);
1894
+ }
1895
+ }
1896
+ }
1897
+ return /* @__PURE__ */ O("div", {
1898
+ style: $n,
1899
+ children: [
1900
+ /* @__PURE__ */ D(E, {
1901
+ component: "h2",
1902
+ variant: "h3",
1903
+ children: "外部系統通知"
1904
+ }),
1905
+ s ? /* @__PURE__ */ D(E, {
1906
+ color: "text-error",
1907
+ variant: "body",
1908
+ children: s
1909
+ }) : null,
1910
+ l.length > 0 ? /* @__PURE__ */ D(be, {
1911
+ actions: d,
1912
+ columns: u,
1913
+ dataSource: l,
1914
+ fullWidth: !0
1915
+ }) : /* @__PURE__ */ D(E, {
1916
+ color: "text-neutral",
1917
+ variant: "body",
1918
+ children: "此案件沒有外部系統通知。"
1919
+ }),
1920
+ /* @__PURE__ */ D(T, {
1921
+ cancelText: "取消",
1922
+ confirmText: "重新傳送",
1923
+ loading: a,
1924
+ modalStatusType: "info",
1925
+ modalType: "standard",
1926
+ onCancel: () => i(null),
1927
+ onClose: () => i(null),
1928
+ onConfirm: () => void f(),
1929
+ open: !!r,
1930
+ showModalFooter: !0,
1931
+ showModalHeader: !0,
1932
+ supportingText: "會以相同的投遞編號重新送出,接收端可據此避免重複處理。",
1933
+ title: "重新傳送通知",
1934
+ children: /* @__PURE__ */ O(E, {
1935
+ variant: "body",
1936
+ children: [
1937
+ "確定要重新通知「",
1938
+ r?.endpointLabel ?? r?.endpointKey ?? "",
1939
+ "」嗎?"
1940
+ ]
1941
+ })
1942
+ })
1943
+ ]
1944
+ });
1945
+ }
1946
+ function rr({ status: e }) {
1947
+ return e === "SENT" ? /* @__PURE__ */ D(de, {
1948
+ size: "sub",
1949
+ text: "已送達",
1950
+ variant: "dot-success"
1951
+ }) : e === "FAILED" ? /* @__PURE__ */ D(de, {
1952
+ size: "sub",
1953
+ text: "失敗",
1954
+ variant: "dot-error"
1955
+ }) : /* @__PURE__ */ D(de, {
1956
+ size: "sub",
1957
+ text: e === "PENDING" ? "等待傳送" : "傳送中",
1958
+ variant: "dot-info"
1959
+ });
1960
+ }
1961
+ function ir(e) {
1962
+ return e.sentAt ? `送達:${t(e.sentAt)}` : e.status === "PENDING" && e.nextRetryAt ? `下次重試:${t(e.nextRetryAt)}` : e.lastAttemptAt ? `最後嘗試:${t(e.lastAttemptAt)}` : `建立:${t(e.createdAt)}`;
1963
+ }
1964
+ // src/views/instances/viewer-field-access.ts
1965
+ function ar(e, t) {
1966
+ let n = new Map(t.map((e) => [e.id, e]));
1967
+ return new Set(e.filter((e) => e.eventType === "TASK_CREATED").map((e) => e.taskId === null ? void 0 : n.get(e.taskId)).filter((e) => e !== void 0 && !e.isAdhoc).map((e) => e.nodeId));
1968
+ }
1969
+ function or({ activityLogs: e, actingTask: t, instance: n, tasks: r }) {
1970
+ let i = n.workflowSnapshot;
1971
+ return M({
1972
+ definition: i,
1973
+ fieldKeys: (n.formDefinitionSnapshot.schema?.fields ?? []).map((e) => e.fieldKey),
1974
+ isAdhocTask: t?.isAdhoc ?? !1,
1975
+ nodeId: t?.nodeId ?? null,
1976
+ revealedFieldKeys: rt(i, ar(e, r))
1977
+ });
1978
+ }
1979
+ // src/views/instances/detail/InstanceDetailView.tsx
1980
+ function sr(e) {
1981
+ return `還有 ${new Set(Object.keys(e).map(it)).size} 個補填欄位需要完成`;
1982
+ }
1983
+ var cr = 3e3, lr = 40, ur = 184, dr = 96, fr = {
1984
+ display: "grid",
1985
+ gap: 16
1986
+ }, pr = {
1987
+ background: "#f8fafc",
1988
+ border: "1px solid #e2e8f0",
1989
+ borderRadius: 8,
1990
+ height: "min(64vh, 620px)",
1991
+ minHeight: 440,
1992
+ overflow: "hidden",
1993
+ width: "min(80vw, 1040px)"
1994
+ }, mr = {
1995
+ background: "#ffffff",
1996
+ border: "1px solid #cbd5e1",
1997
+ borderRadius: 8,
1998
+ boxShadow: "0 8px 18px rgba(15, 23, 42, 0.08)",
1999
+ display: "grid",
2000
+ gap: 6,
2001
+ minHeight: 82,
2002
+ padding: 12,
2003
+ width: 184
2004
+ }, hr = {
2005
+ borderRadius: 999,
2006
+ fontSize: 12,
2007
+ fontWeight: 600,
2008
+ justifySelf: "start",
2009
+ lineHeight: "18px",
2010
+ padding: "0 8px"
2011
+ }, gr = {
2012
+ color: "#64748b",
2013
+ fontSize: 12,
2014
+ overflow: "hidden",
2015
+ textOverflow: "ellipsis",
2016
+ whiteSpace: "nowrap"
2017
+ }, _r = { opacity: 0 }, vr = {
2018
+ display: "flex",
2019
+ flexWrap: "wrap",
2020
+ gap: 8
2021
+ }, yr = {
2022
+ alignItems: "center",
2023
+ background: "#ffffff",
2024
+ border: "1px solid #cbd5e1",
2025
+ borderRadius: 8,
2026
+ color: "#334155",
2027
+ display: "inline-flex",
2028
+ fontSize: 12,
2029
+ fontWeight: 600,
2030
+ gap: 6,
2031
+ lineHeight: "20px",
2032
+ padding: "4px 8px"
2033
+ }, br = {
2034
+ display: "grid",
2035
+ gap: 16
2036
+ }, xr = { workflowRuntime: jr };
2037
+ function Sr({ instanceId: i, showAttachments: o = !0, showForm: c = !0, showHistory: l = !0, showSignatures: u = !0, showTasks: d = !0, showWebhookDeliveries: f = !0 }) {
2038
+ let { member: ae } = n(), y = ae?.memberId ?? null, ce = f && r(ae), [ue, de] = x([]), [C, fe] = x(null), [w, pe] = x([]), [ve, ye] = x([]), [be, Se] = x([]), [we, Ee] = x([]), [De, Oe] = x(null), [k, Ie] = x([]), [Le, Re] = x([]), [Ve, Ge] = x([]), [Ke, A] = x(null), [Je, Qe] = x(!0), [tt, j] = x(!1), [rt, it] = x(!1), [M, ot] = x(!1), [ct, dt] = x(!1), [P, pt] = x(""), [mt, ht] = x(!1), [gt, F] = x({}), [I, vt] = x({}), { clearAfterResubmit: yt, comment: bt, setComment: xt } = bn(i), [St, Ct] = x({}), [L, Tt] = x(null), [Et, Ot] = x(null), [kt, R] = x([]), At = P.trim(), z = le(null), jt = le(0), Mt = we.some((e) => e.status === "PENDING" || e.status === "DELIVERY_IN_PROGRESS");
2039
+ se(() => {
2040
+ Q();
2041
+ }, [y, i]), se(() => {
2042
+ if (!ce || !Mt || jt.current >= lr) return;
2043
+ let e = setTimeout(() => {
2044
+ jt.current += 1, fn();
2045
+ }, cr);
2046
+ return () => clearTimeout(e);
2047
+ }, [
2048
+ ce,
2049
+ Mt,
2050
+ we
2051
+ ]), se(() => {
2052
+ vt(C?.formData ?? {}), Ct({});
2053
+ }, [C]);
2054
+ let Nt = oe((e, t) => {
2055
+ Ct((n) => {
2056
+ let r = n[e];
2057
+ return r?.hasValue === t.hasValue && r.status === t.status ? n : {
2058
+ ...n,
2059
+ [e]: {
2060
+ hasValue: t.hasValue,
2061
+ status: t.status
2062
+ }
2063
+ };
2064
+ });
2065
+ }, []), H = b(() => Bt(k, y), [y, k]), U = b(() => H && C ? C.workflowSnapshot.nodes.find((e) => e.id === H.nodeId) ?? null : null, [H, C]), Ft = U?.type === "userTask" && U.data.returnBehavior.allowReturn, It = U?.type === "userTask" && U.data.allowReject !== !1, Rt = U?.type === "userTask" && U.data.allowTransfer !== !1, zt = U?.type === "userTask" && U.data.allowAddSigner, Vt = !(!C || C.initiatorMemberId !== y || C.state !== "RUNNING" && C.state !== "RETURNED"), Ht = !!(C && C.initiatorMemberId === y && C.state === "RETURNED"), G = b(() => H && !H.isAdhoc && U?.type === "userTask" && nt(U).size > 0 ? U : null, [H, U]), Ut = G ? H?.id ?? null : null, [Wt, Gt] = x({}), [K, q] = x({}), [Kt, J] = x(!1);
2066
+ se(() => {
2067
+ Gt({}), q({}), J(!1);
2068
+ }, [Ut]);
2069
+ let Y = C?.formDefinitionSnapshot.schema ?? null, X = b(() => G && Y ? p(Y, G) : null, [G, Y]), Z = b(() => X && C ? N(X.fields, {
2070
+ ...C.formData,
2071
+ ...Wt
2072
+ }) : null, [
2073
+ Wt,
2074
+ X,
2075
+ C
2076
+ ]), qt = b(() => G && X && Z && C ? g({
2077
+ draft: Wt,
2078
+ node: G,
2079
+ schema: X,
2080
+ stored: C.formData,
2081
+ values: Z
2082
+ }) : {}, [
2083
+ Wt,
2084
+ G,
2085
+ X,
2086
+ Z,
2087
+ C
2088
+ ]), Jt = b(() => C ? or({
2089
+ activityLogs: ue,
2090
+ actingTask: H,
2091
+ instance: C,
2092
+ tasks: k
2093
+ }) : void 0, [
2094
+ ue,
2095
+ H,
2096
+ C,
2097
+ k
2098
+ ]), Yt = b(() => C ? ne(C.workflowSnapshot, G) : void 0, [G, C]), Xt = b(() => new Map(Ve.map((e) => [e.memberId, e])), [Ve]), Zt = _t(b(() => Y ? re(Y, qt) : [], [qt, Y])), Qt = b(() => G && Z && Y && C?.formDataFingerprint ? {
2099
+ expectedFormDataFingerprint: C.formDataFingerprint,
2100
+ formData: m(qt, G),
2101
+ summary: v(Y, G, qt, new Map([...Xt.keys()].map((e) => [e, W(e, Xt)])), Zt)
2102
+ } : null, [
2103
+ qt,
2104
+ G,
2105
+ Zt,
2106
+ Z,
2107
+ C,
2108
+ Xt,
2109
+ Y
2110
+ ]);
2111
+ function $t(e) {
2112
+ if (!G) return;
2113
+ let t = nt(G), n = Object.entries(e).filter(([e, n]) => t.has(e) && JSON.stringify(n) !== JSON.stringify(Z?.[e]));
2114
+ Gt((e) => ({
2115
+ ...e,
2116
+ ...Object.fromEntries(n)
2117
+ })), q({});
2118
+ }
2119
+ async function en() {
2120
+ if (G && !C?.formDataFingerprint) me.error("無法確認表單版本,請重新整理頁面後再同意。");
2121
+ else {
2122
+ if (G && Z && Y && C?.formDefinitionSnapshot.uiSchema) {
2123
+ it(!0);
2124
+ let e = await st({
2125
+ schema: h(Y, G),
2126
+ uiSchema: C.formDefinitionSnapshot.uiSchema,
2127
+ values: Z
2128
+ }).catch((e) => (me.error(V(e)), null)).finally(() => it(!1));
2129
+ if (!e) return;
2130
+ if (!e.valid) {
2131
+ q(e.errors), e.firstInvalidFieldKey && at(e.firstInvalidFieldKey), me.warning(sr(e.errors));
2132
+ return;
2133
+ }
2134
+ }
2135
+ z.current?.handleApprove();
2136
+ }
2137
+ }
2138
+ function tn(e) {
2139
+ if (!G || !Y) return !1;
2140
+ if (ie(e)) return J(!0), !0;
2141
+ let t = ee(e, Y, G);
2142
+ return t ? (q(t), at(Object.keys(t)[0] ?? ""), me.warning(sr(t)), !0) : !1;
2143
+ }
2144
+ async function nn() {
2145
+ await Q(), J(!1);
2146
+ }
2147
+ let rn = b(() => s(w), [w]), an = b(() => new Map(be.map((e) => [e.id, e])), [be]), on = b(() => C ? Dr(C.workflowSnapshot) : null, [C]), sn = b(() => C && on ? Er(on, k, Le, C.state) : [], [
2148
+ C,
2149
+ on,
2150
+ k,
2151
+ Le
2152
+ ]), cn = b(() => on ? Or(on) : [], [on]), ln = b(() => C ? wr(C.workflowSnapshot) : [], [C]);
2153
+ async function Q() {
2154
+ Qe(!0), A(null);
2155
+ try {
2156
+ let e = await Me(i);
2157
+ de(e.activityLogs), fe(e.instance), Ie(e.tasks), Re(e.workflowTokens);
2158
+ let t = await ke(e.instance.id), [n, r, a, o, s] = await Promise.all([
2159
+ yn(e.tasks),
2160
+ vn({
2161
+ ...e,
2162
+ adhocDirectives: t
2163
+ }),
2164
+ Ae(e.instance.id),
2165
+ Fe(e.instance.id),
2166
+ un(e.instance.id)
2167
+ ]);
2168
+ pe(n), Ge(r), ye(a), Se(o.signatures), Oe(o.verification), R(t), Ee(s);
2169
+ } catch (e) {
2170
+ A(V(e));
2171
+ } finally {
2172
+ Qe(!1);
2173
+ }
2174
+ }
2175
+ async function un(e) {
2176
+ return ce ? je(e).catch(() => []) : [];
2177
+ }
2178
+ async function dn(e) {
2179
+ await Be(e.id), jt.current = 0, await Q();
2180
+ }
2181
+ async function fn() {
2182
+ let e = await un(i);
2183
+ e.some((e) => e.status === "PENDING" || e.status === "DELIVERY_IN_PROGRESS") ? Ee(e) : await Q();
2184
+ }
2185
+ async function pn(e, t) {
2186
+ if (!y) throw Error("尚未登入,無法上傳附件");
2187
+ return { id: (await He({
2188
+ file: t,
2189
+ formFieldPath: `form.${e.fieldKey}`
2190
+ })).id };
2191
+ }
2192
+ async function mn(e) {
2193
+ if (!y) return;
2194
+ let t = await Ne({ id: e.id });
2195
+ window.open(t, "_blank", "noopener,noreferrer");
2196
+ }
2197
+ async function hn(e) {
2198
+ if (!y) return;
2199
+ let t = await Pe({ id: e.id });
2200
+ Tt(e), Ot(t);
2201
+ }
2202
+ async function gn() {
2203
+ if (y && C && Vt) {
2204
+ j(!0), A(null), F({});
2205
+ try {
2206
+ await Te({
2207
+ cancelledByMemberId: y,
2208
+ comment: At || null,
2209
+ instanceId: C.id
2210
+ }), pt(""), ht(!1), await Q();
2211
+ } catch (e) {
2212
+ A(V(e));
2213
+ } finally {
2214
+ j(!1);
2215
+ }
2216
+ }
2217
+ }
2218
+ async function _n() {
2219
+ if (!y || !C || !Ht) return;
2220
+ j(!0), A(null), F({});
2221
+ let e = a(Object.values(St));
2222
+ if (e) {
2223
+ A(e), j(!1);
2224
+ return;
2225
+ }
2226
+ let t = C.formDefinitionSnapshot.schema ? te(C.formDefinitionSnapshot.schema, C.workflowSnapshot) : null, n = _(t ? N(t.fields, I) : I, C.workflowSnapshot);
2227
+ try {
2228
+ if (t && C.formDefinitionSnapshot.uiSchema) {
2229
+ let e = await st({
2230
+ schema: t,
2231
+ uiSchema: C.formDefinitionSnapshot.uiSchema,
2232
+ values: n
2233
+ });
2234
+ if (!e.valid) {
2235
+ F(e.errors), A("請先修正表單中標示的欄位。"), e.firstInvalidFieldKey && at(e.firstInvalidFieldKey);
2236
+ return;
2237
+ }
2238
+ }
2239
+ await ze({
2240
+ comment: bt,
2241
+ formData: n,
2242
+ initiatorMemberId: y,
2243
+ instanceId: C.id,
2244
+ title: C.title
2245
+ }), yt(C.id), await Q();
2246
+ } catch (e) {
2247
+ A(V(e));
2248
+ } finally {
2249
+ j(!1);
2250
+ }
2251
+ }
2252
+ let $ = tt || M || rt;
2253
+ return /* @__PURE__ */ O(Ce, { children: [
2254
+ /* @__PURE__ */ D(he, { children: /* @__PURE__ */ O(Ue, {
2255
+ description: C ? [
2256
+ Pt(C.state),
2257
+ t(C.startedAt),
2258
+ Dt(C, Xt)
2259
+ ].filter(B).join(" · ") : "載入案件內容。",
2260
+ title: C?.title ?? "簽核案件",
2261
+ children: [
2262
+ C ? /* @__PURE__ */ D(S, {
2263
+ "aria-label": "查看流程圖",
2264
+ icon: $e,
2265
+ iconType: "icon-only",
2266
+ onClick: () => dt(!0),
2267
+ title: "查看流程圖",
2268
+ variant: "base-secondary",
2269
+ children: "流程圖"
2270
+ }) : null,
2271
+ Vt ? /* @__PURE__ */ D(S, {
2272
+ disabled: $,
2273
+ icon: qe,
2274
+ iconType: "leading",
2275
+ onClick: () => ht(!0),
2276
+ variant: "destructive-secondary",
2277
+ children: "取消案件"
2278
+ }) : null,
2279
+ H ? /* @__PURE__ */ O(Ce, { children: [
2280
+ zt ? /* @__PURE__ */ O(Ce, { children: [/* @__PURE__ */ D(S, {
2281
+ disabled: $,
2282
+ icon: Xe,
2283
+ iconType: "leading",
2284
+ onClick: () => z.current?.openAdhocModal("COUNTERSIGN"),
2285
+ variant: "base-secondary",
2286
+ children: "會簽"
2287
+ }, "adhoc-countersign"), /* @__PURE__ */ D(S, {
2288
+ disabled: $,
2289
+ icon: Xe,
2290
+ iconType: "leading",
2291
+ onClick: () => z.current?.openAdhocModal("PRE_APPROVAL"),
2292
+ variant: "base-secondary",
2293
+ children: "加簽"
2294
+ }, "adhoc-pre-approval")] }) : null,
2295
+ /* @__PURE__ */ D(S, {
2296
+ disabled: $,
2297
+ icon: Ye,
2298
+ iconType: "leading",
2299
+ onClick: () => z.current?.openAdhocModal("STAGE_NOTIFY"),
2300
+ variant: "base-secondary",
2301
+ children: "通知設定"
2302
+ }, "adhoc-notify"),
2303
+ Ft ? /* @__PURE__ */ D(S, {
2304
+ disabled: $,
2305
+ icon: Ze,
2306
+ iconType: "leading",
2307
+ onClick: () => z.current?.openReturnModal(),
2308
+ variant: "base-secondary",
2309
+ children: "退回"
2310
+ }, "task-return") : null,
2311
+ Rt ? /* @__PURE__ */ D(S, {
2312
+ disabled: $,
2313
+ icon: et,
2314
+ iconType: "leading",
2315
+ onClick: () => z.current?.openTransferModal(),
2316
+ variant: "base-secondary",
2317
+ children: "轉派"
2318
+ }, "task-transfer") : null,
2319
+ It ? /* @__PURE__ */ D(S, {
2320
+ disabled: $,
2321
+ icon: qe,
2322
+ iconType: "leading",
2323
+ onClick: () => z.current?.openRejectModal(),
2324
+ variant: "destructive-secondary",
2325
+ children: "拒絕"
2326
+ }, "task-reject") : null,
2327
+ /* @__PURE__ */ D(S, {
2328
+ disabled: $,
2329
+ icon: We,
2330
+ iconType: "leading",
2331
+ onClick: () => {
2332
+ en();
2333
+ },
2334
+ variant: "base-primary",
2335
+ children: "同意"
2336
+ }, "task-approve")
2337
+ ] }) : null
2338
+ ]
2339
+ }) }),
2340
+ /* @__PURE__ */ O(_e, { children: [
2341
+ c ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(En, {
2342
+ canResubmitInstance: Ht,
2343
+ deciding: tt,
2344
+ error: Ke,
2345
+ fieldAccess: Jt,
2346
+ fieldLabelMarkers: Yt,
2347
+ fill: X && Z && G ? {
2348
+ errors: K,
2349
+ fieldCount: nt(G).size,
2350
+ onChange: $t,
2351
+ schema: X,
2352
+ value: Z
2353
+ } : null,
2354
+ instance: C,
2355
+ loading: Je,
2356
+ onDataSourceStateChange: Nt,
2357
+ onReloadAfterConflict: Kt ? () => void nn() : null,
2358
+ onResubmitFormChange: (e) => {
2359
+ vt(e), F({});
2360
+ },
2361
+ onResubmitCommentChange: xt,
2362
+ onResubmitInstance: () => void _n(),
2363
+ onUploadAttachment: pn,
2364
+ resubmitComment: bt,
2365
+ resubmitFormData: I,
2366
+ resubmitFormErrors: gt
2367
+ }) }) : null,
2368
+ o ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(On, {
2369
+ attachments: ve,
2370
+ onDownload: (e) => {
2371
+ mn(e);
2372
+ },
2373
+ onPreview: (e) => {
2374
+ hn(e);
2375
+ }
2376
+ }) }) : null,
2377
+ d ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(zn, {
2378
+ adhocDirectives: kt,
2379
+ currentMemberId: y,
2380
+ fill: Qt,
2381
+ instance: C,
2382
+ memberProfilesById: Xt,
2383
+ onChanged: Q,
2384
+ onDecidingChange: ot,
2385
+ onFillApproveError: tn,
2386
+ ref: z,
2387
+ tasks: k
2388
+ }) }) : null,
2389
+ u ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(Un, {
2390
+ signatureVerification: De,
2391
+ signatures: be
2392
+ }) }) : null,
2393
+ ce && we.length > 0 ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(nr, {
2394
+ deliveries: we,
2395
+ onRetry: dn,
2396
+ readNodeLabel: (e) => Lt(e, C?.workflowSnapshot ?? null)
2397
+ }) }) : null,
2398
+ l ? /* @__PURE__ */ D(ge, { children: /* @__PURE__ */ D(Qn, {
2399
+ activityLogs: ue,
2400
+ formSchema: Y,
2401
+ instanceState: C?.state ?? "RUNNING",
2402
+ memberProfilesById: Xt,
2403
+ signatureVerification: De,
2404
+ signaturesById: an,
2405
+ taskDecisions: w,
2406
+ taskDecisionsByTaskId: rn,
2407
+ tasks: k,
2408
+ workflowSnapshot: C?.workflowSnapshot ?? null,
2409
+ workflowTokens: Le
2410
+ }) }) : null
2411
+ ] }),
2412
+ C ? /* @__PURE__ */ D(T, {
2413
+ modalType: "standard",
2414
+ onClose: () => dt(!1),
2415
+ open: ct,
2416
+ showModalHeader: !0,
2417
+ size: "wide",
2418
+ supportingText: `${Pt(C.state)} · ${t(C.startedAt)}`,
2419
+ title: "流程圖",
2420
+ children: /* @__PURE__ */ O("div", {
2421
+ style: fr,
2422
+ children: [/* @__PURE__ */ D("div", {
2423
+ style: pr,
2424
+ children: /* @__PURE__ */ O(ft, {
2425
+ edges: cn,
2426
+ fitView: !0,
2427
+ fitViewOptions: { padding: .18 },
2428
+ maxZoom: 1.2,
2429
+ minZoom: .2,
2430
+ nodes: sn,
2431
+ nodesDraggable: !1,
2432
+ nodesFocusable: !1,
2433
+ nodeTypes: xr,
2434
+ panOnDrag: !0,
2435
+ proOptions: { hideAttribution: !0 },
2436
+ children: [/* @__PURE__ */ D(lt, {}), /* @__PURE__ */ D(ut, { showInteractive: !1 })]
2437
+ })
2438
+ }), ln.length > 0 ? /* @__PURE__ */ D("div", {
2439
+ style: vr,
2440
+ children: ln.map((e) => /* @__PURE__ */ D("span", {
2441
+ style: yr,
2442
+ children: e
2443
+ }, e))
2444
+ }) : null]
2445
+ })
2446
+ }) : null,
2447
+ /* @__PURE__ */ D(T, {
2448
+ modalType: "standard",
2449
+ onClose: () => {
2450
+ Tt(null), Ot(null);
2451
+ },
2452
+ open: !!(L && Et),
2453
+ showModalHeader: !0,
2454
+ size: "wide",
2455
+ supportingText: L?.filename ?? void 0,
2456
+ title: "PDF 預覽",
2457
+ children: Et ? /* @__PURE__ */ D(wt, {
2458
+ filename: L?.filename ?? "PDF 預覽",
2459
+ fileUrl: Et,
2460
+ onDownload: L ? () => void mn(L) : void 0
2461
+ }) : null
2462
+ }),
2463
+ /* @__PURE__ */ D(T, {
2464
+ cancelText: "保留案件",
2465
+ confirmButtonProps: { variant: "destructive-primary" },
2466
+ confirmText: "確認取消",
2467
+ loading: tt,
2468
+ modalStatusType: "error",
2469
+ modalType: "standard",
2470
+ onCancel: () => ht(!1),
2471
+ onClose: () => ht(!1),
2472
+ onConfirm: () => void gn(),
2473
+ open: mt,
2474
+ showModalFooter: !0,
2475
+ showModalHeader: !0,
2476
+ supportingText: "取消後會關閉目前待簽任務與候選簽核人。",
2477
+ title: "取消案件",
2478
+ children: /* @__PURE__ */ O("div", {
2479
+ style: br,
2480
+ children: [/* @__PURE__ */ O(E, {
2481
+ variant: "body",
2482
+ children: [
2483
+ "確定要取消「",
2484
+ C?.title ?? "",
2485
+ "」嗎?"
2486
+ ]
2487
+ }), /* @__PURE__ */ D(e, {
2488
+ label: "取消原因",
2489
+ name: "cancelComment",
2490
+ children: /* @__PURE__ */ D(xe, {
2491
+ onChange: (e) => pt(e.target.value),
2492
+ placeholder: "可填寫取消原因",
2493
+ resize: "vertical",
2494
+ rows: 3,
2495
+ value: P
2496
+ })
2497
+ })]
2498
+ })
2499
+ })
2500
+ ] });
2501
+ }
2502
+ function Cr(e) {
2503
+ return e.data.label ? e.data.label : e.data.isDefault ? "其他情況" : e.data.condition ?? "";
2504
+ }
2505
+ function wr(e) {
2506
+ return e.edges.map(Cr).filter((e) => e.trim().length > 0);
2507
+ }
2508
+ function Tr(e) {
2509
+ return e === "startEvent" ? "開始" : e === "endEvent" ? "完成" : e === "userTask" ? "簽核節點" : e === "serviceTask" ? "知會節點" : e === "exclusiveGateway" ? "條件分流" : "平行處理";
2510
+ }
2511
+ function Er(e, t, n, r) {
2512
+ return e.nodes.map((e) => {
2513
+ let i = _n(e, t, n, r);
2514
+ return {
2515
+ data: {
2516
+ kindLabel: Tr(e.type),
2517
+ label: e.data.label,
2518
+ secondaryLabel: i.secondaryLabel,
2519
+ statusLabel: i.statusLabel,
2520
+ tone: i.tone
2521
+ },
2522
+ id: e.id,
2523
+ position: e.position,
2524
+ sourcePosition: P.Right,
2525
+ targetPosition: P.Left,
2526
+ type: "workflowRuntime"
2527
+ };
2528
+ });
2529
+ }
2530
+ function Dr(e) {
2531
+ let t = new pt.graphlib.Graph();
2532
+ return t.setDefaultEdgeLabel(() => ({})), t.setGraph({
2533
+ nodesep: 56,
2534
+ rankdir: "LR",
2535
+ ranksep: 120
2536
+ }), e.nodes.forEach((e) => {
2537
+ t.setNode(e.id, {
2538
+ height: dr,
2539
+ width: ur
2540
+ });
2541
+ }), e.edges.forEach((e) => {
2542
+ t.setEdge(e.source, e.target);
2543
+ }), pt.layout(t), {
2544
+ ...e,
2545
+ nodes: e.nodes.map((e) => {
2546
+ let n = t.node(e.id);
2547
+ return n ? {
2548
+ ...e,
2549
+ position: {
2550
+ x: n.x - ur / 2,
2551
+ y: n.y - dr / 2
2552
+ }
2553
+ } : e;
2554
+ })
2555
+ };
2556
+ }
2557
+ function Or(e) {
2558
+ return e.edges.map((e) => {
2559
+ let t = Cr(e);
2560
+ return {
2561
+ animated: !1,
2562
+ id: e.id,
2563
+ label: t,
2564
+ labelBgBorderRadius: 6,
2565
+ labelBgPadding: [8, 4],
2566
+ labelBgStyle: {
2567
+ fill: e.data.isDefault ? "#f8fafc" : "#eff6ff",
2568
+ stroke: e.data.isDefault ? "#64748b" : "#2563eb",
2569
+ strokeWidth: 1
2570
+ },
2571
+ labelShowBg: !!t,
2572
+ labelStyle: {
2573
+ fill: e.data.isDefault ? "#475569" : "#2563eb",
2574
+ fontSize: 12,
2575
+ fontWeight: 600
2576
+ },
2577
+ source: e.source,
2578
+ style: {
2579
+ stroke: "#475569",
2580
+ strokeWidth: 1.5
2581
+ },
2582
+ target: e.target,
2583
+ type: e.type ?? "smoothstep"
2584
+ };
2585
+ });
2586
+ }
2587
+ function kr(e) {
2588
+ return e === "current" ? {
2589
+ ...mr,
2590
+ border: "1px solid var(--mzn-color-primary, #0057ff)",
2591
+ boxShadow: "0 0 0 3px rgba(0, 87, 255, 0.14)"
2592
+ } : e === "completed" ? {
2593
+ ...mr,
2594
+ border: "1px solid #16a34a"
2595
+ } : e === "cancelled" ? {
2596
+ ...mr,
2597
+ border: "1px solid #dc2626",
2598
+ opacity: .72
2599
+ } : e === "waiting" ? {
2600
+ ...mr,
2601
+ border: "1px dashed #64748b"
2602
+ } : mr;
2603
+ }
2604
+ function Ar(e) {
2605
+ let t = hr;
2606
+ return e === "current" ? {
2607
+ ...t,
2608
+ background: "#eff6ff",
2609
+ color: "#2563eb"
2610
+ } : e === "completed" ? {
2611
+ ...t,
2612
+ background: "#f0fdf4",
2613
+ color: "#15803d"
2614
+ } : e === "cancelled" ? {
2615
+ ...t,
2616
+ background: "#fef2f2",
2617
+ color: "#dc2626"
2618
+ } : e === "waiting" ? {
2619
+ ...t,
2620
+ background: "#f8fafc",
2621
+ color: "#475569"
2622
+ } : {
2623
+ ...t,
2624
+ background: "#f1f5f9",
2625
+ color: "#64748b"
2626
+ };
2627
+ }
2628
+ function jr({ data: e }) {
2629
+ return /* @__PURE__ */ O("div", {
2630
+ style: kr(e.tone),
2631
+ children: [
2632
+ /* @__PURE__ */ D(dt, {
2633
+ isConnectable: !1,
2634
+ position: P.Left,
2635
+ style: _r,
2636
+ type: "target"
2637
+ }),
2638
+ /* @__PURE__ */ D(E, {
2639
+ component: "span",
2640
+ ellipsis: !0,
2641
+ title: e.label,
2642
+ variant: "label-primary",
2643
+ children: e.label
2644
+ }),
2645
+ /* @__PURE__ */ D("span", {
2646
+ style: Ar(e.tone),
2647
+ children: e.statusLabel
2648
+ }),
2649
+ /* @__PURE__ */ D("span", {
2650
+ title: e.secondaryLabel,
2651
+ style: gr,
2652
+ children: e.secondaryLabel || e.kindLabel
2653
+ }),
2654
+ /* @__PURE__ */ D(dt, {
2655
+ isConnectable: !1,
2656
+ position: P.Right,
2657
+ style: _r,
2658
+ type: "source"
2659
+ })
2660
+ ]
2661
+ });
2662
+ }
2663
+ export { zn as a, Un as i, nr as n, On as o, Qn as r, En as s, Sr as t };
2664
+
2665
+ //# sourceMappingURL=detail-C6XKZjlF.js.map