@rytass/bpm-core-react 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/dist/AdminDelegationsView.css +1 -0
  4. package/dist/AdminOrgsView.css +1 -0
  5. package/dist/AdminUsersView.css +1 -0
  6. package/dist/DelegationsView.css +1 -0
  7. package/dist/InstanceDetailView.css +1 -0
  8. package/dist/LoginView.css +1 -0
  9. package/dist/SettingsNotificationsView.css +1 -0
  10. package/dist/admin-pickers.css +1 -0
  11. package/dist/app-navigation.css +1 -0
  12. package/dist/approval-instance-list-page.css +1 -0
  13. package/dist/auth-provider.css +1 -0
  14. package/dist/chunks/AdminDelegationsView-CqNmlVWx.cjs +2 -0
  15. package/dist/chunks/AdminDelegationsView-CqNmlVWx.cjs.map +1 -0
  16. package/dist/chunks/AdminDelegationsView-DydMZ9ED.js +642 -0
  17. package/dist/chunks/AdminDelegationsView-DydMZ9ED.js.map +1 -0
  18. package/dist/chunks/AdminOrgsView-DZaVAbaQ.js +1945 -0
  19. package/dist/chunks/AdminOrgsView-DZaVAbaQ.js.map +1 -0
  20. package/dist/chunks/AdminOrgsView-bSsIyMvk.cjs +2 -0
  21. package/dist/chunks/AdminOrgsView-bSsIyMvk.cjs.map +1 -0
  22. package/dist/chunks/AdminUsersView-C0oO05Br.js +215 -0
  23. package/dist/chunks/AdminUsersView-C0oO05Br.js.map +1 -0
  24. package/dist/chunks/AdminUsersView-DlArLlIr.cjs +2 -0
  25. package/dist/chunks/AdminUsersView-DlArLlIr.cjs.map +1 -0
  26. package/dist/chunks/CcView-BsVsya5F.cjs +2 -0
  27. package/dist/chunks/CcView-BsVsya5F.cjs.map +1 -0
  28. package/dist/chunks/CcView-Bv0GzA5C.js +19 -0
  29. package/dist/chunks/CcView-Bv0GzA5C.js.map +1 -0
  30. package/dist/chunks/DashboardView-Dk1ZQmmk.js +11 -0
  31. package/dist/chunks/DashboardView-Dk1ZQmmk.js.map +1 -0
  32. package/dist/chunks/DashboardView-_0zh-rxT.cjs +2 -0
  33. package/dist/chunks/DashboardView-_0zh-rxT.cjs.map +1 -0
  34. package/dist/chunks/DelegationsView-DQUqOUV5.js +569 -0
  35. package/dist/chunks/DelegationsView-DQUqOUV5.js.map +1 -0
  36. package/dist/chunks/DelegationsView-pKeFV2LN.cjs +2 -0
  37. package/dist/chunks/DelegationsView-pKeFV2LN.cjs.map +1 -0
  38. package/dist/chunks/FormBuilderView-BKtyW55e.cjs +3 -0
  39. package/dist/chunks/FormBuilderView-BKtyW55e.cjs.map +1 -0
  40. package/dist/chunks/FormBuilderView-CvChAvgD.js +1300 -0
  41. package/dist/chunks/FormBuilderView-CvChAvgD.js.map +1 -0
  42. package/dist/chunks/FormRendererView-BwVsH2eX.cjs +2 -0
  43. package/dist/chunks/FormRendererView-BwVsH2eX.cjs.map +1 -0
  44. package/dist/chunks/FormRendererView-DrHsuSVo.js +220 -0
  45. package/dist/chunks/FormRendererView-DrHsuSVo.js.map +1 -0
  46. package/dist/chunks/FormsView-DYEuik8W.js +185 -0
  47. package/dist/chunks/FormsView-DYEuik8W.js.map +1 -0
  48. package/dist/chunks/FormsView-RjJEkIfZ.cjs +2 -0
  49. package/dist/chunks/FormsView-RjJEkIfZ.cjs.map +1 -0
  50. package/dist/chunks/InboxView-DDWwmWhA.cjs +2 -0
  51. package/dist/chunks/InboxView-DDWwmWhA.cjs.map +1 -0
  52. package/dist/chunks/InboxView-YSoyrYLk.js +291 -0
  53. package/dist/chunks/InboxView-YSoyrYLk.js.map +1 -0
  54. package/dist/chunks/InstanceDetailView-C-A-LOCG.js +1519 -0
  55. package/dist/chunks/InstanceDetailView-C-A-LOCG.js.map +1 -0
  56. package/dist/chunks/InstanceDetailView-l_kNDCz2.cjs +2 -0
  57. package/dist/chunks/InstanceDetailView-l_kNDCz2.cjs.map +1 -0
  58. package/dist/chunks/InstanceNewView-B5hz-FWd.js +190 -0
  59. package/dist/chunks/InstanceNewView-B5hz-FWd.js.map +1 -0
  60. package/dist/chunks/InstanceNewView-CdCsxQIu.cjs +2 -0
  61. package/dist/chunks/InstanceNewView-CdCsxQIu.cjs.map +1 -0
  62. package/dist/chunks/LoginView-BED07v-7.cjs +2 -0
  63. package/dist/chunks/LoginView-BED07v-7.cjs.map +1 -0
  64. package/dist/chunks/LoginView-a1iu3cfc.js +157 -0
  65. package/dist/chunks/LoginView-a1iu3cfc.js.map +1 -0
  66. package/dist/chunks/RootClientView-rXJt4TDd.cjs +2 -0
  67. package/dist/chunks/RootClientView-rXJt4TDd.cjs.map +1 -0
  68. package/dist/chunks/RootClientView-wAkXUEZw.js +34 -0
  69. package/dist/chunks/RootClientView-wAkXUEZw.js.map +1 -0
  70. package/dist/chunks/SearchView-CgXPssgE.cjs +2 -0
  71. package/dist/chunks/SearchView-CgXPssgE.cjs.map +1 -0
  72. package/dist/chunks/SearchView-WXMbZwRw.js +19 -0
  73. package/dist/chunks/SearchView-WXMbZwRw.js.map +1 -0
  74. package/dist/chunks/SentView-BTDoFBrG.cjs +2 -0
  75. package/dist/chunks/SentView-BTDoFBrG.cjs.map +1 -0
  76. package/dist/chunks/SentView-CdOL92Rq.js +19 -0
  77. package/dist/chunks/SentView-CdOL92Rq.js.map +1 -0
  78. package/dist/chunks/SettingsNotificationsView-B6F6fa7U.js +194 -0
  79. package/dist/chunks/SettingsNotificationsView-B6F6fa7U.js.map +1 -0
  80. package/dist/chunks/SettingsNotificationsView-Bnz0CmoJ.cjs +2 -0
  81. package/dist/chunks/SettingsNotificationsView-Bnz0CmoJ.cjs.map +1 -0
  82. package/dist/chunks/TemplateCategoriesView-CgZciaSd.js +382 -0
  83. package/dist/chunks/TemplateCategoriesView-CgZciaSd.js.map +1 -0
  84. package/dist/chunks/TemplateCategoriesView-U0stGUBc.cjs +2 -0
  85. package/dist/chunks/TemplateCategoriesView-U0stGUBc.cjs.map +1 -0
  86. package/dist/chunks/TemplateDesignerView-A38DyYD4.cjs +51 -0
  87. package/dist/chunks/TemplateDesignerView-A38DyYD4.cjs.map +1 -0
  88. package/dist/chunks/TemplateDesignerView-Dffx-VZ-.js +2272 -0
  89. package/dist/chunks/TemplateDesignerView-Dffx-VZ-.js.map +1 -0
  90. package/dist/chunks/TemplateVersionsView-6sVQbBem.js +110 -0
  91. package/dist/chunks/TemplateVersionsView-6sVQbBem.js.map +1 -0
  92. package/dist/chunks/TemplateVersionsView-CMqw3ieU.cjs +2 -0
  93. package/dist/chunks/TemplateVersionsView-CMqw3ieU.cjs.map +1 -0
  94. package/dist/chunks/TemplatesView-BLj9f-XI.js +380 -0
  95. package/dist/chunks/TemplatesView-BLj9f-XI.js.map +1 -0
  96. package/dist/chunks/TemplatesView-DIOQTUUl.cjs +2 -0
  97. package/dist/chunks/TemplatesView-DIOQTUUl.cjs.map +1 -0
  98. package/dist/chunks/admin-pickers-Btvij1at.cjs +2 -0
  99. package/dist/chunks/admin-pickers-Btvij1at.cjs.map +1 -0
  100. package/dist/chunks/admin-pickers-DLlG_1du.js +140 -0
  101. package/dist/chunks/admin-pickers-DLlG_1du.js.map +1 -0
  102. package/dist/chunks/app-navigation-CATITRM7.js +263 -0
  103. package/dist/chunks/app-navigation-CATITRM7.js.map +1 -0
  104. package/dist/chunks/app-navigation-DAC5gFbG.cjs +2 -0
  105. package/dist/chunks/app-navigation-DAC5gFbG.cjs.map +1 -0
  106. package/dist/chunks/approval-instance-list-page-B6vAGvOb.js +278 -0
  107. package/dist/chunks/approval-instance-list-page-B6vAGvOb.js.map +1 -0
  108. package/dist/chunks/approval-instance-list-page-DIAmwhvl.cjs +2 -0
  109. package/dist/chunks/approval-instance-list-page-DIAmwhvl.cjs.map +1 -0
  110. package/dist/chunks/auth-provider-D2P-qWmY.cjs +2 -0
  111. package/dist/chunks/auth-provider-D2P-qWmY.cjs.map +1 -0
  112. package/dist/chunks/auth-provider-TTO9eNZV.js +83 -0
  113. package/dist/chunks/auth-provider-TTO9eNZV.js.map +1 -0
  114. package/dist/chunks/bpm-form-field-Bc6k4ZEO.cjs +2 -0
  115. package/dist/chunks/bpm-form-field-Bc6k4ZEO.cjs.map +1 -0
  116. package/dist/chunks/bpm-form-field-Cao0rMol.js +17 -0
  117. package/dist/chunks/bpm-form-field-Cao0rMol.js.map +1 -0
  118. package/dist/chunks/dashboard-page-BsW8t104.js +115 -0
  119. package/dist/chunks/dashboard-page-BsW8t104.js.map +1 -0
  120. package/dist/chunks/dashboard-page-udYhnyMW.cjs +2 -0
  121. package/dist/chunks/dashboard-page-udYhnyMW.cjs.map +1 -0
  122. package/dist/chunks/form-name-modal-C3OEvkCV.js +64 -0
  123. package/dist/chunks/form-name-modal-C3OEvkCV.js.map +1 -0
  124. package/dist/chunks/form-name-modal-uZCHbtRH.cjs +2 -0
  125. package/dist/chunks/form-name-modal-uZCHbtRH.cjs.map +1 -0
  126. package/dist/chunks/format-date-time-BQyH5U8z.cjs +2 -0
  127. package/dist/chunks/format-date-time-BQyH5U8z.cjs.map +1 -0
  128. package/dist/chunks/format-date-time-CB-LxzqT.js +9 -0
  129. package/dist/chunks/format-date-time-CB-LxzqT.js.map +1 -0
  130. package/dist/chunks/router-adapter-BdHZXLS3.js +23 -0
  131. package/dist/chunks/router-adapter-BdHZXLS3.js.map +1 -0
  132. package/dist/chunks/router-adapter-BybHrCNP.cjs +2 -0
  133. package/dist/chunks/router-adapter-BybHrCNP.cjs.map +1 -0
  134. package/dist/chunks/templates.module-B5bg_goX.js +8 -0
  135. package/dist/chunks/templates.module-B5bg_goX.js.map +1 -0
  136. package/dist/chunks/templates.module-ClRnQQX4.cjs +2 -0
  137. package/dist/chunks/templates.module-ClRnQQX4.cjs.map +1 -0
  138. package/dist/components/admin-pickers.d.ts +65 -0
  139. package/dist/components/app-navigation.d.ts +34 -0
  140. package/dist/components/approval-instance-list-page.d.ts +18 -0
  141. package/dist/components/bpm-form-field.d.ts +10 -0
  142. package/dist/components/dashboard-page.d.ts +10 -0
  143. package/dist/components/notification-drawer.d.ts +10 -0
  144. package/dist/components/org-unit-tree-draft-editor.d.ts +24 -0
  145. package/dist/components/pdf-preview.d.ts +12 -0
  146. package/dist/dashboard-page.css +1 -0
  147. package/dist/index.cjs +2 -0
  148. package/dist/index.cjs.map +1 -0
  149. package/dist/index.d.ts +12 -0
  150. package/dist/index.js +209 -0
  151. package/dist/index.js.map +1 -0
  152. package/dist/lib/auth-provider.d.ts +37 -0
  153. package/dist/lib/format-date-time.d.ts +5 -0
  154. package/dist/lib/notification-drawer-provider.d.ts +26 -0
  155. package/dist/lib/notification-unread-provider.d.ts +24 -0
  156. package/dist/lib/org-tree-draft.d.ts +27 -0
  157. package/dist/lib/providers.d.ts +30 -0
  158. package/dist/lib/router-adapter.d.ts +47 -0
  159. package/dist/pages/admin/delegations/AdminDelegationsClientView.cjs +2 -0
  160. package/dist/pages/admin/delegations/AdminDelegationsClientView.cjs.map +1 -0
  161. package/dist/pages/admin/delegations/AdminDelegationsClientView.d.ts +3 -0
  162. package/dist/pages/admin/delegations/AdminDelegationsClientView.js +28 -0
  163. package/dist/pages/admin/delegations/AdminDelegationsClientView.js.map +1 -0
  164. package/dist/pages/admin/delegations/index.cjs +2 -0
  165. package/dist/pages/admin/delegations/index.cjs.map +1 -0
  166. package/dist/pages/admin/delegations/index.d.ts +4 -0
  167. package/dist/pages/admin/delegations/index.js +14 -0
  168. package/dist/pages/admin/delegations/index.js.map +1 -0
  169. package/dist/pages/admin/orgs/AdminOrgsClientView.cjs +2 -0
  170. package/dist/pages/admin/orgs/AdminOrgsClientView.cjs.map +1 -0
  171. package/dist/pages/admin/orgs/AdminOrgsClientView.d.ts +3 -0
  172. package/dist/pages/admin/orgs/AdminOrgsClientView.js +28 -0
  173. package/dist/pages/admin/orgs/AdminOrgsClientView.js.map +1 -0
  174. package/dist/pages/admin/orgs/index.cjs +2 -0
  175. package/dist/pages/admin/orgs/index.cjs.map +1 -0
  176. package/dist/pages/admin/orgs/index.d.ts +4 -0
  177. package/dist/pages/admin/orgs/index.js +14 -0
  178. package/dist/pages/admin/orgs/index.js.map +1 -0
  179. package/dist/pages/admin/users/AdminUsersClientView.cjs +2 -0
  180. package/dist/pages/admin/users/AdminUsersClientView.cjs.map +1 -0
  181. package/dist/pages/admin/users/AdminUsersClientView.d.ts +3 -0
  182. package/dist/pages/admin/users/AdminUsersClientView.js +28 -0
  183. package/dist/pages/admin/users/AdminUsersClientView.js.map +1 -0
  184. package/dist/pages/admin/users/index.cjs +2 -0
  185. package/dist/pages/admin/users/index.cjs.map +1 -0
  186. package/dist/pages/admin/users/index.d.ts +4 -0
  187. package/dist/pages/admin/users/index.js +14 -0
  188. package/dist/pages/admin/users/index.js.map +1 -0
  189. package/dist/pages/cc/CcClientView.cjs +2 -0
  190. package/dist/pages/cc/CcClientView.cjs.map +1 -0
  191. package/dist/pages/cc/CcClientView.d.ts +7 -0
  192. package/dist/pages/cc/CcClientView.js +28 -0
  193. package/dist/pages/cc/CcClientView.js.map +1 -0
  194. package/dist/pages/cc/index.cjs +2 -0
  195. package/dist/pages/cc/index.cjs.map +1 -0
  196. package/dist/pages/cc/index.d.ts +16 -0
  197. package/dist/pages/cc/index.js +11 -0
  198. package/dist/pages/cc/index.js.map +1 -0
  199. package/dist/pages/dashboard/DashboardClientView.cjs +2 -0
  200. package/dist/pages/dashboard/DashboardClientView.cjs.map +1 -0
  201. package/dist/pages/dashboard/DashboardClientView.d.ts +9 -0
  202. package/dist/pages/dashboard/DashboardClientView.js +28 -0
  203. package/dist/pages/dashboard/DashboardClientView.js.map +1 -0
  204. package/dist/pages/dashboard/index.cjs +2 -0
  205. package/dist/pages/dashboard/index.cjs.map +1 -0
  206. package/dist/pages/dashboard/index.d.ts +16 -0
  207. package/dist/pages/dashboard/index.js +11 -0
  208. package/dist/pages/dashboard/index.js.map +1 -0
  209. package/dist/pages/delegations/DelegationsClientView.cjs +2 -0
  210. package/dist/pages/delegations/DelegationsClientView.cjs.map +1 -0
  211. package/dist/pages/delegations/DelegationsClientView.d.ts +3 -0
  212. package/dist/pages/delegations/DelegationsClientView.js +28 -0
  213. package/dist/pages/delegations/DelegationsClientView.js.map +1 -0
  214. package/dist/pages/delegations/index.cjs +2 -0
  215. package/dist/pages/delegations/index.cjs.map +1 -0
  216. package/dist/pages/delegations/index.d.ts +4 -0
  217. package/dist/pages/delegations/index.js +14 -0
  218. package/dist/pages/delegations/index.js.map +1 -0
  219. package/dist/pages/forms/FormsClientView.cjs +2 -0
  220. package/dist/pages/forms/FormsClientView.cjs.map +1 -0
  221. package/dist/pages/forms/FormsClientView.d.ts +10 -0
  222. package/dist/pages/forms/FormsClientView.js +28 -0
  223. package/dist/pages/forms/FormsClientView.js.map +1 -0
  224. package/dist/pages/forms/builder/FormBuilderClientView.cjs +2 -0
  225. package/dist/pages/forms/builder/FormBuilderClientView.cjs.map +1 -0
  226. package/dist/pages/forms/builder/FormBuilderClientView.d.ts +11 -0
  227. package/dist/pages/forms/builder/FormBuilderClientView.js +28 -0
  228. package/dist/pages/forms/builder/FormBuilderClientView.js.map +1 -0
  229. package/dist/pages/forms/builder/index.cjs +2 -0
  230. package/dist/pages/forms/builder/index.cjs.map +1 -0
  231. package/dist/pages/forms/builder/index.d.ts +23 -0
  232. package/dist/pages/forms/builder/index.js +15 -0
  233. package/dist/pages/forms/builder/index.js.map +1 -0
  234. package/dist/pages/forms/index.cjs +2 -0
  235. package/dist/pages/forms/index.cjs.map +1 -0
  236. package/dist/pages/forms/index.d.ts +17 -0
  237. package/dist/pages/forms/index.js +14 -0
  238. package/dist/pages/forms/index.js.map +1 -0
  239. package/dist/pages/inbox/InboxClientView.cjs +2 -0
  240. package/dist/pages/inbox/InboxClientView.cjs.map +1 -0
  241. package/dist/pages/inbox/InboxClientView.d.ts +9 -0
  242. package/dist/pages/inbox/InboxClientView.js +28 -0
  243. package/dist/pages/inbox/InboxClientView.js.map +1 -0
  244. package/dist/pages/inbox/index.cjs +2 -0
  245. package/dist/pages/inbox/index.cjs.map +1 -0
  246. package/dist/pages/inbox/index.d.ts +16 -0
  247. package/dist/pages/inbox/index.js +11 -0
  248. package/dist/pages/inbox/index.js.map +1 -0
  249. package/dist/pages/instances/detail/InstanceDetailClientView.cjs +2 -0
  250. package/dist/pages/instances/detail/InstanceDetailClientView.cjs.map +1 -0
  251. package/dist/pages/instances/detail/InstanceDetailClientView.d.ts +9 -0
  252. package/dist/pages/instances/detail/InstanceDetailClientView.js +28 -0
  253. package/dist/pages/instances/detail/InstanceDetailClientView.js.map +1 -0
  254. package/dist/pages/instances/detail/index.cjs +2 -0
  255. package/dist/pages/instances/detail/index.cjs.map +1 -0
  256. package/dist/pages/instances/detail/index.d.ts +23 -0
  257. package/dist/pages/instances/detail/index.js +12 -0
  258. package/dist/pages/instances/detail/index.js.map +1 -0
  259. package/dist/pages/instances/new/InstanceNewClientView.cjs +2 -0
  260. package/dist/pages/instances/new/InstanceNewClientView.cjs.map +1 -0
  261. package/dist/pages/instances/new/InstanceNewClientView.d.ts +8 -0
  262. package/dist/pages/instances/new/InstanceNewClientView.js +28 -0
  263. package/dist/pages/instances/new/InstanceNewClientView.js.map +1 -0
  264. package/dist/pages/instances/new/index.cjs +2 -0
  265. package/dist/pages/instances/new/index.cjs.map +1 -0
  266. package/dist/pages/instances/new/index.d.ts +16 -0
  267. package/dist/pages/instances/new/index.js +11 -0
  268. package/dist/pages/instances/new/index.js.map +1 -0
  269. package/dist/pages/login/LoginClientView.cjs +2 -0
  270. package/dist/pages/login/LoginClientView.cjs.map +1 -0
  271. package/dist/pages/login/LoginClientView.d.ts +11 -0
  272. package/dist/pages/login/LoginClientView.js +29 -0
  273. package/dist/pages/login/LoginClientView.js.map +1 -0
  274. package/dist/pages/login/index.cjs +2 -0
  275. package/dist/pages/login/index.cjs.map +1 -0
  276. package/dist/pages/login/index.d.ts +17 -0
  277. package/dist/pages/login/index.js +14 -0
  278. package/dist/pages/login/index.js.map +1 -0
  279. package/dist/pages/root/RootClientView.cjs +1 -0
  280. package/dist/pages/root/RootClientView.d.ts +8 -0
  281. package/dist/pages/root/RootClientView.js +2 -0
  282. package/dist/pages/root/index.cjs +2 -0
  283. package/dist/pages/root/index.cjs.map +1 -0
  284. package/dist/pages/root/index.d.ts +16 -0
  285. package/dist/pages/root/index.js +11 -0
  286. package/dist/pages/root/index.js.map +1 -0
  287. package/dist/pages/search/SearchClientView.cjs +2 -0
  288. package/dist/pages/search/SearchClientView.cjs.map +1 -0
  289. package/dist/pages/search/SearchClientView.d.ts +7 -0
  290. package/dist/pages/search/SearchClientView.js +28 -0
  291. package/dist/pages/search/SearchClientView.js.map +1 -0
  292. package/dist/pages/search/index.cjs +2 -0
  293. package/dist/pages/search/index.cjs.map +1 -0
  294. package/dist/pages/search/index.d.ts +16 -0
  295. package/dist/pages/search/index.js +11 -0
  296. package/dist/pages/search/index.js.map +1 -0
  297. package/dist/pages/sent/SentClientView.cjs +2 -0
  298. package/dist/pages/sent/SentClientView.cjs.map +1 -0
  299. package/dist/pages/sent/SentClientView.d.ts +7 -0
  300. package/dist/pages/sent/SentClientView.js +28 -0
  301. package/dist/pages/sent/SentClientView.js.map +1 -0
  302. package/dist/pages/sent/index.cjs +2 -0
  303. package/dist/pages/sent/index.cjs.map +1 -0
  304. package/dist/pages/sent/index.d.ts +16 -0
  305. package/dist/pages/sent/index.js +11 -0
  306. package/dist/pages/sent/index.js.map +1 -0
  307. package/dist/pages/settings/notifications/SettingsNotificationsClientView.cjs +2 -0
  308. package/dist/pages/settings/notifications/SettingsNotificationsClientView.cjs.map +1 -0
  309. package/dist/pages/settings/notifications/SettingsNotificationsClientView.d.ts +3 -0
  310. package/dist/pages/settings/notifications/SettingsNotificationsClientView.js +28 -0
  311. package/dist/pages/settings/notifications/SettingsNotificationsClientView.js.map +1 -0
  312. package/dist/pages/settings/notifications/index.cjs +2 -0
  313. package/dist/pages/settings/notifications/index.cjs.map +1 -0
  314. package/dist/pages/settings/notifications/index.d.ts +4 -0
  315. package/dist/pages/settings/notifications/index.js +14 -0
  316. package/dist/pages/settings/notifications/index.js.map +1 -0
  317. package/dist/pages/templates/TemplatesClientView.cjs +2 -0
  318. package/dist/pages/templates/TemplatesClientView.cjs.map +1 -0
  319. package/dist/pages/templates/TemplatesClientView.d.ts +3 -0
  320. package/dist/pages/templates/TemplatesClientView.js +28 -0
  321. package/dist/pages/templates/TemplatesClientView.js.map +1 -0
  322. package/dist/pages/templates/categories/TemplateCategoriesClientView.cjs +2 -0
  323. package/dist/pages/templates/categories/TemplateCategoriesClientView.cjs.map +1 -0
  324. package/dist/pages/templates/categories/TemplateCategoriesClientView.d.ts +3 -0
  325. package/dist/pages/templates/categories/TemplateCategoriesClientView.js +28 -0
  326. package/dist/pages/templates/categories/TemplateCategoriesClientView.js.map +1 -0
  327. package/dist/pages/templates/categories/index.cjs +2 -0
  328. package/dist/pages/templates/categories/index.cjs.map +1 -0
  329. package/dist/pages/templates/categories/index.d.ts +4 -0
  330. package/dist/pages/templates/categories/index.js +14 -0
  331. package/dist/pages/templates/categories/index.js.map +1 -0
  332. package/dist/pages/templates/designer/TemplateDesignerClientView.cjs +2 -0
  333. package/dist/pages/templates/designer/TemplateDesignerClientView.cjs.map +1 -0
  334. package/dist/pages/templates/designer/TemplateDesignerClientView.d.ts +3 -0
  335. package/dist/pages/templates/designer/TemplateDesignerClientView.js +28 -0
  336. package/dist/pages/templates/designer/TemplateDesignerClientView.js.map +1 -0
  337. package/dist/pages/templates/designer/index.cjs +2 -0
  338. package/dist/pages/templates/designer/index.cjs.map +1 -0
  339. package/dist/pages/templates/designer/index.d.ts +10 -0
  340. package/dist/pages/templates/designer/index.js +15 -0
  341. package/dist/pages/templates/designer/index.js.map +1 -0
  342. package/dist/pages/templates/index.cjs +2 -0
  343. package/dist/pages/templates/index.cjs.map +1 -0
  344. package/dist/pages/templates/index.d.ts +4 -0
  345. package/dist/pages/templates/index.js +14 -0
  346. package/dist/pages/templates/index.js.map +1 -0
  347. package/dist/pages/templates/versions/TemplateVersionsClientView.cjs +2 -0
  348. package/dist/pages/templates/versions/TemplateVersionsClientView.cjs.map +1 -0
  349. package/dist/pages/templates/versions/TemplateVersionsClientView.d.ts +3 -0
  350. package/dist/pages/templates/versions/TemplateVersionsClientView.js +28 -0
  351. package/dist/pages/templates/versions/TemplateVersionsClientView.js.map +1 -0
  352. package/dist/pages/templates/versions/index.cjs +2 -0
  353. package/dist/pages/templates/versions/index.cjs.map +1 -0
  354. package/dist/pages/templates/versions/index.d.ts +10 -0
  355. package/dist/pages/templates/versions/index.js +15 -0
  356. package/dist/pages/templates/versions/index.js.map +1 -0
  357. package/dist/templates.css +1 -0
  358. package/dist/views/admin/delegations/AdminDelegationsView.d.ts +5 -0
  359. package/dist/views/admin/delegations/index.cjs +1 -0
  360. package/dist/views/admin/delegations/index.d.ts +1 -0
  361. package/dist/views/admin/delegations/index.js +2 -0
  362. package/dist/views/admin/orgs/AdminOrgsView.d.ts +5 -0
  363. package/dist/views/admin/orgs/index.cjs +1 -0
  364. package/dist/views/admin/orgs/index.d.ts +1 -0
  365. package/dist/views/admin/orgs/index.js +2 -0
  366. package/dist/views/admin/users/AdminUsersView.d.ts +5 -0
  367. package/dist/views/admin/users/index.cjs +1 -0
  368. package/dist/views/admin/users/index.d.ts +1 -0
  369. package/dist/views/admin/users/index.js +2 -0
  370. package/dist/views/cc/CcView.d.ts +9 -0
  371. package/dist/views/cc/index.cjs +1 -0
  372. package/dist/views/cc/index.d.ts +1 -0
  373. package/dist/views/cc/index.js +2 -0
  374. package/dist/views/dashboard/DashboardView.d.ts +9 -0
  375. package/dist/views/dashboard/index.cjs +1 -0
  376. package/dist/views/dashboard/index.d.ts +1 -0
  377. package/dist/views/dashboard/index.js +2 -0
  378. package/dist/views/delegations/DelegationsView.d.ts +5 -0
  379. package/dist/views/delegations/index.cjs +1 -0
  380. package/dist/views/delegations/index.d.ts +1 -0
  381. package/dist/views/delegations/index.js +2 -0
  382. package/dist/views/forms/FormsView.d.ts +4 -0
  383. package/dist/views/forms/builder/FormBuilderView.d.ts +9 -0
  384. package/dist/views/forms/builder/index.cjs +1 -0
  385. package/dist/views/forms/builder/index.d.ts +1 -0
  386. package/dist/views/forms/builder/index.js +2 -0
  387. package/dist/views/forms/builder/json-code-editor.d.ts +11 -0
  388. package/dist/views/forms/form-name-modal.d.ts +12 -0
  389. package/dist/views/forms/index.cjs +1 -0
  390. package/dist/views/forms/index.d.ts +1 -0
  391. package/dist/views/forms/index.js +2 -0
  392. package/dist/views/forms/renderer/FormRendererView.d.ts +19 -0
  393. package/dist/views/forms/renderer/index.cjs +1 -0
  394. package/dist/views/forms/renderer/index.d.ts +1 -0
  395. package/dist/views/forms/renderer/index.js +2 -0
  396. package/dist/views/inbox/InboxView.d.ts +9 -0
  397. package/dist/views/inbox/index.cjs +1 -0
  398. package/dist/views/inbox/index.d.ts +1 -0
  399. package/dist/views/inbox/index.js +2 -0
  400. package/dist/views/instances/detail/InstanceDetailView.d.ts +12 -0
  401. package/dist/views/instances/detail/index.cjs +1 -0
  402. package/dist/views/instances/detail/index.d.ts +1 -0
  403. package/dist/views/instances/detail/index.js +2 -0
  404. package/dist/views/instances/new/InstanceNewView.d.ts +15 -0
  405. package/dist/views/instances/new/index.cjs +1 -0
  406. package/dist/views/instances/new/index.d.ts +1 -0
  407. package/dist/views/instances/new/index.js +2 -0
  408. package/dist/views/login/LoginView.d.ts +47 -0
  409. package/dist/views/login/index.cjs +1 -0
  410. package/dist/views/login/index.d.ts +1 -0
  411. package/dist/views/login/index.js +2 -0
  412. package/dist/views/root/RootView.d.ts +12 -0
  413. package/dist/views/root/index.d.ts +1 -0
  414. package/dist/views/search/SearchView.d.ts +9 -0
  415. package/dist/views/search/index.cjs +1 -0
  416. package/dist/views/search/index.d.ts +1 -0
  417. package/dist/views/search/index.js +2 -0
  418. package/dist/views/sent/SentView.d.ts +9 -0
  419. package/dist/views/sent/index.cjs +1 -0
  420. package/dist/views/sent/index.d.ts +1 -0
  421. package/dist/views/sent/index.js +2 -0
  422. package/dist/views/settings/notifications/SettingsNotificationsView.d.ts +5 -0
  423. package/dist/views/settings/notifications/index.cjs +1 -0
  424. package/dist/views/settings/notifications/index.d.ts +1 -0
  425. package/dist/views/settings/notifications/index.js +2 -0
  426. package/dist/views/templates/TemplatesView.d.ts +5 -0
  427. package/dist/views/templates/categories/TemplateCategoriesView.d.ts +5 -0
  428. package/dist/views/templates/categories/index.cjs +1 -0
  429. package/dist/views/templates/categories/index.d.ts +1 -0
  430. package/dist/views/templates/categories/index.js +2 -0
  431. package/dist/views/templates/designer/TemplateDesignerView.d.ts +6 -0
  432. package/dist/views/templates/designer/index.cjs +1 -0
  433. package/dist/views/templates/designer/index.d.ts +1 -0
  434. package/dist/views/templates/designer/index.js +2 -0
  435. package/dist/views/templates/index.cjs +1 -0
  436. package/dist/views/templates/index.d.ts +1 -0
  437. package/dist/views/templates/index.js +2 -0
  438. package/dist/views/templates/template-name-modal.d.ts +22 -0
  439. package/dist/views/templates/versions/TemplateVersionsView.d.ts +6 -0
  440. package/dist/views/templates/versions/index.cjs +1 -0
  441. package/dist/views/templates/versions/index.d.ts +1 -0
  442. package/dist/views/templates/versions/index.js +2 -0
  443. package/package.json +272 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Rytass
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # @rytass/bpm-core-react
2
+
3
+ React provider / hook / view components for the Rytass BPM approval workflow stack.
4
+
5
+ This package composes [`@mezzanine-ui/react`](https://www.npmjs.com/package/@mezzanine-ui/react) primitives with the BPM domain logic in [`@rytass/bpm-core-client`](https://www.npmjs.com/package/@rytass/bpm-core-client) and [`@rytass/bpm-core-shared`](https://www.npmjs.com/package/@rytass/bpm-core-shared) so a consumer can wire up the full BPM admin UI by re-exporting page modules from their Next.js App Router.
6
+
7
+ ## Status
8
+
9
+ `0.2.0` — early POC release. Only the login chain is built out (`/views/login`, `/pages/login`, providers). The remaining 17 views (inbox, instances, templates, forms, admin, settings, delegations) are planned for subsequent 0.2.x point releases.
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ pnpm add @rytass/bpm-core-react @rytass/bpm-core-client @rytass/bpm-core-shared @mezzanine-ui/react @mezzanine-ui/icons
15
+ ```
16
+
17
+ Peer requirements: React 18+, Mezzanine UI 1.1+. Next.js is required only when consuming the `pages/*` subpath; framework-agnostic consumers can use `views/*` directly with their own router adapter.
18
+
19
+ ## Usage
20
+
21
+ ### Drop-in Next.js page
22
+
23
+ ```tsx
24
+ // app/login/page.tsx
25
+ export { default, metadata } from '@rytass/bpm-core-react/pages/login';
26
+ ```
27
+
28
+ ### Framework-agnostic view
29
+
30
+ ```tsx
31
+ 'use client';
32
+ import { useRouter, usePathname } from 'next/navigation';
33
+ import {
34
+ AuthProvider,
35
+ RouterAdapterProvider,
36
+ } from '@rytass/bpm-core-react';
37
+ import { LoginView } from '@rytass/bpm-core-react/views/login';
38
+
39
+ function MyLoginPage() {
40
+ const next = useRouter();
41
+ const pathname = usePathname();
42
+ return (
43
+ <RouterAdapterProvider value={{ pathname, push: next.push, replace: next.replace }}>
44
+ <AuthProvider>
45
+ <LoginView brandTitle="My BPM" />
46
+ </AuthProvider>
47
+ </RouterAdapterProvider>
48
+ );
49
+ }
50
+ ```
51
+
52
+ For SPA / Remix / Tanstack Router hosts, supply a `RouterAdapter` that bridges your router primitives.
53
+
54
+ ## License
55
+
56
+ MIT
@@ -0,0 +1 @@
1
+ .bpm_delegationModalFields_gUlCQ{gap:12px;width:100%;display:grid}.bpm_delegationModalFields_gUlCQ .mzn-form-field--horizontal{align-items:flex-start}.bpm_delegationModalFields_gUlCQ .mzn-form-field--horizontal .mzn-form-field__label-area{white-space:nowrap;flex:0 0 112px;width:112px;min-width:112px}.bpm_delegationModalFields_gUlCQ .mzn-form-field--horizontal .mzn-form-field__label{white-space:nowrap;flex-wrap:nowrap}.bpm_delegationModalFields_gUlCQ .mzn-form-field--horizontal .mzn-form-field__data-entry{flex:auto;align-items:stretch;min-width:0;max-width:none}.bpm_delegationModalFields_gUlCQ .mzn-form-field__control-field-slot--main,.bpm_delegationModalFields_gUlCQ .mzn-auto-complete{width:100%;min-width:0}.bpm_delegationModalFields_gUlCQ .mzn-input,.bpm_delegationModalFields_gUlCQ .mzn-input-container,.bpm_delegationModalFields_gUlCQ .mzn-select,.bpm_delegationModalFields_gUlCQ .mzn-select-trigger,.bpm_delegationModalFields_gUlCQ .mzn-text-field{width:100%;min-width:0!important}.bpm_delegationModalFields_gUlCQ .mzn-select-trigger__input{text-overflow:ellipsis;width:100%;min-width:0!important}.bpm_delegationFilterArea_QDZkw{width:calc(100vw - 272px)}.bpm_delegationFilterArea_QDZkw .mzn-filter-area__actions{display:none}.bpm_delegationFilterArea_QDZkw .mzn-filter-area__row{align-items:flex-start}.bpm_delegationFilterArea_QDZkw .mzn-form-field__label-area{display:none}.bpm_delegationFilterArea_QDZkw .mzn-form-field__control-field-slot--main{width:100%;min-width:0}.bpm_delegationFilterArea_QDZkw .mzn-auto-complete{width:100%}.bpm_memberNameWithTooltip_RggTW{cursor:help;text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}
@@ -0,0 +1 @@
1
+ .bpm_orgTreeEditor_TMOtD{gap:12px;min-width:0;display:grid}.bpm_orgTreeSummary_vpcV8{border:1px solid var(--mzn-color-border,#d9dce1);background:var(--mzn-color-bg,#fff);border-radius:8px;gap:6px;min-width:0;padding:10px 12px;display:grid}.bpm_orgTreeChangeList_EzmOv{max-height:128px;color:var(--mzn-color-text-neutral,#5f6673);gap:4px;margin:0;padding-left:18px;font-size:13px;display:grid;overflow:auto}.bpm_orgTreeCanvas_MeD7y{border:1px solid var(--mzn-color-border,#d9dce1);background:#f7f9fc;border-radius:8px;width:100%;height:min(720px,100vh - 300px);min-height:520px;overflow:hidden}.bpm_orgTreeNode_bN4FS{border:1px solid var(--mzn-color-border,#d9dce1);background:#fff;border-radius:8px;gap:6px;width:232px;min-height:118px;padding:12px;display:grid;box-shadow:0 4px 12px #141c2c14}.bpm_orgTreeNodeRoot_Hr2KD{background:#eef4ff;border-style:dashed;min-height:86px}.bpm_orgTreeNodeSelected_eRwtL{border-color:var(--mzn-color-primary,#0057ff);box-shadow:0 0 0 3px #0057ff24}.bpm_orgTreeNodeChanged_qPJg0{border-color:var(--mzn-color-primary,#0057ff)}.bpm_orgTreeNodeDeleted_Ab0cI{opacity:.58}.bpm_orgTreeNodeHeader_LEXl-{justify-content:space-between;align-items:flex-start;gap:8px;min-width:0;display:flex}.bpm_orgTreeNodeHeader_LEXl->.mzn-typography{min-width:0}.bpm_orgTreeNodeBadge_zLc7t{color:var(--mzn-color-primary,#0057ff);background:#e4f0ff;border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:18px}.bpm_orgTreeNodeActions_cMldI{flex-wrap:wrap;gap:6px;padding-top:2px;display:flex}.bpm_tableIntroActions_WO4XU{flex:none;justify-content:flex-end;align-items:center;gap:8px;max-width:100%;display:inline-flex}.bpm_tableIntroActions_WO4XU>.mzn-button{flex:none}.bpm_modalFields_juyv6{gap:12px;width:100%;display:grid}.bpm_modalFields_juyv6 .mzn-form-field--horizontal{align-items:flex-start}.bpm_modalFields_juyv6 .mzn-form-field--horizontal .mzn-form-field__label-area{white-space:nowrap;flex:0 0 120px;width:120px;min-width:120px}.bpm_modalFields_juyv6 .mzn-form-field--horizontal .mzn-form-field__label{white-space:nowrap;flex-wrap:nowrap}.bpm_modalFields_juyv6 .mzn-form-field--horizontal .mzn-form-field__data-entry{flex:auto;align-items:stretch;min-width:0;max-width:none}.bpm_modalFields_juyv6 .mzn-form-field__control-field-slot--main,.bpm_modalFields_juyv6 .mzn-auto-complete{width:100%;min-width:0}.bpm_modalFields_juyv6 .mzn-input,.bpm_modalFields_juyv6 .mzn-input-container,.bpm_modalFields_juyv6 .mzn-picker,.bpm_modalFields_juyv6 .mzn-select,.bpm_modalFields_juyv6 .mzn-select-trigger,.bpm_modalFields_juyv6 .mzn-text-field{width:100%;min-width:0!important}.bpm_modalFields_juyv6 .mzn-select-trigger__input{text-overflow:ellipsis;width:100%;min-width:0!important}.bpm_tableIntro_u3hcm{justify-content:space-between;align-items:center;gap:16px;min-width:0;max-width:100%;margin-bottom:12px;display:flex}.bpm_tableIntro_u3hcm>div{min-width:0}.bpm_tableIntro_u3hcm>div>*{overflow-wrap:anywhere}.bpm_tableFrame_IdbmB{width:100%;min-width:0;max-width:100%;overflow-x:auto}.bpm_orgFilterArea_Xjbbp{margin-bottom:12px}.bpm_orgFilterArea_Xjbbp .mzn-filter-line,.bpm_orgFilterArea_Xjbbp .mzn-filter-area__line{flex-wrap:nowrap}.bpm_orgFilterArea_Xjbbp .mzn-filter-area__actions,.bpm_orgFilterArea_Xjbbp .mzn-form-field__label-area{display:none}.bpm_orgFilterArea_Xjbbp .mzn-form-field__control-field-slot--main{width:100%;min-width:0}.bpm_membershipFilterArea_zob-Y{overflow-x:auto}.bpm_membershipFilterArea_zob-Y .mzn-filter-line,.bpm_membershipFilterArea_zob-Y .mzn-filter-area__line{align-items:center;min-width:760px;flex-wrap:nowrap!important}.bpm_membershipFilterArea_zob-Y .mzn-filter,.bpm_membershipFilterArea_zob-Y .mzn-filter-area__filter{flex:1 1 0;min-width:0}.bpm_membershipFilterArea_zob-Y .mzn-filter:nth-child(3),.bpm_membershipFilterArea_zob-Y .mzn-filter-area__filter:nth-child(3){flex:0 0 180px}.bpm_membershipFilterArea_zob-Y .mzn-autocomplete{width:100%;min-width:0}.bpm_scopeLabel_TLHMC{align-items:center;min-height:24px;display:inline-flex}@media (max-width:960px){.bpm_tableIntro_u3hcm{flex-direction:column;align-items:flex-start}.bpm_tableIntroActions_WO4XU{flex-wrap:wrap;justify-content:flex-start}.bpm_orgFilterArea_Xjbbp .mzn-filter-line,.bpm_orgFilterArea_Xjbbp .mzn-filter-area__line{flex-wrap:wrap}.bpm_membershipFilterArea_zob-Y .mzn-filter-line,.bpm_membershipFilterArea_zob-Y .mzn-filter-area__line{align-items:stretch;flex-wrap:nowrap!important}.bpm_membershipFilterArea_zob-Y .mzn-form-field--horizontal{align-items:center}}
@@ -0,0 +1 @@
1
+ .bpm_memberFilterArea_9RB2k .mzn-filter-area__actions,.bpm_memberFilterArea_9RB2k .mzn-form-field__label-area{display:none}.bpm_memberFilterArea_9RB2k .mzn-form-field__control-field-slot--main{width:100%;min-width:0}.bpm_memberFilterArea_9RB2k .mzn-input,.bpm_memberFilterArea_9RB2k .mzn-input-container,.bpm_memberFilterArea_9RB2k .mzn-text-field{width:100%;min-width:0!important}.bpm_header_sIEtg{gap:4px;padding:24px 24px 0;display:grid}.bpm_detailFields_TyKNL{gap:16px;display:grid}.bpm_detailSection_-iLjy,.bpm_membershipList_5n9iq{gap:8px;display:grid}
@@ -0,0 +1 @@
1
+ .bpm_delegationFilterArea_hAA4C .mzn-filter-area__actions,.bpm_delegationFilterArea_hAA4C .mzn-form-field__label-area{display:none}.bpm_delegationFilterArea_hAA4C .mzn-form-field__control-field-slot--main{width:100%;min-width:0}.bpm_delegationModalFields_1aOVW{gap:12px;width:100%;display:grid}.bpm_delegationModalFields_1aOVW .mzn-form-field--horizontal{align-items:flex-start}.bpm_delegationModalFields_1aOVW .mzn-form-field--horizontal .mzn-form-field__label-area{white-space:nowrap;flex:0 0 112px;width:112px;min-width:112px}.bpm_delegationModalFields_1aOVW .mzn-form-field--horizontal .mzn-form-field__label{white-space:nowrap;flex-wrap:nowrap}.bpm_delegationModalFields_1aOVW .mzn-form-field--horizontal .mzn-form-field__data-entry{flex:auto;align-items:stretch;min-width:0;max-width:none}.bpm_delegationModalFields_1aOVW .mzn-form-field__control-field-slot--main,.bpm_delegationModalFields_1aOVW .mzn-autocomplete{width:100%;min-width:0}.bpm_delegationModalFields_1aOVW .mzn-input,.bpm_delegationModalFields_1aOVW .mzn-input-container,.bpm_delegationModalFields_1aOVW .mzn-picker,.bpm_delegationModalFields_1aOVW .mzn-select,.bpm_delegationModalFields_1aOVW .mzn-select-trigger,.bpm_delegationModalFields_1aOVW .mzn-text-field{width:100%;min-width:0!important}.bpm_delegationModalFields_1aOVW .mzn-select-trigger__input{text-overflow:ellipsis;width:100%;min-width:0!important}.bpm_memberNameWithTooltip_6Mojc{cursor:help;text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}
@@ -0,0 +1 @@
1
+ .bpm_root_ehm7w{gap:12px;width:min(86vw,1080px);display:grid}.bpm_toolbar_R-tis{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.bpm_pageControls_jM-rC,.bpm_zoomControls_7RAbJ{align-items:center;gap:8px;display:flex}.bpm_counter_ILUsD{text-align:center;white-space:nowrap;min-width:92px}.bpm_viewport_DQXms{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;justify-content:center;align-items:flex-start;height:min(72vh,760px);min-height:420px;padding:16px;display:flex;overflow:auto}.bpm_page_Cv5Rg{color:#111827;background:#fff;box-shadow:0 12px 32px #0f172a24}.bpm_state_bpgp3{justify-content:center;align-items:center;width:100%;min-height:320px;display:flex}@media (max-width:720px){.bpm_root_ehm7w{width:92vw}.bpm_toolbar_R-tis{align-items:stretch;display:grid}.bpm_pageControls_jM-rC,.bpm_zoomControls_7RAbJ{justify-content:space-between}.bpm_counter_ILUsD{min-width:84px}.bpm_viewport_DQXms{height:68vh;min-height:360px;padding:12px}}
@@ -0,0 +1 @@
1
+ .bpm_loginPage_BjzaI{background:var(--mzn-color-bg-body);justify-content:center;align-items:center;min-height:100vh;padding:32px;display:flex}.bpm_loginPanel_xo0TW{border:1px solid var(--mzn-color-border);box-sizing:border-box;border-radius:8px;flex-direction:column;gap:28px;width:100%;max-width:440px;padding:32px;display:flex}.bpm_brand_KVmvZ{align-items:center;gap:14px;display:flex}.bpm_brandLogo_jxEAG{object-fit:contain;border-radius:8px;width:40px;height:40px}.bpm_form_rKKP2{flex-direction:column;gap:18px;display:flex}.bpm_demoUsers_g-5Hd{border-top:1px solid var(--mzn-color-border);flex-direction:column;gap:10px;padding-top:20px;display:flex}.bpm_demoUserList_IxtKp{gap:8px;display:grid}.bpm_demoUserButton_YdkSa{border:1px solid var(--mzn-color-border);color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border-radius:6px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.bpm_demoUserButton_YdkSa:hover{border-color:var(--mzn-color-primary)}.bpm_demoUserButton_YdkSa span:last-child{color:var(--mzn-color-text-secondary);font-size:12px}
@@ -0,0 +1 @@
1
+ .bpm_preferenceFilter_snhMa .mzn-filter-area__actions,.bpm_preferenceFilter_snhMa .mzn-form-field__label-area{display:none}.bpm_preferenceFilter_snhMa .mzn-form-field__control-field-slot--main{width:100%;min-width:0}.bpm_segmentFilterControl_piBnq{white-space:nowrap;align-items:flex-start;gap:8px;min-width:0;display:flex}.bpm_segmentFilterControl_piBnq .mzn-input-check-group--segmented{align-self:flex-start;transform:translateY(-7px)}.bpm_segmentFilterLabel_U0z8J{color:var(--mzn-color-text-primary,#1f2937);flex:none;font-size:13px;line-height:16px}
@@ -0,0 +1 @@
1
+ .bpm_pickerHost_Sw6gz{width:100%;min-width:0}.bpm_pickerHost_Sw6gz .mzn-auto-complete,.bpm_pickerHost_Sw6gz .mzn-input,.bpm_pickerHost_Sw6gz .mzn-input-container,.bpm_pickerHost_Sw6gz .mzn-select,.bpm_pickerHost_Sw6gz .mzn-select-trigger,.bpm_pickerHost_Sw6gz .mzn-text-field{width:100%;min-width:0!important}
@@ -0,0 +1 @@
1
+ .bpm_logo_QvBLU{object-fit:contain;width:24px;height:24px;margin:auto;display:block}.bpm_notificationBell_W-wl7{display:inline-flex;position:relative}.bpm_notificationBadge_Gy3Eq{color:#fff;pointer-events:none;background:#d92d20;border:1px solid #fff;border-radius:999px;justify-content:center;align-items:center;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:1;display:inline-flex;position:absolute;top:-4px;right:-4px}
@@ -0,0 +1 @@
1
+ .bpm_instanceFilterArea_qpvJq .mzn-filter-area__actions,.bpm_instanceFilterArea_qpvJq .mzn-form-field__label-area{display:none}.bpm_instanceFilterArea_qpvJq .mzn-form-field__control-field-slot--main{width:100%;min-width:0}
@@ -0,0 +1 @@
1
+ .bpm_authLoading_GiBnf{background:var(--mzn-color-bg-body);justify-content:center;align-items:center;min-height:100vh;padding:32px;display:flex}
@@ -0,0 +1,2 @@
1
+ "use client";require('../AdminDelegationsView.css');const e=require("./app-navigation-DAC5gFbG.cjs"),t=require("./auth-provider-D2P-qWmY.cjs"),n=require("./format-date-time-BQyH5U8z.cjs"),r=require("./bpm-form-field-Bc6k4ZEO.cjs");let i=require("react"),a=require("@mezzanine-ui/react"),o=require("react/jsx-runtime"),s=require("@rytass/bpm-core-client/workflow"),c=require("@mezzanine-ui/icons"),l=require("@mezzanine-ui/react/ContentHeader");l=e.o(l,1);let u=require("@mezzanine-ui/core/form"),d=require("@rytass/bpm-core-client/template");var f={delegationModalFields:`bpm_delegationModalFields_gUlCQ`,delegationFilterArea:`bpm_delegationFilterArea_QDZkw`,memberNameWithTooltip:`bpm_memberNameWithTooltip_RggTW`},ee=u.FormFieldLayout.HORIZONTAL,p=[10,20,50],m=[{key:`ALL`,label:`全部`},{key:`ACTIVE`,label:`啟用中`},{key:`REVOKED`,label:`已撤銷`},{key:`EXPIRED`,label:`已過期`}],h=[{id:`ALL`,name:`全部簽核`},{id:`TEMPLATE_LIST`,name:`指定模板`}],g=[{id:`ALL_SCOPES`,name:`全部範圍`,scopeType:null},{id:`ALL`,name:`全部簽核`,scopeType:`ALL`},{id:`TEMPLATE_LIST`,name:`指定模板`,scopeType:`TEMPLATE_LIST`}];function _({activeHref:ee=`/admin/delegations`}={}){let{member:_}=t.n(),b=_?.memberId??null,[x,C]=(0,i.useState)(null),[E,D]=(0,i.useState)(``),[O,A]=(0,i.useState)(null),[de,fe]=(0,i.useState)(!0),[j,pe]=(0,i.useState)(!1),[M,me]=(0,i.useState)([]),[N,he]=(0,i.useState)(null),[P,ge]=(0,i.useState)(null),[_e,F]=(0,i.useState)(!1),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(`100`),[B,V]=(0,i.useState)(1),[H,ve]=(0,i.useState)(10),[U,ye]=(0,i.useState)(`ALL`),[be,xe]=(0,i.useState)(0),[W,Se]=(0,i.useState)([]),[Ce,we]=(0,i.useState)(!1),[G,Te]=(0,i.useState)([]),[K,Ee]=(0,i.useState)(g[0]),[De,Oe]=(0,i.useState)(h[0]),[q,ke]=(0,i.useState)(``),[Ae,je]=(0,i.useState)(!1),[Me,J]=(0,i.useState)([]),Y=(0,i.useCallback)(async()=>{fe(!0),A(null);try{let[e,t]=await Promise.all([(0,s.listDelegationRulesPage)({agentMemberId:P?.id??null,includeInactive:!0,page:B,pageSize:H,principalMemberId:N?.id??null,scopeType:K.scopeType,status:U===`ALL`?null:U}),(0,s.searchMembers)(``)]);Se(e.rules),xe(e.totalCount),me(t.map(y))}catch(e){A(k(e))}finally{fe(!1)}},[P,N,B,H,U,K]);(0,i.useEffect)(()=>{Y()},[Y]);let X=(0,i.useMemo)(()=>new Map(M.map(e=>[e.id,e])),[M]),Ne=(0,i.useMemo)(()=>W.map(e=>({...e,agentEmail:X.get(e.agentMemberId)?.email??null,agentName:X.get(e.agentMemberId)?.displayName??e.agentMemberId,key:e.id,principalEmail:X.get(e.principalMemberId)?.email??null,principalName:X.get(e.principalMemberId)?.displayName??e.principalMemberId,scopeLabel:se(e)})),[X,W]),Z=h.find(e=>e.id===De.id)??h[0],Pe=(0,i.useMemo)(()=>[{key:`principal`,render:e=>(0,o.jsx)(te,{email:e.principalEmail,name:e.principalName}),title:`原簽核人`,width:220},{key:`agent`,render:e=>(0,o.jsx)(te,{email:e.agentEmail,name:e.agentName}),title:`代理人`,width:220},{dataIndex:`scopeLabel`,key:`scope`,title:`代理範圍`,width:220},{key:`status`,render:e=>(0,o.jsx)(ce,{status:e.status}),title:`狀態`,width:120},{dataIndex:`priority`,key:`priority`,title:`優先序`,width:100},{key:`startAt`,render:e=>(0,o.jsx)(a.Typography,{component:`span`,variant:`body`,children:n.t(e.startAt)}),title:`開始時間`,width:220},{key:`endAt`,render:e=>(0,o.jsx)(a.Typography,{component:`span`,variant:`body`,children:e.endAt?n.t(e.endAt):`-`}),title:`結束時間`,width:220}],[]),Fe=(0,i.useCallback)(async e=>{if(b){A(null);try{await(0,s.revokeDelegationRule)({id:e,revokedByMemberId:b}),await Y()}catch(e){A(k(e))}}},[b,Y]),Ie=(0,i.useMemo)(()=>({render:e=>e.status===`ACTIVE`?[{name:`撤銷`,onClick:()=>void Fe(e.id)}]:[],variant:`destructive-secondary`,width:88}),[Fe]);async function Q(e){pe(!0);try{me((await(0,s.searchMembers)(e)).map(y))}catch(e){A(k(e))}finally{pe(!1)}}async function $(e,t=G){je(!0);try{J(S(t,ie((await(0,d.listApprovalTemplates)()).map(ne),e)))}catch(e){A(k(e))}finally{je(!1)}}function Le(){C(null),D(``),L(null),z(`100`),Te([]),Oe(h[0]),ke(``),J([]),$(``,[]),F(!0)}function Re(){Ce||F(!1)}async function ze(){if(b){if(!I||!x){A(`請選擇原簽核人與代理人`);return}if(Z.id===`TEMPLATE_LIST`&&G.length<1){A(`請選擇至少一個簽核模板`);return}if(ue(q,E)){A(`結束時間必須晚於起始時間`);return}we(!0),A(null);try{await(0,s.createDelegationRule)({agentMemberId:x.id,createdByMemberId:b,endAt:E||null,principalMemberId:I.id,priority:Number(R)||100,requiresConfirmation:!1,scopeConditionCel:null,scopeTemplateIds:Z.id===`TEMPLATE_LIST`?G.map(e=>e.id):[],scopeType:Z.id,startAt:q||null}),F(!1),B===1?await Y():V(1)}catch(e){A(k(e))}finally{we(!1)}}}return(0,o.jsxs)(a.Layout,{children:[(0,o.jsx)(e.t,{activeHref:ee}),(0,o.jsxs)(a.Layout.Main,{children:[(0,o.jsx)(a.PageHeader,{children:(0,o.jsx)(l.default,{description:`設定簽核代理規則,讓符合範圍的待簽任務自動改派給代理人。`,title:`代理設定`,children:(0,o.jsx)(a.Button,{icon:c.PlusIcon,iconType:`leading`,onClick:Le,variant:`base-primary`,children:`建立代理`})})}),(0,o.jsx)(a.SectionGroup,{children:(0,o.jsxs)(a.Section,{filterArea:(0,o.jsx)(a.FilterArea,{className:f.delegationFilterArea,children:(0,o.jsxs)(a.FilterLine,{children:[(0,o.jsx)(a.Filter,{span:2,children:(0,o.jsx)(v,{hideLabel:!0,label:`原簽核人`,loading:j,name:`principalFilterMemberId`,onChange:e=>{he(e),V(1)},onSearch:Q,options:M,required:!1,layout:u.FormFieldLayout.VERTICAL,size:`sub`,value:N})}),(0,o.jsx)(a.Filter,{span:2,children:(0,o.jsx)(v,{hideLabel:!0,label:`代理人`,loading:j,name:`agentFilterMemberId`,onChange:e=>{ge(e),V(1)},onSearch:Q,options:M,required:!1,layout:u.FormFieldLayout.VERTICAL,size:`sub`,value:P})}),(0,o.jsx)(a.Filter,{span:2,children:(0,o.jsx)(a.FormField,{fullWidth:!0,layout:u.FormFieldLayout.VERTICAL,name:`scopeFilterType`,children:(0,o.jsx)(a.Select,{clearable:!1,fullWidth:!0,onChange:e=>{Ee(oe(e)),V(1)},options:[...g],placeholder:`代理範圍`,size:`sub`,value:K})})})]})}),tab:(0,o.jsx)(a.Tab,{activeKey:U,onChange:e=>{ye(le(e)),V(1)},children:m.map(e=>(0,o.jsx)(a.TabItem,{children:e.label},e.key))}),children:[O?(0,o.jsx)(a.Typography,{color:`text-error`,variant:`body`,children:O}):null,(0,o.jsx)(a.Table,{actions:Ie,columns:Pe,dataSource:Ne,fullWidth:!0,loading:de,pagination:{current:B,onChange:e=>{V(e)},onChangePageSize:e=>{V(1),ve(e)},pageSize:H,pageSizeLabel:`每頁筆數`,pageSizeOptions:p,renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:be}})]})}),(0,o.jsx)(a.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!I||!x},confirmText:`建立代理`,loading:Ce,modalType:`standard`,onCancel:Re,onClose:Re,onConfirm:()=>void ze(),open:_e,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`代理生效後,後續建立的待簽任務會依範圍自動指派。`,title:`建立代理`,children:(0,o.jsxs)(`div`,{className:f.delegationModalFields,children:[(0,o.jsx)(v,{label:`原簽核人`,loading:j,name:`principalMemberId`,onChange:L,onSearch:Q,options:M,value:I}),(0,o.jsx)(v,{label:`代理人`,loading:j,name:`agentMemberId`,onChange:C,onSearch:Q,options:M,value:x}),(0,o.jsx)(r.t,{label:`代理範圍`,name:`scopeType`,required:!0,children:(0,o.jsx)(a.Select,{clearable:!1,fullWidth:!0,onChange:e=>Oe(ae(e)),options:[...h],value:Z})}),Z.id===`TEMPLATE_LIST`?(0,o.jsx)(r.t,{label:`簽核模板`,name:`scopeTemplateIds`,required:!0,children:(0,o.jsx)(a.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的模板`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`scopeTemplateIds`,spellCheck:!1},loading:Ae,loadingText:`搜尋模板中...`,mode:`multiple`,onChange:e=>{let t=re(e);Te(t),J(e=>S(t,e))},onSearch:$,onVisibilityChange:e=>{e&&$(``)},options:[...Me],overflowStrategy:`wrap`,placeholder:`搜尋並選取簽核模板`,searchDebounceTime:300,value:[...G]})}):null,(0,o.jsx)(r.t,{label:`優先序`,name:`priority`,children:(0,o.jsx)(a.Input,{fullWidth:!0,onChange:e=>z(e.target.value),value:R,variant:`base`})}),(0,o.jsx)(r.t,{label:`起始時間`,name:`startAt`,children:(0,o.jsx)(a.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,fullWidth:!0,hideSecond:!0,onChange:e=>ke(T(e)),placeholderLeft:`留空立即生效`,placeholderRight:`選擇時間`,value:w(q)})}),(0,o.jsx)(r.t,{label:`結束時間`,name:`endAt`,children:(0,o.jsx)(a.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,fullWidth:!0,hideSecond:!0,onChange:e=>D(T(e)),placeholderLeft:`可留空`,placeholderRight:`選擇時間`,value:w(E)})})]})})]})]})}function v({hideLabel:e=!1,label:t,layout:n=ee,loading:i,name:s,onChange:c,onSearch:l,options:u,required:d=!0,size:f,value:p}){let m=(0,o.jsx)(a.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:s,spellCheck:!1},loading:i,loadingText:`搜尋成員中...`,mode:`single`,onChange:e=>c(b(e)),onSearch:l,onSearchTextChange:e=>c(x(e,u)),onVisibilityChange:e=>{e&&l(``)},options:[...u],placeholder:e?t:`搜尋姓名或信箱`,searchDebounceTime:300,size:f,value:p});return e?(0,o.jsx)(a.FormField,{fullWidth:!0,layout:n,name:s,children:m}):(0,o.jsx)(r.t,{label:t,layout:n,name:s,required:d,children:m})}function y(e){return{displayName:e.name,email:e.email,id:e.memberId,name:`${e.name} · ${e.email}`}}function b(e){if(!A(e))return null;let t=e.id,n=e.name,r=e.email,i=e.displayName;return typeof t==`string`&&typeof n==`string`?{displayName:typeof i==`string`?i:n,email:typeof r==`string`?r:null,id:t,name:n}:null}function te({email:e,name:t}){return e?(0,o.jsx)(a.Tooltip,{title:e,children:({onMouseEnter:e,onMouseLeave:n,ref:r})=>(0,o.jsx)(`span`,{className:f.memberNameWithTooltip,onMouseEnter:e,onMouseLeave:n,ref:r,children:t})}):(0,o.jsx)(`span`,{children:t})}function x(e,t){let n=e.trim().toLocaleLowerCase();if(!n)return null;let r=t.filter(e=>[e.id,e.name,e.email??``].some(e=>e.toLocaleLowerCase().includes(n)));return r.length===1?r[0]??null:null}function ne(e){return{id:e.id,name:e.name}}function re(e){return e.flatMap(e=>{if(!A(e))return[];let t=e.id,n=e.name;return typeof t==`string`&&typeof n==`string`?[{id:t,name:n}]:[]})}function ie(e,t){let n=t.trim().toLocaleLowerCase();return n?e.filter(e=>[e.id,e.name].some(e=>e.toLocaleLowerCase().includes(n))):e}function S(e,t){return[...e,...t].reduce((e,t)=>e.some(e=>e.id===t.id)?e:[...e,t],[])}function ae(e){return!A(e)||!C(e.id)?h[0]:h.find(t=>t.id===e.id)??h[0]}function oe(e){if(!A(e))return g[0];let t=e.id;return g.find(e=>e.id===t)??g[0]}function C(e){return e===`ALL`||e===`TEMPLATE_LIST`}function se(e){return e.scopeType===`ALL`?`全部簽核`:e.scopeType===`TEMPLATE_LIST`?`指定模板:${e.scopeTemplateIds.length}`:e.scopeConditionCel?`條件:${e.scopeConditionCel}`:`條件式`}function ce({status:e}){return e===`ACTIVE`?(0,o.jsx)(a.Badge,{size:`sub`,text:`啟用中`,variant:`dot-success`}):e===`REVOKED`?(0,o.jsx)(a.Badge,{size:`sub`,text:`已撤銷`,variant:`dot-inactive`}):e===`EXPIRED`?(0,o.jsx)(a.Badge,{size:`sub`,text:`已過期`,variant:`dot-warning`}):(0,o.jsx)(a.Badge,{size:`sub`,text:e,variant:`dot-info`})}function le(e){return e===`ACTIVE`||e===`REVOKED`||e===`EXPIRED`?e:`ALL`}function w(e){let t=e?E(e):null;return t?`${D(t)}T${O(t.getHours())}:${O(t.getMinutes())}`:void 0}function T(e){let t=e?E(e):null;return t?t.toISOString():``}function ue(e,t){if(!e||!t)return!1;let n=E(e),r=E(t);return!!n&&!!r&&r.getTime()<=n.getTime()}function E(e){if(e.endsWith(`Z`)||/[+-]\d{2}:\d{2}$/.test(e)){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}let[t=``,n=`00:00`]=e.split(`T`),[r=0,i=1,a=1]=t.split(`-`).map(Number),[o=0,s=0]=n.split(`:`).map(Number),c=new Date(r,i-1,a,o,s);return Number.isNaN(c.getTime())?null:c}function D(e){return`${e.getFullYear()}-${O(e.getMonth()+1)}-${O(e.getDate())}`}function O(e){return String(e).padStart(2,`0`)}function k(e){return e instanceof Error?e.message:`發生未知錯誤`}function A(e){return typeof e==`object`&&!!e}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return _}});
2
+ //# sourceMappingURL=AdminDelegationsView-CqNmlVWx.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDelegationsView-CqNmlVWx.cjs","names":[],"sources":["../../src/views/admin/delegations/delegations.module.scss","../../src/views/admin/delegations/AdminDelegationsView.tsx"],"sourcesContent":[".delegationModalFields {\n display: grid;\n gap: 12px;\n width: 100%;\n\n :global(.mzn-form-field--horizontal) {\n align-items: flex-start;\n }\n\n :global(.mzn-form-field--horizontal .mzn-form-field__label-area) {\n flex: 0 0 112px;\n width: 112px;\n min-width: 112px;\n white-space: nowrap;\n }\n\n :global(.mzn-form-field--horizontal .mzn-form-field__label) {\n flex-wrap: nowrap;\n white-space: nowrap;\n }\n\n :global(.mzn-form-field--horizontal .mzn-form-field__data-entry) {\n flex: 1 1 auto;\n align-items: stretch;\n min-width: 0;\n max-width: none;\n }\n\n :global(.mzn-form-field__control-field-slot--main) {\n width: 100%;\n min-width: 0;\n }\n\n :global(.mzn-auto-complete) {\n width: 100%;\n min-width: 0;\n }\n\n :global(.mzn-input),\n :global(.mzn-input-container),\n :global(.mzn-select),\n :global(.mzn-select-trigger),\n :global(.mzn-text-field) {\n width: 100%;\n min-width: 0 !important;\n }\n\n :global(.mzn-select-trigger__input) {\n width: 100%;\n min-width: 0 !important;\n text-overflow: ellipsis;\n }\n}\n\n.delegationFilterArea {\n width: calc(100vw - 272px);\n\n :global(.mzn-filter-area__actions) {\n display: none;\n }\n\n :global(.mzn-filter-area__row) {\n align-items: flex-start;\n }\n\n :global(.mzn-form-field__label-area) {\n display: none;\n }\n\n :global(.mzn-form-field__control-field-slot--main) {\n width: 100%;\n min-width: 0;\n }\n\n :global(.mzn-auto-complete) {\n width: 100%;\n }\n}\n\n.memberNameWithTooltip {\n cursor: help;\n text-decoration: underline dotted;\n text-underline-offset: 3px;\n}\n","'use client';\n\nimport {\n ChangeEvent,\n Key,\n ReactElement,\n RefCallback,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n AutoComplete,\n Badge,\n Button,\n DateTimePicker,\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n Layout,\n Modal,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Tab,\n TabItem,\n Table,\n Tooltip,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { PlusIcon } from '@mezzanine-ui/icons';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport { BPMFormField } from '../../../components/bpm-form-field';\nimport styles from './delegations.module.scss';\nimport { formatDateTime } from '../../../lib/format-date-time';\nimport { useAuth } from '../../../lib/auth-provider';\nimport { AppNavigation } from '../../../components/app-navigation';\nimport {\n DelegationRuleRecord,\n DelegationRuleStatus,\n DelegationScopeType,\n MemberProfileRecord,\n createDelegationRule,\n listDelegationRulesPage,\n revokeDelegationRule,\n searchMembers,\n} from '@rytass/bpm-core-client/workflow';\nimport {\n ApprovalTemplateRecord,\n listApprovalTemplates,\n} from '@rytass/bpm-core-client/template';\n\ntype MemberOption = Readonly<{\n displayName: string;\n email: string | null;\n id: string;\n name: string;\n}>;\n\ntype TemplateOption = Readonly<{\n id: string;\n name: string;\n}>;\n\ntype ScopeOption = Readonly<{\n id: DelegationScopeType;\n name: string;\n}>;\n\ntype ScopeFilterOption = Readonly<{\n id: 'ALL_SCOPES' | DelegationScopeType;\n name: string;\n scopeType: DelegationScopeType | null;\n}>;\n\ntype DelegationRuleRow = Readonly<\n Record<string, unknown> &\n DelegationRuleRecord & {\n agentEmail: string | null;\n agentName: string;\n key: string;\n principalEmail: string | null;\n principalName: string;\n scopeLabel: string;\n }\n>;\n\nconst DELEGATION_MODAL_FIELD_LAYOUT = FormFieldLayout.HORIZONTAL;\nconst DELEGATION_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst DELEGATION_STATUS_TABS: readonly {\n readonly key: DelegationStatusTabKey;\n readonly label: string;\n}[] = [\n { key: 'ALL', label: '全部' },\n { key: 'ACTIVE', label: '啟用中' },\n { key: 'REVOKED', label: '已撤銷' },\n { key: 'EXPIRED', label: '已過期' },\n];\n\ntype DelegationStatusTabKey = 'ALL' | DelegationRuleStatus;\n\nconst SCOPE_OPTIONS: readonly ScopeOption[] = [\n { id: 'ALL', name: '全部簽核' },\n { id: 'TEMPLATE_LIST', name: '指定模板' },\n];\n\nconst SCOPE_FILTER_OPTIONS: readonly ScopeFilterOption[] = [\n { id: 'ALL_SCOPES', name: '全部範圍', scopeType: null },\n { id: 'ALL', name: '全部簽核', scopeType: 'ALL' },\n { id: 'TEMPLATE_LIST', name: '指定模板', scopeType: 'TEMPLATE_LIST' },\n];\n\nexport interface AdminDelegationsViewProps {\n readonly activeHref?: string;\n}\n\nexport function AdminDelegationsView({\n activeHref = '/admin/delegations',\n}: AdminDelegationsViewProps = {}): ReactElement {\n const { member } = useAuth();\n const currentMemberId = member?.memberId ?? null;\n const [agentMember, setAgentMember] = useState<MemberOption | null>(null);\n const [endAt, setEndAt] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [memberLoading, setMemberLoading] = useState(false);\n const [memberOptions, setMemberOptions] = useState<readonly MemberOption[]>(\n [],\n );\n const [principalFilterMember, setPrincipalFilterMember] =\n useState<MemberOption | null>(null);\n const [agentFilterMember, setAgentFilterMember] =\n useState<MemberOption | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n const [principalMember, setPrincipalMember] = useState<MemberOption | null>(\n null,\n );\n const [priority, setPriority] = useState('100');\n const [rulePage, setRulePage] = useState(1);\n const [rulePageSize, setRulePageSize] = useState(10);\n const [ruleStatus, setRuleStatus] = useState<DelegationStatusTabKey>('ALL');\n const [ruleTotalCount, setRuleTotalCount] = useState(0);\n const [rules, setRules] = useState<readonly DelegationRuleRecord[]>([]);\n const [saving, setSaving] = useState(false);\n const [scopeTemplates, setScopeTemplates] = useState<\n readonly TemplateOption[]\n >([]);\n const [scopeFilterType, setScopeFilterType] = useState<ScopeFilterOption>(\n SCOPE_FILTER_OPTIONS[0],\n );\n const [scopeType, setScopeType] = useState<ScopeOption>(SCOPE_OPTIONS[0]);\n const [startAt, setStartAt] = useState('');\n const [templateLoading, setTemplateLoading] = useState(false);\n const [templateOptions, setTemplateOptions] = useState<\n readonly TemplateOption[]\n >([]);\n\n const refreshRules = useCallback(async (): Promise<void> => {\n setLoading(true);\n setError(null);\n\n try {\n const [rulePageResult, members] = await Promise.all([\n listDelegationRulesPage({\n agentMemberId: agentFilterMember?.id ?? null,\n includeInactive: true,\n page: rulePage,\n pageSize: rulePageSize,\n principalMemberId: principalFilterMember?.id ?? null,\n scopeType: scopeFilterType.scopeType,\n status: ruleStatus === 'ALL' ? null : ruleStatus,\n }),\n searchMembers(''),\n ]);\n\n setRules(rulePageResult.rules);\n setRuleTotalCount(rulePageResult.totalCount);\n setMemberOptions(members.map(readMemberOption));\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }, [\n agentFilterMember,\n principalFilterMember,\n rulePage,\n rulePageSize,\n ruleStatus,\n scopeFilterType,\n ]);\n\n useEffect((): void => {\n void refreshRules();\n }, [refreshRules]);\n\n const membersById = useMemo(\n (): ReadonlyMap<string, MemberOption> =>\n new Map(memberOptions.map((option) => [option.id, option])),\n [memberOptions],\n );\n const rows = useMemo(\n (): DelegationRuleRow[] =>\n rules.map((rule) => ({\n ...rule,\n agentEmail: membersById.get(rule.agentMemberId)?.email ?? null,\n agentName:\n membersById.get(rule.agentMemberId)?.displayName ??\n rule.agentMemberId,\n key: rule.id,\n principalEmail: membersById.get(rule.principalMemberId)?.email ?? null,\n principalName:\n membersById.get(rule.principalMemberId)?.displayName ??\n rule.principalMemberId,\n scopeLabel: readScopeLabel(rule),\n })),\n [membersById, rules],\n );\n const selectedScopeType =\n SCOPE_OPTIONS.find((option) => option.id === scopeType.id) ??\n SCOPE_OPTIONS[0];\n const columns = useMemo(\n (): TableColumn<DelegationRuleRow>[] => [\n {\n key: 'principal',\n render: (record: DelegationRuleRow): ReactElement => (\n <MemberNameWithEmailTooltip\n email={record.principalEmail}\n name={record.principalName}\n />\n ),\n title: '原簽核人',\n width: 220,\n },\n {\n key: 'agent',\n render: (record: DelegationRuleRow): ReactElement => (\n <MemberNameWithEmailTooltip\n email={record.agentEmail}\n name={record.agentName}\n />\n ),\n title: '代理人',\n width: 220,\n },\n { dataIndex: 'scopeLabel', key: 'scope', title: '代理範圍', width: 220 },\n {\n key: 'status',\n render: (record: DelegationRuleRow): ReactElement => (\n <DelegationStatusBadge status={record.status} />\n ),\n title: '狀態',\n width: 120,\n },\n { dataIndex: 'priority', key: 'priority', title: '優先序', width: 100 },\n {\n key: 'startAt',\n render: (record: DelegationRuleRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.startAt)}\n </Typography>\n ),\n title: '開始時間',\n width: 220,\n },\n {\n key: 'endAt',\n render: (record: DelegationRuleRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {record.endAt ? formatDateTime(record.endAt) : '-'}\n </Typography>\n ),\n title: '結束時間',\n width: 220,\n },\n ],\n [],\n );\n const handleRevoke = useCallback(\n async (id: string): Promise<void> => {\n if (!currentMemberId) {\n return;\n }\n\n setError(null);\n\n try {\n await revokeDelegationRule({\n id,\n revokedByMemberId: currentMemberId,\n });\n await refreshRules();\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n }\n },\n [currentMemberId, refreshRules],\n );\n const tableActions = useMemo(\n (): TableActions<DelegationRuleRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<DelegationRuleRow>['render']> =>\n record.status === 'ACTIVE'\n ? [\n {\n name: '撤銷',\n onClick: (): void => void handleRevoke(record.id),\n },\n ]\n : [],\n variant: 'destructive-secondary',\n width: 88,\n }),\n [handleRevoke],\n );\n\n async function handleSearchMembers(searchText: string): Promise<void> {\n setMemberLoading(true);\n\n try {\n setMemberOptions((await searchMembers(searchText)).map(readMemberOption));\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setMemberLoading(false);\n }\n }\n\n async function handleSearchTemplates(\n searchText: string,\n selectedOptions: readonly TemplateOption[] = scopeTemplates,\n ): Promise<void> {\n setTemplateLoading(true);\n\n try {\n const nextOptions = (await listApprovalTemplates()).map(\n readTemplateOption,\n );\n\n setTemplateOptions(\n mergeTemplateOptions(\n selectedOptions,\n filterTemplateOptions(nextOptions, searchText),\n ),\n );\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setTemplateLoading(false);\n }\n }\n\n function openCreateModal(): void {\n setAgentMember(null);\n setEndAt('');\n setPrincipalMember(null);\n setPriority('100');\n setScopeTemplates([]);\n setScopeType(SCOPE_OPTIONS[0]);\n setStartAt('');\n setTemplateOptions([]);\n void handleSearchTemplates('', []);\n setModalOpen(true);\n }\n\n function closeCreateModal(): void {\n if (saving) {\n return;\n }\n\n setModalOpen(false);\n }\n\n async function handleCreate(): Promise<void> {\n if (!currentMemberId) {\n return;\n }\n\n if (!principalMember || !agentMember) {\n setError('請選擇原簽核人與代理人');\n return;\n }\n\n if (selectedScopeType.id === 'TEMPLATE_LIST' && scopeTemplates.length < 1) {\n setError('請選擇至少一個簽核模板');\n return;\n }\n\n if (isInvalidDelegationDateRange(startAt, endAt)) {\n setError('結束時間必須晚於起始時間');\n return;\n }\n\n setSaving(true);\n setError(null);\n\n try {\n await createDelegationRule({\n agentMemberId: agentMember.id,\n createdByMemberId: currentMemberId,\n endAt: endAt || null,\n principalMemberId: principalMember.id,\n priority: Number(priority) || 100,\n requiresConfirmation: false,\n scopeConditionCel: null,\n scopeTemplateIds:\n selectedScopeType.id === 'TEMPLATE_LIST'\n ? scopeTemplates.map((template) => template.id)\n : [],\n scopeType: selectedScopeType.id,\n startAt: startAt || null,\n });\n setModalOpen(false);\n if (rulePage === 1) {\n await refreshRules();\n } else {\n setRulePage(1);\n }\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setSaving(false);\n }\n }\n\n return (\n <Layout>\n <AppNavigation activeHref={activeHref} />\n\n <Layout.Main>\n <PageHeader>\n <ContentHeader\n description=\"設定簽核代理規則,讓符合範圍的待簽任務自動改派給代理人。\"\n title=\"代理設定\"\n >\n <Button\n icon={PlusIcon}\n iconType=\"leading\"\n onClick={openCreateModal}\n variant=\"base-primary\"\n >\n 建立代理\n </Button>\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.delegationFilterArea}>\n <FilterLine>\n <Filter span={2}>\n <MemberAutoCompleteField\n hideLabel\n label=\"原簽核人\"\n loading={memberLoading}\n name=\"principalFilterMemberId\"\n onChange={(option): void => {\n setPrincipalFilterMember(option);\n setRulePage(1);\n }}\n onSearch={handleSearchMembers}\n options={memberOptions}\n required={false}\n layout={FormFieldLayout.VERTICAL}\n size=\"sub\"\n value={principalFilterMember}\n />\n </Filter>\n <Filter span={2}>\n <MemberAutoCompleteField\n hideLabel\n label=\"代理人\"\n loading={memberLoading}\n name=\"agentFilterMemberId\"\n onChange={(option): void => {\n setAgentFilterMember(option);\n setRulePage(1);\n }}\n onSearch={handleSearchMembers}\n options={memberOptions}\n required={false}\n layout={FormFieldLayout.VERTICAL}\n size=\"sub\"\n value={agentFilterMember}\n />\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"scopeFilterType\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setScopeFilterType(readScopeFilterOption(option));\n setRulePage(1);\n }}\n options={[...SCOPE_FILTER_OPTIONS]}\n placeholder=\"代理範圍\"\n size=\"sub\"\n value={scopeFilterType}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n tab={\n <Tab\n activeKey={ruleStatus}\n onChange={(activeKey): void => {\n setRuleStatus(readDelegationStatusTabKey(activeKey));\n setRulePage(1);\n }}\n >\n {DELEGATION_STATUS_TABS.map((statusTab) => (\n <TabItem key={statusTab.key}>{statusTab.label}</TabItem>\n ))}\n </Tab>\n }\n >\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={rows}\n fullWidth\n loading={loading}\n pagination={{\n current: rulePage,\n onChange: (page): void => {\n setRulePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setRulePage(1);\n setRulePageSize(pageSize);\n },\n pageSize: rulePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: DELEGATION_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: ruleTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n\n <Modal\n cancelText=\"取消\"\n confirmButtonProps={{\n disabled: !principalMember || !agentMember,\n }}\n confirmText=\"建立代理\"\n loading={saving}\n modalType=\"standard\"\n onCancel={closeCreateModal}\n onClose={closeCreateModal}\n onConfirm={(): void => void handleCreate()}\n open={modalOpen}\n showModalFooter\n showModalHeader\n size=\"regular\"\n supportingText=\"代理生效後,後續建立的待簽任務會依範圍自動指派。\"\n title=\"建立代理\"\n >\n <div className={styles.delegationModalFields}>\n <MemberAutoCompleteField\n label=\"原簽核人\"\n loading={memberLoading}\n name=\"principalMemberId\"\n onChange={setPrincipalMember}\n onSearch={handleSearchMembers}\n options={memberOptions}\n value={principalMember}\n />\n <MemberAutoCompleteField\n label=\"代理人\"\n loading={memberLoading}\n name=\"agentMemberId\"\n onChange={setAgentMember}\n onSearch={handleSearchMembers}\n options={memberOptions}\n value={agentMember}\n />\n <BPMFormField label=\"代理範圍\" name=\"scopeType\" required>\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void =>\n setScopeType(readScopeOptionFromValue(option))\n }\n options={[...SCOPE_OPTIONS]}\n value={selectedScopeType}\n />\n </BPMFormField>\n {selectedScopeType.id === 'TEMPLATE_LIST' ? (\n <BPMFormField label=\"簽核模板\" name=\"scopeTemplateIds\" required>\n <AutoComplete\n asyncData\n disabledOptionsFilter\n emptyText=\"沒有符合的模板\"\n inputProps={{\n autoCapitalize: 'none',\n autoCorrect: 'off',\n name: 'scopeTemplateIds',\n spellCheck: false,\n }}\n loading={templateLoading}\n loadingText=\"搜尋模板中...\"\n mode=\"multiple\"\n onChange={(nextTemplates): void => {\n const selectedTemplates =\n readTemplateOptionsFromValue(nextTemplates);\n\n setScopeTemplates(selectedTemplates);\n setTemplateOptions((currentOptions) =>\n mergeTemplateOptions(selectedTemplates, currentOptions),\n );\n }}\n onSearch={handleSearchTemplates}\n onVisibilityChange={(open): void => {\n if (open) {\n void handleSearchTemplates('');\n }\n }}\n options={[...templateOptions]}\n overflowStrategy=\"wrap\"\n placeholder=\"搜尋並選取簽核模板\"\n searchDebounceTime={300}\n value={[...scopeTemplates]}\n />\n </BPMFormField>\n ) : null}\n <BPMFormField label=\"優先序\" name=\"priority\">\n <Input\n fullWidth\n onChange={(event: ChangeEvent<HTMLInputElement>): void =>\n setPriority(event.target.value)\n }\n value={priority}\n variant=\"base\"\n />\n </BPMFormField>\n <BPMFormField label=\"起始時間\" name=\"startAt\">\n <DateTimePicker\n formatDate=\"YYYY-MM-DD\"\n formatTime=\"HH:mm\"\n fullWidth\n hideSecond\n onChange={(nextValue): void =>\n setStartAt(formatDelegationDateTimePickerValue(nextValue))\n }\n placeholderLeft=\"留空立即生效\"\n placeholderRight=\"選擇時間\"\n value={readDelegationDateTimePickerValue(startAt)}\n />\n </BPMFormField>\n <BPMFormField label=\"結束時間\" name=\"endAt\">\n <DateTimePicker\n formatDate=\"YYYY-MM-DD\"\n formatTime=\"HH:mm\"\n fullWidth\n hideSecond\n onChange={(nextValue): void =>\n setEndAt(formatDelegationDateTimePickerValue(nextValue))\n }\n placeholderLeft=\"可留空\"\n placeholderRight=\"選擇時間\"\n value={readDelegationDateTimePickerValue(endAt)}\n />\n </BPMFormField>\n </div>\n </Modal>\n </Layout.Main>\n </Layout>\n );\n}\n\nfunction MemberAutoCompleteField({\n hideLabel = false,\n label,\n layout = DELEGATION_MODAL_FIELD_LAYOUT,\n loading,\n name,\n onChange,\n onSearch,\n options,\n required = true,\n size,\n value,\n}: {\n readonly hideLabel?: boolean;\n readonly label: string;\n readonly layout?: FormFieldLayout;\n readonly loading: boolean;\n readonly name: string;\n readonly onChange: (option: MemberOption | null) => void;\n readonly onSearch: (searchText: string) => Promise<void>;\n readonly options: readonly MemberOption[];\n readonly required?: boolean;\n readonly size?: 'main' | 'sub';\n readonly value: MemberOption | null;\n}): ReactElement {\n const autoComplete = (\n <AutoComplete\n asyncData\n disabledOptionsFilter\n emptyText=\"沒有符合的成員\"\n inputProps={{\n autoCapitalize: 'none',\n autoCorrect: 'off',\n name,\n spellCheck: false,\n }}\n loading={loading}\n loadingText=\"搜尋成員中...\"\n mode=\"single\"\n onChange={(option): void => onChange(readMemberOptionFromValue(option))}\n onSearch={onSearch}\n onSearchTextChange={(searchText): void =>\n onChange(readUniqueMemberOption(searchText, options))\n }\n onVisibilityChange={(open): void => {\n if (open) {\n void onSearch('');\n }\n }}\n options={[...options]}\n placeholder={hideLabel ? label : '搜尋姓名或信箱'}\n searchDebounceTime={300}\n size={size}\n value={value}\n />\n );\n\n if (hideLabel) {\n return (\n <FormField fullWidth layout={layout} name={name}>\n {autoComplete}\n </FormField>\n );\n }\n\n return (\n <BPMFormField label={label} layout={layout} name={name} required={required}>\n {autoComplete}\n </BPMFormField>\n );\n}\n\nfunction readMemberOption(member: MemberProfileRecord): MemberOption {\n return {\n displayName: member.name,\n email: member.email,\n id: member.memberId,\n name: `${member.name} · ${member.email}`,\n };\n}\n\nfunction readMemberOptionFromValue(value: unknown): MemberOption | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = value.id;\n const name = value.name;\n const email = value.email;\n const displayName = value.displayName;\n\n return typeof id === 'string' && typeof name === 'string'\n ? {\n displayName: typeof displayName === 'string' ? displayName : name,\n email: typeof email === 'string' ? email : null,\n id,\n name,\n }\n : null;\n}\n\nfunction MemberNameWithEmailTooltip({\n email,\n name,\n}: {\n readonly email: string | null;\n readonly name: string;\n}): ReactElement {\n if (!email) {\n return <span>{name}</span>;\n }\n\n return (\n <Tooltip title={email}>\n {({ onMouseEnter, onMouseLeave, ref }): ReactElement => (\n <span\n className={styles.memberNameWithTooltip}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n ref={ref as RefCallback<HTMLSpanElement>}\n >\n {name}\n </span>\n )}\n </Tooltip>\n );\n}\n\nfunction readUniqueMemberOption(\n searchText: string,\n options: readonly MemberOption[],\n): MemberOption | null {\n const normalizedSearchText = searchText.trim().toLocaleLowerCase();\n\n if (!normalizedSearchText) {\n return null;\n }\n\n const matches = options.filter((option) =>\n [option.id, option.name, option.email ?? ''].some((value) =>\n value.toLocaleLowerCase().includes(normalizedSearchText),\n ),\n );\n\n return matches.length === 1 ? (matches[0] ?? null) : null;\n}\n\nfunction readTemplateOption(template: ApprovalTemplateRecord): TemplateOption {\n return {\n id: template.id,\n name: template.name,\n };\n}\n\nfunction readTemplateOptionsFromValue(\n value: readonly unknown[],\n): readonly TemplateOption[] {\n return value.flatMap((item): readonly TemplateOption[] => {\n if (!isRecord(item)) {\n return [];\n }\n\n const id = item.id;\n const name = item.name;\n\n return typeof id === 'string' && typeof name === 'string'\n ? [{ id, name }]\n : [];\n });\n}\n\nfunction filterTemplateOptions(\n options: readonly TemplateOption[],\n searchText: string,\n): readonly TemplateOption[] {\n const normalizedSearchText = searchText.trim().toLocaleLowerCase();\n\n if (!normalizedSearchText) {\n return options;\n }\n\n return options.filter((option) =>\n [option.id, option.name].some((value) =>\n value.toLocaleLowerCase().includes(normalizedSearchText),\n ),\n );\n}\n\nfunction mergeTemplateOptions(\n selectedOptions: readonly TemplateOption[],\n availableOptions: readonly TemplateOption[],\n): readonly TemplateOption[] {\n return [...selectedOptions, ...availableOptions].reduce<TemplateOption[]>(\n (options, option) =>\n options.some((currentOption) => currentOption.id === option.id)\n ? options\n : [...options, option],\n [],\n );\n}\n\nfunction readScopeOptionFromValue(value: unknown): ScopeOption {\n if (!isRecord(value) || !isSelectableDelegationScopeType(value.id)) {\n return SCOPE_OPTIONS[0];\n }\n\n return (\n SCOPE_OPTIONS.find((option) => option.id === value.id) ?? SCOPE_OPTIONS[0]\n );\n}\n\nfunction readScopeFilterOption(value: unknown): ScopeFilterOption {\n if (!isRecord(value)) {\n return SCOPE_FILTER_OPTIONS[0];\n }\n\n const id = value.id;\n\n return (\n SCOPE_FILTER_OPTIONS.find((option) => option.id === id) ??\n SCOPE_FILTER_OPTIONS[0]\n );\n}\n\nfunction isSelectableDelegationScopeType(\n value: unknown,\n): value is ScopeOption['id'] {\n return value === 'ALL' || value === 'TEMPLATE_LIST';\n}\n\nfunction readScopeLabel(rule: DelegationRuleRecord): string {\n if (rule.scopeType === 'ALL') {\n return '全部簽核';\n }\n\n if (rule.scopeType === 'TEMPLATE_LIST') {\n return `指定模板:${rule.scopeTemplateIds.length}`;\n }\n\n return rule.scopeConditionCel ? `條件:${rule.scopeConditionCel}` : '條件式';\n}\n\nfunction DelegationStatusBadge({\n status,\n}: {\n readonly status: DelegationRuleRecord['status'];\n}): ReactElement {\n if (status === 'ACTIVE') {\n return <Badge size=\"sub\" text=\"啟用中\" variant=\"dot-success\" />;\n }\n\n if (status === 'REVOKED') {\n return <Badge size=\"sub\" text=\"已撤銷\" variant=\"dot-inactive\" />;\n }\n\n if (status === 'EXPIRED') {\n return <Badge size=\"sub\" text=\"已過期\" variant=\"dot-warning\" />;\n }\n\n return <Badge size=\"sub\" text={status} variant=\"dot-info\" />;\n}\n\nfunction readDelegationStatusTabKey(activeKey: Key): DelegationStatusTabKey {\n if (\n activeKey === 'ACTIVE' ||\n activeKey === 'REVOKED' ||\n activeKey === 'EXPIRED'\n ) {\n return activeKey;\n }\n\n return 'ALL';\n}\n\nfunction readDelegationDateTimePickerValue(value: string): string | undefined {\n const date = value ? parseDelegationDateTimeValue(value) : null;\n\n return date\n ? `${formatDateParts(date)}T${padDatePart(date.getHours())}:${padDatePart(\n date.getMinutes(),\n )}`\n : undefined;\n}\n\nfunction formatDelegationDateTimePickerValue(\n value: string | undefined,\n): string {\n const date = value ? parseDelegationDateTimeValue(value) : null;\n\n return date ? date.toISOString() : '';\n}\n\nfunction isInvalidDelegationDateRange(startAt: string, endAt: string): boolean {\n if (!startAt || !endAt) {\n return false;\n }\n\n const startDate = parseDelegationDateTimeValue(startAt);\n const endDate = parseDelegationDateTimeValue(endAt);\n\n return !!startDate && !!endDate && endDate.getTime() <= startDate.getTime();\n}\n\nfunction parseDelegationDateTimeValue(value: string): Date | null {\n if (value.endsWith('Z') || /[+-]\\d{2}:\\d{2}$/.test(value)) {\n const parsedDate = new Date(value);\n\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n }\n\n const [datePart = '', timePart = '00:00'] = value.split('T');\n const [year = 0, month = 1, day = 1] = datePart.split('-').map(Number);\n const [hour = 0, minute = 0] = timePart.split(':').map(Number);\n const parsedDate = new Date(year, month - 1, day, hour, minute);\n\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\nfunction formatDateParts(date: Date): string {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(\n date.getDate(),\n )}`;\n}\n\nfunction padDatePart(value: number): string {\n return String(value).padStart(2, '0');\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null;\n}\n"],"mappings":"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"}