@rytass/bpm-core-react 0.2.0 → 0.3.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 (418) hide show
  1. package/dist/chunks/app-navigation-BRRFCkxZ.cjs +2 -0
  2. package/dist/chunks/{app-navigation-DAC5gFbG.cjs.map → app-navigation-BRRFCkxZ.cjs.map} +1 -1
  3. package/dist/chunks/{app-navigation-CATITRM7.js → app-navigation-rxhpHCch.js} +2 -3
  4. package/dist/chunks/{app-navigation-CATITRM7.js.map → app-navigation-rxhpHCch.js.map} +1 -1
  5. package/dist/chunks/approval-instance-list-page-2vUWc5-c.cjs +2 -0
  6. package/dist/chunks/{approval-instance-list-page-DIAmwhvl.cjs.map → approval-instance-list-page-2vUWc5-c.cjs.map} +1 -1
  7. package/dist/chunks/{approval-instance-list-page-B6vAGvOb.js → approval-instance-list-page-BgE4vQw8.js} +3 -3
  8. package/dist/chunks/{approval-instance-list-page-B6vAGvOb.js.map → approval-instance-list-page-BgE4vQw8.js.map} +1 -1
  9. package/dist/chunks/auth-provider-BV8Iiwfb.cjs +2 -0
  10. package/dist/chunks/auth-provider-BV8Iiwfb.cjs.map +1 -0
  11. package/dist/chunks/auth-provider-Bnox5gsx.js +98 -0
  12. package/dist/chunks/auth-provider-Bnox5gsx.js.map +1 -0
  13. package/dist/chunks/builder-B8X-m6C5.cjs +3 -0
  14. package/dist/chunks/builder-B8X-m6C5.cjs.map +1 -0
  15. package/dist/chunks/{FormBuilderView-CvChAvgD.js → builder-Du_0apkh.js} +3 -3
  16. package/dist/chunks/builder-Du_0apkh.js.map +1 -0
  17. package/dist/chunks/{TemplateCategoriesView-CgZciaSd.js → categories-DG4k7S8V.js} +86 -85
  18. package/dist/chunks/categories-DG4k7S8V.js.map +1 -0
  19. package/dist/chunks/categories-DshBQG33.cjs +2 -0
  20. package/dist/chunks/categories-DshBQG33.cjs.map +1 -0
  21. package/dist/chunks/{dashboard-page-BsW8t104.js → dashboard-page-CTBwpu_D.js} +3 -4
  22. package/dist/chunks/{dashboard-page-BsW8t104.js.map → dashboard-page-CTBwpu_D.js.map} +1 -1
  23. package/dist/chunks/dashboard-page-DcDiWQp2.cjs +2 -0
  24. package/dist/chunks/{dashboard-page-udYhnyMW.cjs.map → dashboard-page-DcDiWQp2.cjs.map} +1 -1
  25. package/dist/chunks/{AdminDelegationsView-DydMZ9ED.js → delegations-BAZQbElH.js} +4 -4
  26. package/dist/chunks/delegations-BAZQbElH.js.map +1 -0
  27. package/dist/chunks/{DelegationsView-DQUqOUV5.js → delegations-DzrckrPp.js} +4 -4
  28. package/dist/chunks/delegations-DzrckrPp.js.map +1 -0
  29. package/dist/chunks/delegations-Z8hTajLj.cjs +2 -0
  30. package/dist/chunks/delegations-Z8hTajLj.cjs.map +1 -0
  31. package/dist/chunks/delegations-hb9JoVZe.cjs +2 -0
  32. package/dist/chunks/delegations-hb9JoVZe.cjs.map +1 -0
  33. package/dist/chunks/{InstanceDetailView-C-A-LOCG.js → detail-DilI0PPe.js} +10 -10
  34. package/dist/chunks/detail-DilI0PPe.js.map +1 -0
  35. package/dist/chunks/detail-DuRg3Y7b.cjs +2 -0
  36. package/dist/chunks/detail-DuRg3Y7b.cjs.map +1 -0
  37. package/dist/chunks/{format-date-time-BQyH5U8z.cjs → format-date-time-hKLVMxq4.cjs} +2 -2
  38. package/dist/chunks/{format-date-time-BQyH5U8z.cjs.map → format-date-time-hKLVMxq4.cjs.map} +1 -1
  39. package/dist/chunks/{LoginView-a1iu3cfc.js → login-C20yVxbc.js} +9 -9
  40. package/dist/chunks/login-C20yVxbc.js.map +1 -0
  41. package/dist/chunks/login-CQ9MfwcC.cjs +2 -0
  42. package/dist/chunks/login-CQ9MfwcC.cjs.map +1 -0
  43. package/dist/chunks/{SettingsNotificationsView-B6F6fa7U.js → notifications-B2Lk3grg.js} +4 -4
  44. package/dist/chunks/notifications-B2Lk3grg.js.map +1 -0
  45. package/dist/chunks/notifications-C8ADhnxF.cjs +2 -0
  46. package/dist/chunks/notifications-C8ADhnxF.cjs.map +1 -0
  47. package/dist/chunks/orgs-CGv3VNDR.cjs +2 -0
  48. package/dist/chunks/orgs-CGv3VNDR.cjs.map +1 -0
  49. package/dist/chunks/{AdminOrgsView-DZaVAbaQ.js → orgs-c29y74w2.js} +52 -52
  50. package/dist/chunks/orgs-c29y74w2.js.map +1 -0
  51. package/dist/chunks/templates-Cd0WFheA.cjs +2 -0
  52. package/dist/chunks/templates-Cd0WFheA.cjs.map +1 -0
  53. package/dist/chunks/{TemplatesView-BLj9f-XI.js → templates-Dn9QHFSy.js} +4 -4
  54. package/dist/chunks/templates-Dn9QHFSy.js.map +1 -0
  55. package/dist/chunks/users-B-trMu0E.cjs +2 -0
  56. package/dist/chunks/users-B-trMu0E.cjs.map +1 -0
  57. package/dist/chunks/{AdminUsersView-C0oO05Br.js → users-itVXXRj7.js} +3 -3
  58. package/dist/chunks/users-itVXXRj7.js.map +1 -0
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.js +12 -13
  62. package/dist/index.js.map +1 -1
  63. package/dist/next/BPMNextProviders.d.ts +6 -0
  64. package/dist/next/index.cjs +2 -0
  65. package/dist/next/index.cjs.map +1 -0
  66. package/dist/next/index.d.ts +1 -0
  67. package/dist/next/index.js +33 -0
  68. package/dist/next/index.js.map +1 -0
  69. package/dist/pages/admin/delegations/index.cjs +1 -1
  70. package/dist/pages/admin/delegations/index.cjs.map +1 -1
  71. package/dist/pages/admin/delegations/index.js +1 -1
  72. package/dist/pages/admin/delegations/index.js.map +1 -1
  73. package/dist/pages/admin/orgs/index.cjs +1 -1
  74. package/dist/pages/admin/orgs/index.cjs.map +1 -1
  75. package/dist/pages/admin/orgs/index.js +1 -1
  76. package/dist/pages/admin/orgs/index.js.map +1 -1
  77. package/dist/pages/admin/users/index.cjs +1 -1
  78. package/dist/pages/admin/users/index.cjs.map +1 -1
  79. package/dist/pages/admin/users/index.js +1 -1
  80. package/dist/pages/admin/users/index.js.map +1 -1
  81. package/dist/pages/cc/index.cjs +1 -1
  82. package/dist/pages/cc/index.cjs.map +1 -1
  83. package/dist/pages/cc/index.js +1 -1
  84. package/dist/pages/cc/index.js.map +1 -1
  85. package/dist/pages/dashboard/index.cjs +1 -1
  86. package/dist/pages/dashboard/index.cjs.map +1 -1
  87. package/dist/pages/dashboard/index.js +1 -1
  88. package/dist/pages/dashboard/index.js.map +1 -1
  89. package/dist/pages/delegations/index.cjs +1 -1
  90. package/dist/pages/delegations/index.cjs.map +1 -1
  91. package/dist/pages/delegations/index.js +1 -1
  92. package/dist/pages/delegations/index.js.map +1 -1
  93. package/dist/pages/forms/builder/index.cjs +1 -1
  94. package/dist/pages/forms/builder/index.cjs.map +1 -1
  95. package/dist/pages/forms/builder/index.d.ts +5 -7
  96. package/dist/pages/forms/builder/index.js +1 -1
  97. package/dist/pages/forms/builder/index.js.map +1 -1
  98. package/dist/pages/forms/index.cjs +1 -1
  99. package/dist/pages/forms/index.cjs.map +1 -1
  100. package/dist/pages/forms/index.js +1 -1
  101. package/dist/pages/forms/index.js.map +1 -1
  102. package/dist/pages/inbox/index.cjs +1 -1
  103. package/dist/pages/inbox/index.cjs.map +1 -1
  104. package/dist/pages/inbox/index.js +1 -1
  105. package/dist/pages/inbox/index.js.map +1 -1
  106. package/dist/pages/instances/detail/index.cjs +1 -1
  107. package/dist/pages/instances/detail/index.cjs.map +1 -1
  108. package/dist/pages/instances/detail/index.d.ts +1 -1
  109. package/dist/pages/instances/detail/index.js +1 -1
  110. package/dist/pages/instances/detail/index.js.map +1 -1
  111. package/dist/pages/instances/new/index.cjs +1 -1
  112. package/dist/pages/instances/new/index.cjs.map +1 -1
  113. package/dist/pages/instances/new/index.d.ts +5 -1
  114. package/dist/pages/instances/new/index.js +4 -3
  115. package/dist/pages/instances/new/index.js.map +1 -1
  116. package/dist/pages/login/index.cjs +1 -1
  117. package/dist/pages/login/index.cjs.map +1 -1
  118. package/dist/pages/login/index.d.ts +5 -1
  119. package/dist/pages/login/index.js +4 -3
  120. package/dist/pages/login/index.js.map +1 -1
  121. package/dist/pages/root/index.cjs +1 -1
  122. package/dist/pages/root/index.cjs.map +1 -1
  123. package/dist/pages/root/index.d.ts +7 -5
  124. package/dist/pages/root/index.js +5 -6
  125. package/dist/pages/root/index.js.map +1 -1
  126. package/dist/pages/search/index.cjs +1 -1
  127. package/dist/pages/search/index.cjs.map +1 -1
  128. package/dist/pages/search/index.js +1 -1
  129. package/dist/pages/search/index.js.map +1 -1
  130. package/dist/pages/sent/index.cjs +1 -1
  131. package/dist/pages/sent/index.cjs.map +1 -1
  132. package/dist/pages/sent/index.js +1 -1
  133. package/dist/pages/sent/index.js.map +1 -1
  134. package/dist/pages/settings/notifications/index.cjs +1 -1
  135. package/dist/pages/settings/notifications/index.cjs.map +1 -1
  136. package/dist/pages/settings/notifications/index.js +1 -1
  137. package/dist/pages/settings/notifications/index.js.map +1 -1
  138. package/dist/pages/templates/categories/index.cjs +1 -1
  139. package/dist/pages/templates/categories/index.cjs.map +1 -1
  140. package/dist/pages/templates/categories/index.js +1 -1
  141. package/dist/pages/templates/categories/index.js.map +1 -1
  142. package/dist/pages/templates/designer/index.cjs +1 -1
  143. package/dist/pages/templates/designer/index.cjs.map +1 -1
  144. package/dist/pages/templates/designer/index.d.ts +2 -4
  145. package/dist/pages/templates/designer/index.js +1 -1
  146. package/dist/pages/templates/designer/index.js.map +1 -1
  147. package/dist/pages/templates/index.cjs +1 -1
  148. package/dist/pages/templates/index.cjs.map +1 -1
  149. package/dist/pages/templates/index.js +1 -1
  150. package/dist/pages/templates/index.js.map +1 -1
  151. package/dist/pages/templates/versions/index.cjs +1 -1
  152. package/dist/pages/templates/versions/index.cjs.map +1 -1
  153. package/dist/pages/templates/versions/index.d.ts +2 -4
  154. package/dist/pages/templates/versions/index.js +1 -1
  155. package/dist/pages/templates/versions/index.js.map +1 -1
  156. package/dist/views/admin/delegations/index.cjs +1 -1
  157. package/dist/views/admin/delegations/index.js +1 -1
  158. package/dist/views/admin/index.cjs +1 -0
  159. package/dist/views/admin/index.d.ts +3 -0
  160. package/dist/views/admin/index.js +4 -0
  161. package/dist/views/admin/orgs/index.cjs +1 -1
  162. package/dist/views/admin/orgs/index.js +1 -1
  163. package/dist/views/admin/users/index.cjs +1 -1
  164. package/dist/views/admin/users/index.js +1 -1
  165. package/dist/views/cc/index.cjs +2 -1
  166. package/dist/views/cc/index.cjs.map +1 -0
  167. package/dist/views/cc/index.js +19 -2
  168. package/dist/views/cc/index.js.map +1 -0
  169. package/dist/views/dashboard/index.cjs +2 -1
  170. package/dist/views/dashboard/index.cjs.map +1 -0
  171. package/dist/views/dashboard/index.js +11 -2
  172. package/dist/views/dashboard/index.js.map +1 -0
  173. package/dist/views/delegations/index.cjs +1 -1
  174. package/dist/views/delegations/index.js +1 -1
  175. package/dist/views/forms/builder/index.cjs +1 -1
  176. package/dist/views/forms/builder/index.js +1 -1
  177. package/dist/views/forms/index.cjs +2 -1
  178. package/dist/views/forms/index.cjs.map +1 -0
  179. package/dist/views/forms/index.d.ts +1 -0
  180. package/dist/views/forms/index.js +186 -2
  181. package/dist/views/forms/index.js.map +1 -0
  182. package/dist/views/inbox/index.cjs +2 -1
  183. package/dist/views/inbox/index.cjs.map +1 -0
  184. package/dist/views/inbox/index.js +290 -2
  185. package/dist/views/inbox/index.js.map +1 -0
  186. package/dist/views/instances/detail/index.cjs +1 -1
  187. package/dist/views/instances/detail/index.js +1 -1
  188. package/dist/views/instances/index.cjs +1 -0
  189. package/dist/views/instances/index.d.ts +1 -0
  190. package/dist/views/instances/index.js +2 -0
  191. package/dist/views/instances/new/InstanceNewView.d.ts +3 -3
  192. package/dist/views/instances/new/index.cjs +2 -1
  193. package/dist/views/instances/new/index.cjs.map +1 -0
  194. package/dist/views/instances/new/index.js +189 -2
  195. package/dist/views/instances/new/index.js.map +1 -0
  196. package/dist/views/login/index.cjs +1 -1
  197. package/dist/views/login/index.js +1 -1
  198. package/dist/views/search/index.cjs +2 -1
  199. package/dist/views/search/index.cjs.map +1 -0
  200. package/dist/views/search/index.js +19 -2
  201. package/dist/views/search/index.js.map +1 -0
  202. package/dist/views/sent/index.cjs +2 -1
  203. package/dist/views/sent/index.cjs.map +1 -0
  204. package/dist/views/sent/index.js +19 -2
  205. package/dist/views/sent/index.js.map +1 -0
  206. package/dist/views/settings/index.cjs +1 -0
  207. package/dist/views/settings/index.d.ts +1 -0
  208. package/dist/views/settings/index.js +2 -0
  209. package/dist/views/settings/notifications/index.cjs +1 -1
  210. package/dist/views/settings/notifications/index.js +1 -1
  211. package/dist/views/templates/categories/index.cjs +1 -1
  212. package/dist/views/templates/categories/index.js +1 -1
  213. package/dist/views/templates/designer/index.cjs +51 -1
  214. package/dist/views/templates/designer/index.cjs.map +1 -0
  215. package/dist/views/templates/designer/index.js +2272 -2
  216. package/dist/views/templates/designer/index.js.map +1 -0
  217. package/dist/views/templates/index.cjs +1 -1
  218. package/dist/views/templates/index.d.ts +2 -0
  219. package/dist/views/templates/index.js +4 -2
  220. package/dist/views/templates/versions/index.cjs +2 -1
  221. package/dist/views/templates/versions/index.cjs.map +1 -0
  222. package/dist/views/templates/versions/index.js +110 -2
  223. package/dist/views/templates/versions/index.js.map +1 -0
  224. package/dist/views/workflow/index.cjs +1 -0
  225. package/dist/views/workflow/index.d.ts +4 -0
  226. package/dist/views/workflow/index.js +5 -0
  227. package/package.json +28 -3
  228. package/dist/chunks/AdminDelegationsView-CqNmlVWx.cjs +0 -2
  229. package/dist/chunks/AdminDelegationsView-CqNmlVWx.cjs.map +0 -1
  230. package/dist/chunks/AdminDelegationsView-DydMZ9ED.js.map +0 -1
  231. package/dist/chunks/AdminOrgsView-DZaVAbaQ.js.map +0 -1
  232. package/dist/chunks/AdminOrgsView-bSsIyMvk.cjs +0 -2
  233. package/dist/chunks/AdminOrgsView-bSsIyMvk.cjs.map +0 -1
  234. package/dist/chunks/AdminUsersView-C0oO05Br.js.map +0 -1
  235. package/dist/chunks/AdminUsersView-DlArLlIr.cjs +0 -2
  236. package/dist/chunks/AdminUsersView-DlArLlIr.cjs.map +0 -1
  237. package/dist/chunks/CcView-BsVsya5F.cjs +0 -2
  238. package/dist/chunks/CcView-BsVsya5F.cjs.map +0 -1
  239. package/dist/chunks/CcView-Bv0GzA5C.js +0 -19
  240. package/dist/chunks/CcView-Bv0GzA5C.js.map +0 -1
  241. package/dist/chunks/DashboardView-Dk1ZQmmk.js +0 -11
  242. package/dist/chunks/DashboardView-Dk1ZQmmk.js.map +0 -1
  243. package/dist/chunks/DashboardView-_0zh-rxT.cjs +0 -2
  244. package/dist/chunks/DashboardView-_0zh-rxT.cjs.map +0 -1
  245. package/dist/chunks/DelegationsView-DQUqOUV5.js.map +0 -1
  246. package/dist/chunks/DelegationsView-pKeFV2LN.cjs +0 -2
  247. package/dist/chunks/DelegationsView-pKeFV2LN.cjs.map +0 -1
  248. package/dist/chunks/FormBuilderView-BKtyW55e.cjs +0 -3
  249. package/dist/chunks/FormBuilderView-BKtyW55e.cjs.map +0 -1
  250. package/dist/chunks/FormBuilderView-CvChAvgD.js.map +0 -1
  251. package/dist/chunks/FormsView-DYEuik8W.js +0 -185
  252. package/dist/chunks/FormsView-DYEuik8W.js.map +0 -1
  253. package/dist/chunks/FormsView-RjJEkIfZ.cjs +0 -2
  254. package/dist/chunks/FormsView-RjJEkIfZ.cjs.map +0 -1
  255. package/dist/chunks/InboxView-DDWwmWhA.cjs +0 -2
  256. package/dist/chunks/InboxView-DDWwmWhA.cjs.map +0 -1
  257. package/dist/chunks/InboxView-YSoyrYLk.js +0 -291
  258. package/dist/chunks/InboxView-YSoyrYLk.js.map +0 -1
  259. package/dist/chunks/InstanceDetailView-C-A-LOCG.js.map +0 -1
  260. package/dist/chunks/InstanceDetailView-l_kNDCz2.cjs +0 -2
  261. package/dist/chunks/InstanceDetailView-l_kNDCz2.cjs.map +0 -1
  262. package/dist/chunks/InstanceNewView-B5hz-FWd.js +0 -190
  263. package/dist/chunks/InstanceNewView-B5hz-FWd.js.map +0 -1
  264. package/dist/chunks/InstanceNewView-CdCsxQIu.cjs +0 -2
  265. package/dist/chunks/InstanceNewView-CdCsxQIu.cjs.map +0 -1
  266. package/dist/chunks/LoginView-BED07v-7.cjs +0 -2
  267. package/dist/chunks/LoginView-BED07v-7.cjs.map +0 -1
  268. package/dist/chunks/LoginView-a1iu3cfc.js.map +0 -1
  269. package/dist/chunks/RootClientView-rXJt4TDd.cjs +0 -2
  270. package/dist/chunks/RootClientView-rXJt4TDd.cjs.map +0 -1
  271. package/dist/chunks/RootClientView-wAkXUEZw.js +0 -34
  272. package/dist/chunks/RootClientView-wAkXUEZw.js.map +0 -1
  273. package/dist/chunks/SearchView-CgXPssgE.cjs +0 -2
  274. package/dist/chunks/SearchView-CgXPssgE.cjs.map +0 -1
  275. package/dist/chunks/SearchView-WXMbZwRw.js +0 -19
  276. package/dist/chunks/SearchView-WXMbZwRw.js.map +0 -1
  277. package/dist/chunks/SentView-BTDoFBrG.cjs +0 -2
  278. package/dist/chunks/SentView-BTDoFBrG.cjs.map +0 -1
  279. package/dist/chunks/SentView-CdOL92Rq.js +0 -19
  280. package/dist/chunks/SentView-CdOL92Rq.js.map +0 -1
  281. package/dist/chunks/SettingsNotificationsView-B6F6fa7U.js.map +0 -1
  282. package/dist/chunks/SettingsNotificationsView-Bnz0CmoJ.cjs +0 -2
  283. package/dist/chunks/SettingsNotificationsView-Bnz0CmoJ.cjs.map +0 -1
  284. package/dist/chunks/TemplateCategoriesView-CgZciaSd.js.map +0 -1
  285. package/dist/chunks/TemplateCategoriesView-U0stGUBc.cjs +0 -2
  286. package/dist/chunks/TemplateCategoriesView-U0stGUBc.cjs.map +0 -1
  287. package/dist/chunks/TemplateDesignerView-A38DyYD4.cjs +0 -51
  288. package/dist/chunks/TemplateDesignerView-A38DyYD4.cjs.map +0 -1
  289. package/dist/chunks/TemplateDesignerView-Dffx-VZ-.js +0 -2272
  290. package/dist/chunks/TemplateDesignerView-Dffx-VZ-.js.map +0 -1
  291. package/dist/chunks/TemplateVersionsView-6sVQbBem.js +0 -110
  292. package/dist/chunks/TemplateVersionsView-6sVQbBem.js.map +0 -1
  293. package/dist/chunks/TemplateVersionsView-CMqw3ieU.cjs +0 -2
  294. package/dist/chunks/TemplateVersionsView-CMqw3ieU.cjs.map +0 -1
  295. package/dist/chunks/TemplatesView-BLj9f-XI.js.map +0 -1
  296. package/dist/chunks/TemplatesView-DIOQTUUl.cjs +0 -2
  297. package/dist/chunks/TemplatesView-DIOQTUUl.cjs.map +0 -1
  298. package/dist/chunks/app-navigation-DAC5gFbG.cjs +0 -2
  299. package/dist/chunks/approval-instance-list-page-DIAmwhvl.cjs +0 -2
  300. package/dist/chunks/auth-provider-D2P-qWmY.cjs +0 -2
  301. package/dist/chunks/auth-provider-D2P-qWmY.cjs.map +0 -1
  302. package/dist/chunks/auth-provider-TTO9eNZV.js +0 -83
  303. package/dist/chunks/auth-provider-TTO9eNZV.js.map +0 -1
  304. package/dist/chunks/dashboard-page-udYhnyMW.cjs +0 -2
  305. package/dist/chunks/router-adapter-BdHZXLS3.js +0 -23
  306. package/dist/chunks/router-adapter-BdHZXLS3.js.map +0 -1
  307. package/dist/chunks/router-adapter-BybHrCNP.cjs +0 -2
  308. package/dist/chunks/router-adapter-BybHrCNP.cjs.map +0 -1
  309. package/dist/chunks/templates.module-B5bg_goX.js +0 -8
  310. package/dist/chunks/templates.module-B5bg_goX.js.map +0 -1
  311. package/dist/chunks/templates.module-ClRnQQX4.cjs +0 -2
  312. package/dist/chunks/templates.module-ClRnQQX4.cjs.map +0 -1
  313. package/dist/pages/admin/delegations/AdminDelegationsClientView.cjs +0 -2
  314. package/dist/pages/admin/delegations/AdminDelegationsClientView.cjs.map +0 -1
  315. package/dist/pages/admin/delegations/AdminDelegationsClientView.d.ts +0 -3
  316. package/dist/pages/admin/delegations/AdminDelegationsClientView.js +0 -28
  317. package/dist/pages/admin/delegations/AdminDelegationsClientView.js.map +0 -1
  318. package/dist/pages/admin/orgs/AdminOrgsClientView.cjs +0 -2
  319. package/dist/pages/admin/orgs/AdminOrgsClientView.cjs.map +0 -1
  320. package/dist/pages/admin/orgs/AdminOrgsClientView.d.ts +0 -3
  321. package/dist/pages/admin/orgs/AdminOrgsClientView.js +0 -28
  322. package/dist/pages/admin/orgs/AdminOrgsClientView.js.map +0 -1
  323. package/dist/pages/admin/users/AdminUsersClientView.cjs +0 -2
  324. package/dist/pages/admin/users/AdminUsersClientView.cjs.map +0 -1
  325. package/dist/pages/admin/users/AdminUsersClientView.d.ts +0 -3
  326. package/dist/pages/admin/users/AdminUsersClientView.js +0 -28
  327. package/dist/pages/admin/users/AdminUsersClientView.js.map +0 -1
  328. package/dist/pages/cc/CcClientView.cjs +0 -2
  329. package/dist/pages/cc/CcClientView.cjs.map +0 -1
  330. package/dist/pages/cc/CcClientView.d.ts +0 -7
  331. package/dist/pages/cc/CcClientView.js +0 -28
  332. package/dist/pages/cc/CcClientView.js.map +0 -1
  333. package/dist/pages/dashboard/DashboardClientView.cjs +0 -2
  334. package/dist/pages/dashboard/DashboardClientView.cjs.map +0 -1
  335. package/dist/pages/dashboard/DashboardClientView.d.ts +0 -9
  336. package/dist/pages/dashboard/DashboardClientView.js +0 -28
  337. package/dist/pages/dashboard/DashboardClientView.js.map +0 -1
  338. package/dist/pages/delegations/DelegationsClientView.cjs +0 -2
  339. package/dist/pages/delegations/DelegationsClientView.cjs.map +0 -1
  340. package/dist/pages/delegations/DelegationsClientView.d.ts +0 -3
  341. package/dist/pages/delegations/DelegationsClientView.js +0 -28
  342. package/dist/pages/delegations/DelegationsClientView.js.map +0 -1
  343. package/dist/pages/forms/FormsClientView.cjs +0 -2
  344. package/dist/pages/forms/FormsClientView.cjs.map +0 -1
  345. package/dist/pages/forms/FormsClientView.d.ts +0 -10
  346. package/dist/pages/forms/FormsClientView.js +0 -28
  347. package/dist/pages/forms/FormsClientView.js.map +0 -1
  348. package/dist/pages/forms/builder/FormBuilderClientView.cjs +0 -2
  349. package/dist/pages/forms/builder/FormBuilderClientView.cjs.map +0 -1
  350. package/dist/pages/forms/builder/FormBuilderClientView.d.ts +0 -11
  351. package/dist/pages/forms/builder/FormBuilderClientView.js +0 -28
  352. package/dist/pages/forms/builder/FormBuilderClientView.js.map +0 -1
  353. package/dist/pages/inbox/InboxClientView.cjs +0 -2
  354. package/dist/pages/inbox/InboxClientView.cjs.map +0 -1
  355. package/dist/pages/inbox/InboxClientView.d.ts +0 -9
  356. package/dist/pages/inbox/InboxClientView.js +0 -28
  357. package/dist/pages/inbox/InboxClientView.js.map +0 -1
  358. package/dist/pages/instances/detail/InstanceDetailClientView.cjs +0 -2
  359. package/dist/pages/instances/detail/InstanceDetailClientView.cjs.map +0 -1
  360. package/dist/pages/instances/detail/InstanceDetailClientView.d.ts +0 -9
  361. package/dist/pages/instances/detail/InstanceDetailClientView.js +0 -28
  362. package/dist/pages/instances/detail/InstanceDetailClientView.js.map +0 -1
  363. package/dist/pages/instances/new/InstanceNewClientView.cjs +0 -2
  364. package/dist/pages/instances/new/InstanceNewClientView.cjs.map +0 -1
  365. package/dist/pages/instances/new/InstanceNewClientView.d.ts +0 -8
  366. package/dist/pages/instances/new/InstanceNewClientView.js +0 -28
  367. package/dist/pages/instances/new/InstanceNewClientView.js.map +0 -1
  368. package/dist/pages/login/LoginClientView.cjs +0 -2
  369. package/dist/pages/login/LoginClientView.cjs.map +0 -1
  370. package/dist/pages/login/LoginClientView.d.ts +0 -11
  371. package/dist/pages/login/LoginClientView.js +0 -29
  372. package/dist/pages/login/LoginClientView.js.map +0 -1
  373. package/dist/pages/root/RootClientView.cjs +0 -1
  374. package/dist/pages/root/RootClientView.d.ts +0 -8
  375. package/dist/pages/root/RootClientView.js +0 -2
  376. package/dist/pages/search/SearchClientView.cjs +0 -2
  377. package/dist/pages/search/SearchClientView.cjs.map +0 -1
  378. package/dist/pages/search/SearchClientView.d.ts +0 -7
  379. package/dist/pages/search/SearchClientView.js +0 -28
  380. package/dist/pages/search/SearchClientView.js.map +0 -1
  381. package/dist/pages/sent/SentClientView.cjs +0 -2
  382. package/dist/pages/sent/SentClientView.cjs.map +0 -1
  383. package/dist/pages/sent/SentClientView.d.ts +0 -7
  384. package/dist/pages/sent/SentClientView.js +0 -28
  385. package/dist/pages/sent/SentClientView.js.map +0 -1
  386. package/dist/pages/settings/notifications/SettingsNotificationsClientView.cjs +0 -2
  387. package/dist/pages/settings/notifications/SettingsNotificationsClientView.cjs.map +0 -1
  388. package/dist/pages/settings/notifications/SettingsNotificationsClientView.d.ts +0 -3
  389. package/dist/pages/settings/notifications/SettingsNotificationsClientView.js +0 -28
  390. package/dist/pages/settings/notifications/SettingsNotificationsClientView.js.map +0 -1
  391. package/dist/pages/templates/TemplatesClientView.cjs +0 -2
  392. package/dist/pages/templates/TemplatesClientView.cjs.map +0 -1
  393. package/dist/pages/templates/TemplatesClientView.d.ts +0 -3
  394. package/dist/pages/templates/TemplatesClientView.js +0 -28
  395. package/dist/pages/templates/TemplatesClientView.js.map +0 -1
  396. package/dist/pages/templates/categories/TemplateCategoriesClientView.cjs +0 -2
  397. package/dist/pages/templates/categories/TemplateCategoriesClientView.cjs.map +0 -1
  398. package/dist/pages/templates/categories/TemplateCategoriesClientView.d.ts +0 -3
  399. package/dist/pages/templates/categories/TemplateCategoriesClientView.js +0 -28
  400. package/dist/pages/templates/categories/TemplateCategoriesClientView.js.map +0 -1
  401. package/dist/pages/templates/designer/TemplateDesignerClientView.cjs +0 -2
  402. package/dist/pages/templates/designer/TemplateDesignerClientView.cjs.map +0 -1
  403. package/dist/pages/templates/designer/TemplateDesignerClientView.d.ts +0 -3
  404. package/dist/pages/templates/designer/TemplateDesignerClientView.js +0 -28
  405. package/dist/pages/templates/designer/TemplateDesignerClientView.js.map +0 -1
  406. package/dist/pages/templates/versions/TemplateVersionsClientView.cjs +0 -2
  407. package/dist/pages/templates/versions/TemplateVersionsClientView.cjs.map +0 -1
  408. package/dist/pages/templates/versions/TemplateVersionsClientView.d.ts +0 -3
  409. package/dist/pages/templates/versions/TemplateVersionsClientView.js +0 -28
  410. package/dist/pages/templates/versions/TemplateVersionsClientView.js.map +0 -1
  411. /package/dist/{templates.css → categories.css} +0 -0
  412. /package/dist/{AdminDelegationsView.css → delegations.css} +0 -0
  413. /package/dist/{DelegationsView.css → delegations2.css} +0 -0
  414. /package/dist/{InstanceDetailView.css → detail.css} +0 -0
  415. /package/dist/{LoginView.css → login.css} +0 -0
  416. /package/dist/{SettingsNotificationsView.css → notifications.css} +0 -0
  417. /package/dist/{AdminOrgsView.css → orgs.css} +0 -0
  418. /package/dist/{AdminUsersView.css → users.css} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplatesView-BLj9f-XI.js","names":[],"sources":["../../src/views/templates/template-name-modal.tsx","../../src/views/templates/TemplatesView.tsx"],"sourcesContent":["'use client';\n\nimport { ChangeEvent, ReactElement, useEffect, useState } from 'react';\nimport { Input, Modal, Select, Typography } from '@mezzanine-ui/react';\nimport { BPMFormField } from '../../components/bpm-form-field';\n\nexport interface TemplateCategoryOption {\n readonly categoryId: string | null;\n readonly id: string;\n readonly name: string;\n}\n\ninterface TemplateNameModalProps {\n readonly confirmText: string;\n readonly categoryOptions: readonly TemplateCategoryOption[];\n readonly initialName: string;\n readonly loading: boolean;\n readonly onClose: () => void;\n readonly onSubmit: (input: {\n readonly categoryId: string | null;\n readonly name: string;\n }) => Promise<void>;\n readonly open: boolean;\n readonly title: string;\n}\n\nexport function TemplateNameModal({\n confirmText,\n categoryOptions,\n initialName,\n loading,\n onClose,\n onSubmit,\n open,\n title,\n}: TemplateNameModalProps): ReactElement {\n const [name, setName] = useState(initialName);\n const [category, setCategory] = useState<TemplateCategoryOption>(\n categoryOptions[0] ?? UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n );\n const [error, setError] = useState<string | null>(null);\n const trimmedName = name.trim();\n\n useEffect((): void => {\n if (!open) {\n return;\n }\n\n setName(initialName);\n setCategory(categoryOptions[0] ?? UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION);\n setError(null);\n }, [categoryOptions, initialName, open]);\n\n async function handleConfirm(): Promise<void> {\n if (!trimmedName) {\n setError('請輸入模板名稱');\n return;\n }\n\n try {\n await onSubmit({ categoryId: category.categoryId, name: trimmedName });\n } catch (submitError: unknown) {\n setError(readErrorMessage(submitError));\n }\n }\n\n return (\n <Modal\n cancelText=\"取消\"\n confirmButtonProps={{ disabled: !trimmedName }}\n confirmText={confirmText}\n loading={loading}\n modalType=\"standard\"\n onCancel={onClose}\n onClose={onClose}\n onConfirm={(): void => void handleConfirm()}\n open={open}\n showModalFooter\n showModalHeader\n size=\"narrow\"\n title={title}\n >\n <BPMFormField label=\"模板名稱\" name=\"templateName\" required>\n <Input\n autoFocus\n fullWidth\n onChange={(event: ChangeEvent<HTMLInputElement>): void => {\n setName(event.target.value);\n setError(null);\n }}\n placeholder=\"例如:費用申請流程\"\n value={name}\n variant=\"base\"\n />\n </BPMFormField>\n <BPMFormField label=\"分類\" name=\"templateCategory\">\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setCategory(readCategoryOption(option, categoryOptions));\n setError(null);\n }}\n options={[...categoryOptions]}\n placeholder=\"選擇分類\"\n value={category}\n />\n </BPMFormField>\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n </Modal>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n\nexport const UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION: TemplateCategoryOption = {\n categoryId: null,\n id: 'UNCATEGORIZED',\n name: '未分類',\n};\n\nfunction readCategoryOption(\n value: unknown,\n options: readonly TemplateCategoryOption[],\n): TemplateCategoryOption {\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION;\n }\n\n const id = typeof value.id === 'string' ? value.id : null;\n\n return (\n options.find((option) => option.id === id) ??\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION\n );\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null;\n}\n","'use client';\n\nimport type { ChangeEvent, Key, ReactElement } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n Layout,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Tab,\n TabItem,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { PlusIcon } from '@mezzanine-ui/icons';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport styles from './templates.module.scss';\nimport { formatDateTime } from '../../lib/format-date-time';\nimport { AppNavigation } from '../../components/app-navigation';\nimport { useRouterAdapter } from '../../lib/router-adapter';\nimport {\n TemplateCategoryOption,\n TemplateNameModal,\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n} from './template-name-modal';\nimport {\n ApprovalTemplateListStatus,\n ApprovalTemplateRecord,\n ApprovalTemplateCategoryRecord,\n createApprovalTemplate,\n listApprovalTemplateCategoriesPage,\n listApprovalTemplatesPage,\n} from '@rytass/bpm-core-client/template';\nimport { listLaunchableTemplates } from '@rytass/bpm-core-client/workflow';\n\nconst TEMPLATE_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst TEMPLATE_STATUS_TABS: readonly {\n readonly key: TemplateStatusTabKey;\n readonly label: string;\n}[] = [\n { key: 'ALL', label: '全部' },\n { key: 'PUBLISHED', label: '已發布' },\n { key: 'DRAFT', label: '草稿' },\n];\n\nconst TEMPLATE_CATEGORY_PAGE_SIZE = 100;\n\ntype TemplateStatusTabKey = 'ALL' | ApprovalTemplateListStatus;\n\ntype TemplateRow = Readonly<\n Record<string, unknown> &\n ApprovalTemplateRecord & {\n categoryLabel: string;\n key: string;\n status: ApprovalTemplateListStatus;\n }\n>;\n\nexport interface TemplatesViewProps {\n readonly activeHref?: string;\n}\n\nexport function TemplatesView({\n activeHref = '/templates',\n}: TemplatesViewProps = {}): ReactElement {\n const router = useRouterAdapter();\n const [templates, setTemplates] = useState<readonly ApprovalTemplateRecord[]>(\n [],\n );\n const [categoryFilter, setCategoryFilter] = useState<TemplateCategoryOption>(\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION,\n );\n const [categoryOptions, setCategoryOptions] = useState<\n readonly TemplateCategoryOption[]\n >([]);\n const [launchableTemplateIds, setLaunchableTemplateIds] = useState<\n ReadonlySet<string>\n >(new Set());\n const [createModalOpen, setCreateModalOpen] = useState(false);\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [templatePage, setTemplatePage] = useState(1);\n const [templatePageSize, setTemplatePageSize] = useState(10);\n const [templateSearchText, setTemplateSearchText] = useState('');\n const [templateStatus, setTemplateStatus] =\n useState<TemplateStatusTabKey>('ALL');\n const [templateTotalCount, setTemplateTotalCount] = useState(0);\n\n const refreshTemplates = useCallback(async (): Promise<void> => {\n setLoading(true);\n setError(null);\n\n try {\n const [\n templatePageResult,\n nextLaunchableTemplates,\n activeCategoryPageResult,\n ] = await Promise.all([\n listApprovalTemplatesPage({\n categoryId: categoryFilter.categoryId,\n page: templatePage,\n pageSize: templatePageSize,\n searchText: templateSearchText,\n status: templateStatus === 'ALL' ? null : templateStatus,\n }),\n listLaunchableTemplates(),\n listApprovalTemplateCategoriesPage({\n page: 1,\n pageSize: TEMPLATE_CATEGORY_PAGE_SIZE,\n searchText: '',\n status: 'ACTIVE',\n }),\n ]);\n\n setCategoryOptions([\n ...activeCategoryPageResult.categories.map(readCategoryOption),\n ]);\n setTemplates(templatePageResult.templates);\n setTemplateTotalCount(templatePageResult.totalCount);\n setLaunchableTemplateIds(\n new Set(nextLaunchableTemplates.map((template) => template.id)),\n );\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }, [\n categoryFilter,\n templatePage,\n templatePageSize,\n templateSearchText,\n templateStatus,\n ]);\n\n useEffect((): void => {\n void refreshTemplates();\n }, [refreshTemplates]);\n\n const rows = useMemo(\n (): TemplateRow[] =>\n templates.map((template) => ({\n ...template,\n categoryLabel: readTemplateCategoryLabel(template),\n key: template.id,\n status: template.currentVersionId ? 'PUBLISHED' : 'DRAFT',\n updatedAt: formatDateTime(template.updatedAt),\n })),\n [templates],\n );\n const columns = useMemo(\n (): TableColumn<TemplateRow>[] => [\n { dataIndex: 'name', key: 'name', title: '模板名稱', width: 220 },\n {\n key: 'status',\n render: (record: TemplateRow): ReactElement => (\n <TemplateStatusBadge status={record.status} />\n ),\n title: '狀態',\n width: 120,\n },\n {\n key: 'category',\n render: (record: TemplateRow): ReactElement => (\n <TemplateCategoryLabel record={record} />\n ),\n title: '分類',\n width: 160,\n },\n {\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n title: '更新時間',\n width: 220,\n },\n ],\n [],\n );\n const tableActions = useMemo(\n (): TableActions<TemplateRow> => ({\n render: (record): ReturnType<TableActions<TemplateRow>['render']> => [\n {\n disabled: (template): boolean =>\n !launchableTemplateIds.has(template.id),\n name: '發起',\n onClick: (): void =>\n router.push(`/instances/new?templateId=${record.id}`),\n variant: 'base-primary',\n },\n {\n name: '設計',\n onClick: (): void => router.push(`/templates/${record.id}/designer`),\n },\n {\n name: '版本',\n onClick: (): void => router.push(`/templates/${record.id}/versions`),\n },\n ],\n variant: 'base-secondary',\n width: 192,\n }),\n [launchableTemplateIds, router],\n );\n\n async function handleCreateTemplate({\n categoryId,\n name,\n }: {\n readonly categoryId: string | null;\n readonly name: string;\n }): Promise<void> {\n setCreating(true);\n setError(null);\n\n try {\n const templateId = await createApprovalTemplate({ categoryId, name });\n setCreateModalOpen(false);\n router.push(`/templates/${templateId}/designer`);\n } finally {\n setCreating(false);\n }\n }\n\n return (\n <>\n <Layout>\n <AppNavigation activeHref={activeHref} />\n\n <Layout.Main>\n <PageHeader>\n <ContentHeader\n description=\"建立流程模板、維護草稿與發布版本。\"\n title=\"簽核模板\"\n >\n <Button\n disabled={creating}\n icon={PlusIcon}\n iconType=\"leading\"\n onClick={(): void => setCreateModalOpen(true)}\n variant=\"base-primary\"\n >\n 建立模板\n </Button>\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.templateFilterArea} size=\"sub\">\n <FilterLine>\n <Filter span={3}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"templateSearchText\"\n >\n <Input\n fullWidth\n onChange={(\n event: ChangeEvent<HTMLInputElement>,\n ): void => {\n setTemplateSearchText(event.target.value);\n setTemplatePage(1);\n }}\n placeholder=\"關鍵字:搜尋模板名稱、分類或描述\"\n size=\"sub\"\n value={templateSearchText}\n variant=\"base\"\n />\n </FormField>\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"templateCategoryFilter\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setCategoryFilter(\n readCategoryFilterOption(option, categoryOptions),\n );\n setTemplatePage(1);\n }}\n options={[\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION,\n ...categoryOptions,\n ]}\n placeholder=\"分類\"\n renderValue={(value): string =>\n `分類:${readTemplateCategoryFilterLabel(value)}`\n }\n size=\"sub\"\n value={categoryFilter}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n tab={\n <Tab\n activeKey={templateStatus}\n onChange={(activeKey): void => {\n setTemplateStatus(readTemplateStatusTabKey(activeKey));\n setTemplatePage(1);\n }}\n >\n {TEMPLATE_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: templatePage,\n onChange: (page): void => {\n setTemplatePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setTemplatePage(1);\n setTemplatePageSize(pageSize);\n },\n pageSize: templatePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: TEMPLATE_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: templateTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n </Layout.Main>\n </Layout>\n\n <TemplateNameModal\n categoryOptions={[\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n ...categoryOptions,\n ]}\n confirmText=\"建立\"\n initialName=\"\"\n loading={creating}\n onClose={(): void => setCreateModalOpen(false)}\n onSubmit={handleCreateTemplate}\n open={createModalOpen}\n title=\"建立簽核模板\"\n />\n </>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n\nfunction readTemplateStatusTabKey(activeKey: Key): TemplateStatusTabKey {\n if (activeKey === 'PUBLISHED' || activeKey === 'DRAFT') {\n return activeKey;\n }\n\n return 'ALL';\n}\n\nfunction TemplateStatusBadge({\n status,\n}: {\n readonly status: ApprovalTemplateListStatus;\n}): ReactElement {\n if (status === 'PUBLISHED') {\n return <Badge size=\"sub\" text=\"已發布\" variant=\"dot-success\" />;\n }\n\n return <Badge size=\"sub\" text=\"草稿\" variant=\"dot-inactive\" />;\n}\n\nfunction TemplateCategoryLabel({\n record,\n}: {\n readonly record: TemplateRow;\n}): ReactElement {\n if (record.categoryDetail?.isActive === false) {\n return (\n <Badge\n size=\"sub\"\n text={`${record.categoryLabel}(停用)`}\n variant=\"dot-inactive\"\n />\n );\n }\n\n return (\n <Typography component=\"span\" variant=\"body\">\n {record.categoryLabel}\n </Typography>\n );\n}\n\nconst UNCATEGORIZED_TEMPLATE_FILTER_OPTION: TemplateCategoryOption = {\n categoryId: null,\n id: 'ALL_CATEGORIES',\n name: '全部分類',\n};\n\nfunction readCategoryOption(\n category: ApprovalTemplateCategoryRecord,\n): TemplateCategoryOption {\n return {\n categoryId: category.id,\n id: category.id,\n name: category.name,\n };\n}\n\nfunction readCategoryFilterOption(\n value: unknown,\n options: readonly TemplateCategoryOption[],\n): TemplateCategoryOption {\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION;\n }\n\n const id = typeof value.id === 'string' ? value.id : null;\n\n if (id === UNCATEGORIZED_TEMPLATE_FILTER_OPTION.id) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION;\n }\n\n return (\n options.find((option) => option.id === id) ??\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION\n );\n}\n\nfunction readTemplateCategoryFilterLabel(value: unknown): string {\n if (Array.isArray(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n }\n\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n }\n\n return typeof value.name === 'string'\n ? value.name\n : UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n}\n\nfunction readTemplateCategoryLabel(template: ApprovalTemplateRecord): string {\n return template.categoryDetail?.name ?? template.category ?? '未分類';\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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"}
@@ -1,2 +0,0 @@
1
- "use client";const e=require("./app-navigation-DAC5gFbG.cjs"),t=require("./router-adapter-BybHrCNP.cjs"),n=require("./format-date-time-BQyH5U8z.cjs"),r=require("./bpm-form-field-Bc6k4ZEO.cjs"),i=require("./templates.module-ClRnQQX4.cjs");let a=require("react"),o=require("@mezzanine-ui/react"),s=require("react/jsx-runtime"),c=require("@rytass/bpm-core-client/workflow"),l=require("@mezzanine-ui/icons"),u=require("@mezzanine-ui/react/ContentHeader");u=e.o(u,1);let d=require("@mezzanine-ui/core/form"),f=require("@rytass/bpm-core-client/template");function p({confirmText:e,categoryOptions:t,initialName:n,loading:i,onClose:c,onSubmit:l,open:u,title:d}){let[f,p]=(0,a.useState)(n),[_,v]=(0,a.useState)(t[0]??h),[y,b]=(0,a.useState)(null),x=f.trim();(0,a.useEffect)(()=>{u&&(p(n),v(t[0]??h),b(null))},[t,n,u]);async function S(){if(!x){b(`請輸入模板名稱`);return}try{await l({categoryId:_.categoryId,name:x})}catch(e){b(m(e))}}return(0,s.jsxs)(o.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!x},confirmText:e,loading:i,modalType:`standard`,onCancel:c,onClose:c,onConfirm:()=>void S(),open:u,showModalFooter:!0,showModalHeader:!0,size:`narrow`,title:d,children:[(0,s.jsx)(r.t,{label:`模板名稱`,name:`templateName`,required:!0,children:(0,s.jsx)(o.Input,{autoFocus:!0,fullWidth:!0,onChange:e=>{p(e.target.value),b(null)},placeholder:`例如:費用申請流程`,value:f,variant:`base`})}),(0,s.jsx)(r.t,{label:`分類`,name:`templateCategory`,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>{v(g(e,t)),b(null)},options:[...t],placeholder:`選擇分類`,value:_})}),y?(0,s.jsx)(o.Typography,{color:`text-error`,variant:`body`,children:y}):null]})}function m(e){return e instanceof Error?e.message:`發生未知錯誤`}var h={categoryId:null,id:`UNCATEGORIZED`,name:`未分類`};function g(e,t){if(!_(e))return h;let n=typeof e.id==`string`?e.id:null;return t.find(e=>e.id===n)??h}function _(e){return typeof e==`object`&&!!e}var v=[10,20,50],y=[{key:`ALL`,label:`全部`},{key:`PUBLISHED`,label:`已發布`},{key:`DRAFT`,label:`草稿`}],b=100;function x({activeHref:r=`/templates`}={}){let m=t.r(),[g,_]=(0,a.useState)([]),[x,A]=(0,a.useState)(E),[j,M]=(0,a.useState)([]),[N,P]=(0,a.useState)(new Set),[F,I]=(0,a.useState)(!1),[L,R]=(0,a.useState)(!1),[z,B]=(0,a.useState)(null),[V,H]=(0,a.useState)(!0),[U,W]=(0,a.useState)(1),[G,K]=(0,a.useState)(10),[q,J]=(0,a.useState)(``),[Y,X]=(0,a.useState)(`ALL`),[Z,Q]=(0,a.useState)(0),$=(0,a.useCallback)(async()=>{H(!0),B(null);try{let[e,t,n]=await Promise.all([(0,f.listApprovalTemplatesPage)({categoryId:x.categoryId,page:U,pageSize:G,searchText:q,status:Y===`ALL`?null:Y}),(0,c.listLaunchableTemplates)(),(0,f.listApprovalTemplateCategoriesPage)({page:1,pageSize:b,searchText:``,status:`ACTIVE`})]);M([...n.categories.map(D)]),_(e.templates),Q(e.totalCount),P(new Set(t.map(e=>e.id)))}catch(e){B(S(e))}finally{H(!1)}},[x,U,G,q,Y]);(0,a.useEffect)(()=>{$()},[$]);let te=(0,a.useMemo)(()=>g.map(e=>({...e,categoryLabel:k(e),key:e.id,status:e.currentVersionId?`PUBLISHED`:`DRAFT`,updatedAt:n.t(e.updatedAt)})),[g]),ne=(0,a.useMemo)(()=>[{dataIndex:`name`,key:`name`,title:`模板名稱`,width:220},{key:`status`,render:e=>(0,s.jsx)(w,{status:e.status}),title:`狀態`,width:120},{key:`category`,render:e=>(0,s.jsx)(T,{record:e}),title:`分類`,width:160},{dataIndex:`updatedAt`,key:`updatedAt`,title:`更新時間`,width:220}],[]),re=(0,a.useMemo)(()=>({render:e=>[{disabled:e=>!N.has(e.id),name:`發起`,onClick:()=>m.push(`/instances/new?templateId=${e.id}`),variant:`base-primary`},{name:`設計`,onClick:()=>m.push(`/templates/${e.id}/designer`)},{name:`版本`,onClick:()=>m.push(`/templates/${e.id}/versions`)}],variant:`base-secondary`,width:192}),[N,m]);async function ie({categoryId:e,name:t}){R(!0),B(null);try{let n=await(0,f.createApprovalTemplate)({categoryId:e,name:t});I(!1),m.push(`/templates/${n}/designer`)}finally{R(!1)}}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.Layout,{children:[(0,s.jsx)(e.t,{activeHref:r}),(0,s.jsxs)(o.Layout.Main,{children:[(0,s.jsx)(o.PageHeader,{children:(0,s.jsx)(u.default,{description:`建立流程模板、維護草稿與發布版本。`,title:`簽核模板`,children:(0,s.jsx)(o.Button,{disabled:L,icon:l.PlusIcon,iconType:`leading`,onClick:()=>I(!0),variant:`base-primary`,children:`建立模板`})})}),(0,s.jsx)(o.SectionGroup,{children:(0,s.jsxs)(o.Section,{filterArea:(0,s.jsx)(o.FilterArea,{className:i.t.templateFilterArea,size:`sub`,children:(0,s.jsxs)(o.FilterLine,{children:[(0,s.jsx)(o.Filter,{span:3,children:(0,s.jsx)(o.FormField,{fullWidth:!0,layout:d.FormFieldLayout.VERTICAL,name:`templateSearchText`,children:(0,s.jsx)(o.Input,{fullWidth:!0,onChange:e=>{J(e.target.value),W(1)},placeholder:`關鍵字:搜尋模板名稱、分類或描述`,size:`sub`,value:q,variant:`base`})})}),(0,s.jsx)(o.Filter,{span:2,children:(0,s.jsx)(o.FormField,{fullWidth:!0,layout:d.FormFieldLayout.VERTICAL,name:`templateCategoryFilter`,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>{A(O(e,j)),W(1)},options:[E,...j],placeholder:`分類`,renderValue:e=>`分類:${ee(e)}`,size:`sub`,value:x})})})]})}),tab:(0,s.jsx)(o.Tab,{activeKey:Y,onChange:e=>{X(C(e)),W(1)},children:y.map(e=>(0,s.jsx)(o.TabItem,{children:e.label},e.key))}),children:[z?(0,s.jsx)(o.Typography,{color:`text-error`,variant:`body`,children:z}):null,(0,s.jsx)(o.Table,{actions:re,columns:ne,dataSource:te,fullWidth:!0,loading:V,pagination:{current:U,onChange:e=>{W(e)},onChangePageSize:e=>{W(1),K(e)},pageSize:G,pageSizeLabel:`每頁筆數`,pageSizeOptions:v,renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:Z}})]})})]})]}),(0,s.jsx)(p,{categoryOptions:[h,...j],confirmText:`建立`,initialName:``,loading:L,onClose:()=>I(!1),onSubmit:ie,open:F,title:`建立簽核模板`})]})}function S(e){return e instanceof Error?e.message:`發生未知錯誤`}function C(e){return e===`PUBLISHED`||e===`DRAFT`?e:`ALL`}function w({status:e}){return e===`PUBLISHED`?(0,s.jsx)(o.Badge,{size:`sub`,text:`已發布`,variant:`dot-success`}):(0,s.jsx)(o.Badge,{size:`sub`,text:`草稿`,variant:`dot-inactive`})}function T({record:e}){return e.categoryDetail?.isActive===!1?(0,s.jsx)(o.Badge,{size:`sub`,text:`${e.categoryLabel}(停用)`,variant:`dot-inactive`}):(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:e.categoryLabel})}var E={categoryId:null,id:`ALL_CATEGORIES`,name:`全部分類`};function D(e){return{categoryId:e.id,id:e.id,name:e.name}}function O(e,t){if(!A(e))return E;let n=typeof e.id==`string`?e.id:null;return n===E.id?E:t.find(e=>e.id===n)??E}function ee(e){return Array.isArray(e)||!A(e)?E.name:typeof e.name==`string`?e.name:E.name}function k(e){return e.categoryDetail?.name??e.category??`未分類`}function A(e){return typeof e==`object`&&!!e}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return x}});
2
- //# sourceMappingURL=TemplatesView-DIOQTUUl.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplatesView-DIOQTUUl.cjs","names":[],"sources":["../../src/views/templates/template-name-modal.tsx","../../src/views/templates/TemplatesView.tsx"],"sourcesContent":["'use client';\n\nimport { ChangeEvent, ReactElement, useEffect, useState } from 'react';\nimport { Input, Modal, Select, Typography } from '@mezzanine-ui/react';\nimport { BPMFormField } from '../../components/bpm-form-field';\n\nexport interface TemplateCategoryOption {\n readonly categoryId: string | null;\n readonly id: string;\n readonly name: string;\n}\n\ninterface TemplateNameModalProps {\n readonly confirmText: string;\n readonly categoryOptions: readonly TemplateCategoryOption[];\n readonly initialName: string;\n readonly loading: boolean;\n readonly onClose: () => void;\n readonly onSubmit: (input: {\n readonly categoryId: string | null;\n readonly name: string;\n }) => Promise<void>;\n readonly open: boolean;\n readonly title: string;\n}\n\nexport function TemplateNameModal({\n confirmText,\n categoryOptions,\n initialName,\n loading,\n onClose,\n onSubmit,\n open,\n title,\n}: TemplateNameModalProps): ReactElement {\n const [name, setName] = useState(initialName);\n const [category, setCategory] = useState<TemplateCategoryOption>(\n categoryOptions[0] ?? UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n );\n const [error, setError] = useState<string | null>(null);\n const trimmedName = name.trim();\n\n useEffect((): void => {\n if (!open) {\n return;\n }\n\n setName(initialName);\n setCategory(categoryOptions[0] ?? UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION);\n setError(null);\n }, [categoryOptions, initialName, open]);\n\n async function handleConfirm(): Promise<void> {\n if (!trimmedName) {\n setError('請輸入模板名稱');\n return;\n }\n\n try {\n await onSubmit({ categoryId: category.categoryId, name: trimmedName });\n } catch (submitError: unknown) {\n setError(readErrorMessage(submitError));\n }\n }\n\n return (\n <Modal\n cancelText=\"取消\"\n confirmButtonProps={{ disabled: !trimmedName }}\n confirmText={confirmText}\n loading={loading}\n modalType=\"standard\"\n onCancel={onClose}\n onClose={onClose}\n onConfirm={(): void => void handleConfirm()}\n open={open}\n showModalFooter\n showModalHeader\n size=\"narrow\"\n title={title}\n >\n <BPMFormField label=\"模板名稱\" name=\"templateName\" required>\n <Input\n autoFocus\n fullWidth\n onChange={(event: ChangeEvent<HTMLInputElement>): void => {\n setName(event.target.value);\n setError(null);\n }}\n placeholder=\"例如:費用申請流程\"\n value={name}\n variant=\"base\"\n />\n </BPMFormField>\n <BPMFormField label=\"分類\" name=\"templateCategory\">\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setCategory(readCategoryOption(option, categoryOptions));\n setError(null);\n }}\n options={[...categoryOptions]}\n placeholder=\"選擇分類\"\n value={category}\n />\n </BPMFormField>\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n </Modal>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n\nexport const UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION: TemplateCategoryOption = {\n categoryId: null,\n id: 'UNCATEGORIZED',\n name: '未分類',\n};\n\nfunction readCategoryOption(\n value: unknown,\n options: readonly TemplateCategoryOption[],\n): TemplateCategoryOption {\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION;\n }\n\n const id = typeof value.id === 'string' ? value.id : null;\n\n return (\n options.find((option) => option.id === id) ??\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION\n );\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null;\n}\n","'use client';\n\nimport type { ChangeEvent, Key, ReactElement } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n Layout,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Tab,\n TabItem,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { PlusIcon } from '@mezzanine-ui/icons';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport styles from './templates.module.scss';\nimport { formatDateTime } from '../../lib/format-date-time';\nimport { AppNavigation } from '../../components/app-navigation';\nimport { useRouterAdapter } from '../../lib/router-adapter';\nimport {\n TemplateCategoryOption,\n TemplateNameModal,\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n} from './template-name-modal';\nimport {\n ApprovalTemplateListStatus,\n ApprovalTemplateRecord,\n ApprovalTemplateCategoryRecord,\n createApprovalTemplate,\n listApprovalTemplateCategoriesPage,\n listApprovalTemplatesPage,\n} from '@rytass/bpm-core-client/template';\nimport { listLaunchableTemplates } from '@rytass/bpm-core-client/workflow';\n\nconst TEMPLATE_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst TEMPLATE_STATUS_TABS: readonly {\n readonly key: TemplateStatusTabKey;\n readonly label: string;\n}[] = [\n { key: 'ALL', label: '全部' },\n { key: 'PUBLISHED', label: '已發布' },\n { key: 'DRAFT', label: '草稿' },\n];\n\nconst TEMPLATE_CATEGORY_PAGE_SIZE = 100;\n\ntype TemplateStatusTabKey = 'ALL' | ApprovalTemplateListStatus;\n\ntype TemplateRow = Readonly<\n Record<string, unknown> &\n ApprovalTemplateRecord & {\n categoryLabel: string;\n key: string;\n status: ApprovalTemplateListStatus;\n }\n>;\n\nexport interface TemplatesViewProps {\n readonly activeHref?: string;\n}\n\nexport function TemplatesView({\n activeHref = '/templates',\n}: TemplatesViewProps = {}): ReactElement {\n const router = useRouterAdapter();\n const [templates, setTemplates] = useState<readonly ApprovalTemplateRecord[]>(\n [],\n );\n const [categoryFilter, setCategoryFilter] = useState<TemplateCategoryOption>(\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION,\n );\n const [categoryOptions, setCategoryOptions] = useState<\n readonly TemplateCategoryOption[]\n >([]);\n const [launchableTemplateIds, setLaunchableTemplateIds] = useState<\n ReadonlySet<string>\n >(new Set());\n const [createModalOpen, setCreateModalOpen] = useState(false);\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [templatePage, setTemplatePage] = useState(1);\n const [templatePageSize, setTemplatePageSize] = useState(10);\n const [templateSearchText, setTemplateSearchText] = useState('');\n const [templateStatus, setTemplateStatus] =\n useState<TemplateStatusTabKey>('ALL');\n const [templateTotalCount, setTemplateTotalCount] = useState(0);\n\n const refreshTemplates = useCallback(async (): Promise<void> => {\n setLoading(true);\n setError(null);\n\n try {\n const [\n templatePageResult,\n nextLaunchableTemplates,\n activeCategoryPageResult,\n ] = await Promise.all([\n listApprovalTemplatesPage({\n categoryId: categoryFilter.categoryId,\n page: templatePage,\n pageSize: templatePageSize,\n searchText: templateSearchText,\n status: templateStatus === 'ALL' ? null : templateStatus,\n }),\n listLaunchableTemplates(),\n listApprovalTemplateCategoriesPage({\n page: 1,\n pageSize: TEMPLATE_CATEGORY_PAGE_SIZE,\n searchText: '',\n status: 'ACTIVE',\n }),\n ]);\n\n setCategoryOptions([\n ...activeCategoryPageResult.categories.map(readCategoryOption),\n ]);\n setTemplates(templatePageResult.templates);\n setTemplateTotalCount(templatePageResult.totalCount);\n setLaunchableTemplateIds(\n new Set(nextLaunchableTemplates.map((template) => template.id)),\n );\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }, [\n categoryFilter,\n templatePage,\n templatePageSize,\n templateSearchText,\n templateStatus,\n ]);\n\n useEffect((): void => {\n void refreshTemplates();\n }, [refreshTemplates]);\n\n const rows = useMemo(\n (): TemplateRow[] =>\n templates.map((template) => ({\n ...template,\n categoryLabel: readTemplateCategoryLabel(template),\n key: template.id,\n status: template.currentVersionId ? 'PUBLISHED' : 'DRAFT',\n updatedAt: formatDateTime(template.updatedAt),\n })),\n [templates],\n );\n const columns = useMemo(\n (): TableColumn<TemplateRow>[] => [\n { dataIndex: 'name', key: 'name', title: '模板名稱', width: 220 },\n {\n key: 'status',\n render: (record: TemplateRow): ReactElement => (\n <TemplateStatusBadge status={record.status} />\n ),\n title: '狀態',\n width: 120,\n },\n {\n key: 'category',\n render: (record: TemplateRow): ReactElement => (\n <TemplateCategoryLabel record={record} />\n ),\n title: '分類',\n width: 160,\n },\n {\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n title: '更新時間',\n width: 220,\n },\n ],\n [],\n );\n const tableActions = useMemo(\n (): TableActions<TemplateRow> => ({\n render: (record): ReturnType<TableActions<TemplateRow>['render']> => [\n {\n disabled: (template): boolean =>\n !launchableTemplateIds.has(template.id),\n name: '發起',\n onClick: (): void =>\n router.push(`/instances/new?templateId=${record.id}`),\n variant: 'base-primary',\n },\n {\n name: '設計',\n onClick: (): void => router.push(`/templates/${record.id}/designer`),\n },\n {\n name: '版本',\n onClick: (): void => router.push(`/templates/${record.id}/versions`),\n },\n ],\n variant: 'base-secondary',\n width: 192,\n }),\n [launchableTemplateIds, router],\n );\n\n async function handleCreateTemplate({\n categoryId,\n name,\n }: {\n readonly categoryId: string | null;\n readonly name: string;\n }): Promise<void> {\n setCreating(true);\n setError(null);\n\n try {\n const templateId = await createApprovalTemplate({ categoryId, name });\n setCreateModalOpen(false);\n router.push(`/templates/${templateId}/designer`);\n } finally {\n setCreating(false);\n }\n }\n\n return (\n <>\n <Layout>\n <AppNavigation activeHref={activeHref} />\n\n <Layout.Main>\n <PageHeader>\n <ContentHeader\n description=\"建立流程模板、維護草稿與發布版本。\"\n title=\"簽核模板\"\n >\n <Button\n disabled={creating}\n icon={PlusIcon}\n iconType=\"leading\"\n onClick={(): void => setCreateModalOpen(true)}\n variant=\"base-primary\"\n >\n 建立模板\n </Button>\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.templateFilterArea} size=\"sub\">\n <FilterLine>\n <Filter span={3}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"templateSearchText\"\n >\n <Input\n fullWidth\n onChange={(\n event: ChangeEvent<HTMLInputElement>,\n ): void => {\n setTemplateSearchText(event.target.value);\n setTemplatePage(1);\n }}\n placeholder=\"關鍵字:搜尋模板名稱、分類或描述\"\n size=\"sub\"\n value={templateSearchText}\n variant=\"base\"\n />\n </FormField>\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"templateCategoryFilter\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setCategoryFilter(\n readCategoryFilterOption(option, categoryOptions),\n );\n setTemplatePage(1);\n }}\n options={[\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION,\n ...categoryOptions,\n ]}\n placeholder=\"分類\"\n renderValue={(value): string =>\n `分類:${readTemplateCategoryFilterLabel(value)}`\n }\n size=\"sub\"\n value={categoryFilter}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n tab={\n <Tab\n activeKey={templateStatus}\n onChange={(activeKey): void => {\n setTemplateStatus(readTemplateStatusTabKey(activeKey));\n setTemplatePage(1);\n }}\n >\n {TEMPLATE_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: templatePage,\n onChange: (page): void => {\n setTemplatePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setTemplatePage(1);\n setTemplatePageSize(pageSize);\n },\n pageSize: templatePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: TEMPLATE_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: templateTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n </Layout.Main>\n </Layout>\n\n <TemplateNameModal\n categoryOptions={[\n UNCATEGORIZED_TEMPLATE_CATEGORY_OPTION,\n ...categoryOptions,\n ]}\n confirmText=\"建立\"\n initialName=\"\"\n loading={creating}\n onClose={(): void => setCreateModalOpen(false)}\n onSubmit={handleCreateTemplate}\n open={createModalOpen}\n title=\"建立簽核模板\"\n />\n </>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n\nfunction readTemplateStatusTabKey(activeKey: Key): TemplateStatusTabKey {\n if (activeKey === 'PUBLISHED' || activeKey === 'DRAFT') {\n return activeKey;\n }\n\n return 'ALL';\n}\n\nfunction TemplateStatusBadge({\n status,\n}: {\n readonly status: ApprovalTemplateListStatus;\n}): ReactElement {\n if (status === 'PUBLISHED') {\n return <Badge size=\"sub\" text=\"已發布\" variant=\"dot-success\" />;\n }\n\n return <Badge size=\"sub\" text=\"草稿\" variant=\"dot-inactive\" />;\n}\n\nfunction TemplateCategoryLabel({\n record,\n}: {\n readonly record: TemplateRow;\n}): ReactElement {\n if (record.categoryDetail?.isActive === false) {\n return (\n <Badge\n size=\"sub\"\n text={`${record.categoryLabel}(停用)`}\n variant=\"dot-inactive\"\n />\n );\n }\n\n return (\n <Typography component=\"span\" variant=\"body\">\n {record.categoryLabel}\n </Typography>\n );\n}\n\nconst UNCATEGORIZED_TEMPLATE_FILTER_OPTION: TemplateCategoryOption = {\n categoryId: null,\n id: 'ALL_CATEGORIES',\n name: '全部分類',\n};\n\nfunction readCategoryOption(\n category: ApprovalTemplateCategoryRecord,\n): TemplateCategoryOption {\n return {\n categoryId: category.id,\n id: category.id,\n name: category.name,\n };\n}\n\nfunction readCategoryFilterOption(\n value: unknown,\n options: readonly TemplateCategoryOption[],\n): TemplateCategoryOption {\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION;\n }\n\n const id = typeof value.id === 'string' ? value.id : null;\n\n if (id === UNCATEGORIZED_TEMPLATE_FILTER_OPTION.id) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION;\n }\n\n return (\n options.find((option) => option.id === id) ??\n UNCATEGORIZED_TEMPLATE_FILTER_OPTION\n );\n}\n\nfunction readTemplateCategoryFilterLabel(value: unknown): string {\n if (Array.isArray(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n }\n\n if (!isRecord(value)) {\n return UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n }\n\n return typeof value.name === 'string'\n ? value.name\n : UNCATEGORIZED_TEMPLATE_FILTER_OPTION.name;\n}\n\nfunction readTemplateCategoryLabel(template: ApprovalTemplateRecord): string {\n return template.categoryDetail?.name ?? template.category ?? '未分類';\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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"}
@@ -1,2 +0,0 @@
1
- "use client";require('../app-navigation.css');var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require("./router-adapter-BybHrCNP.cjs"),l=require("./auth-provider-D2P-qWmY.cjs");let u=require("react"),d=require("@mezzanine-ui/react"),f=require("@rytass/bpm-core-client"),p=require("react/jsx-runtime"),m=require("@rytass/bpm-core-client/workflow"),h=require("@mezzanine-ui/icons");var g=(0,u.createContext)(null);function _({children:e}){let[t,n]=(0,u.useState)(!1),r=(0,u.useCallback)(()=>{n(!0)},[]),i=(0,u.useCallback)(()=>{n(!1)},[]),a=(0,u.useCallback)(()=>{n(e=>!e)},[]),o=(0,u.useMemo)(()=>({close:i,isOpen:t,open:r,toggle:a}),[i,t,r,a]);return(0,p.jsx)(g.Provider,{value:o,children:e})}function v(){return(0,u.useContext)(g)||{close:()=>void 0,isOpen:!1,open:()=>void 0,toggle:()=>void 0}}var y=(0,u.createContext)(null);function b({children:e}){let{member:t}=l.n(),n=t?.memberId??null,[r,i]=(0,u.useState)(0),a=(0,u.useCallback)(async()=>{if(!n)return i(0),0;let e=await(0,m.readUnreadNotificationCount)(n);return i(e),e},[n]);(0,u.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await a();e&&i(t)}catch{e&&i(0)}})(),()=>{e=!1}},[a]);let o=(0,u.useMemo)(()=>({refreshUnreadCount:a,unreadCount:r}),[a,r]);return(0,p.jsx)(y.Provider,{value:o,children:e})}function x(){return(0,u.useContext)(y)||{refreshUnreadCount:async()=>0,unreadCount:0}}var S={logo:`bpm_logo_QvBLU`,notificationBell:`bpm_notificationBell_W-wl7`,notificationBadge:`bpm_notificationBadge_Gy3Eq`},C=[{title:`我的工作`,items:[{href:`/dashboard`,icon:h.HomeIcon,label:`工作台`},{href:`/inbox`,icon:h.MailUnreadIcon,label:`我的待簽`},{href:`/sent`,icon:h.MailIcon,label:`我發起的`},{href:`/cc`,icon:h.ShareIcon,label:`抄送給我`}]},{title:`查詢與代理`,items:[{href:`/search`,icon:h.SearchIcon,label:`搜尋`},{href:`/delegations`,icon:h.SwitchHorizontalIcon,label:`個人代理`}]},{title:`簽核設計`,items:[{href:`/templates`,icon:h.FolderIcon,label:`簽核模板`,requiresAdmin:!0},{href:`/templates/categories`,icon:h.ListIcon,label:`模板分類`,requiresAdmin:!0},{href:`/forms`,icon:h.FileIcon,label:`表單設計`,requiresAdmin:!0}]},{title:`系統管理`,items:[{href:`/admin/orgs`,icon:h.SystemIcon,label:`組織管理`,requiresAdmin:!0},{href:`/admin/users`,icon:h.UserIcon,label:`會員對照`,requiresAdmin:!0},{href:`/admin/delegations`,icon:h.ShareIcon,label:`代理設定`,requiresAdmin:!0}]}];function w({activeHref:e,logoSrc:t=`/rytass-logo.png`,title:n=`BPM Admin`,groups:r=C}={}){let i=c.r(),{member:a}=l.n(),{unreadCount:o}=x(),s=e??i.pathname??``,u=T(a),m=r.map(e=>({title:e.title,items:e.items.filter(e=>!e.requiresAdmin||u)})).filter(e=>e.items.length>0),g=async()=>{await(0,f.logoutApi)(),i.replace(`/login`)};return(0,p.jsx)(d.Navigation,{exactActivatedMatch:!0,children:[(0,p.jsx)(d.NavigationHeader,{title:n,children:(0,p.jsx)(`img`,{alt:``,className:S.logo,height:24,src:t,width:24})},`header`),...m.map(e=>(0,p.jsx)(d.NavigationOptionCategory,{title:e.title,children:e.items.map(e=>(0,p.jsx)(d.NavigationOption,{active:e.href===s,href:e.href,icon:e.icon,title:e.label},e.href))},e.title)),(0,p.jsxs)(d.NavigationFooter,{children:[(0,p.jsx)(d.NavigationUserMenu,{options:[{id:`notification-settings`,name:`通知設定`},{id:`logout`,name:`登出`}],onSelect:e=>{if(e.id===`notification-settings`){i.push(`/settings/notifications`);return}e.id===`logout`&&g()},children:(0,p.jsx)(D,{})}),(0,p.jsx)(E,{unreadCount:o}),(0,p.jsx)(d.NavigationIconButton,{"aria-label":`登出`,icon:h.LogoutIcon,onClick:()=>{g()},title:`登出`,type:`button`})]},`footer`)]})}function T(e){return e?(e.roles??[]).includes(`BPM_ADMIN`)||(e.permissions??[]).some(e=>[`bpm:*`,`bpm:admin`,`bpm.admin`,`bpm:admin:*`].includes(e)):!1}function E({unreadCount:e}){let{open:t}=v();return(0,p.jsxs)(`span`,{className:S.notificationBell,children:[(0,p.jsx)(d.NavigationIconButton,{"aria-label":e>0?`通知中心,${e} 則未讀`:`通知中心`,icon:h.NotificationUnreadIcon,onClick:()=>{t()},title:`通知中心`,type:`button`}),e>0?(0,p.jsx)(`span`,{className:S.notificationBadge,children:e>99?`99+`:e}):null]})}function D(){let{member:e}=l.n();return e?(0,p.jsx)(p.Fragment,{children:e.name}):null}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return w}});
2
- //# sourceMappingURL=app-navigation-DAC5gFbG.cjs.map
@@ -1,2 +0,0 @@
1
- "use client";require('../approval-instance-list-page.css');const e=require("./app-navigation-DAC5gFbG.cjs"),t=require("./router-adapter-BybHrCNP.cjs"),n=require("./format-date-time-BQyH5U8z.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("@rytass/bpm-core-client"),o=require("react/jsx-runtime"),s=require("@rytass/bpm-core-client/workflow"),c=require("@mezzanine-ui/react/ContentHeader");c=e.o(c,1);let l=require("@mezzanine-ui/core/form");var u={instanceFilterArea:`bpm_instanceFilterArea_qpvJq`},d=[10,20,50],f=[{id:`ALL`,name:`全部狀態`,state:null},{id:`RUNNING`,name:`進行中`,state:`RUNNING`},{id:`APPROVED`,name:`已通過`,state:`APPROVED`},{id:`REJECTED`,name:`已拒絕`,state:`REJECTED`},{id:`RETURNED`,name:`已退回`,state:`RETURNED`},{id:`CANCELLED`,name:`已取消`,state:`CANCELLED`},{id:`EXPIRED`,name:`已逾期`,state:`EXPIRED`},{id:`DRAFT`,name:`草稿`,state:`DRAFT`}];function p({activeHref:p,defaultState:v,description:y,emptyMessage:C,searchPlaceholder:w,title:T,view:E}){let D=t.r(),[O,k]=(0,r.useState)(null),[A,j]=(0,r.useState)(new Map),[M,N]=(0,r.useState)(1),[P,F]=(0,r.useState)(10),[I,L]=(0,r.useState)(0),[R,z]=(0,r.useState)(!0),[B,V]=(0,r.useState)([]),[H,U]=(0,r.useState)(``),[W,G]=(0,r.useState)(g(v)),K=(0,r.useCallback)(async()=>{z(!0),k(null);try{let e=await(0,s.listApprovalInstancesPage)({page:M,pageSize:P,searchText:H,state:W.state,templateId:null,view:E});V(e.instances.map(m)),L(e.totalCount)}catch(e){k(S(e))}finally{z(!1)}},[M,P,H,W,E]);(0,r.useEffect)(()=>{K()},[K]),(0,r.useEffect)(()=>{let e=Array.from(new Set(B.map(e=>e.initiatorMemberId).filter(Boolean)));if(e.length===0){j(new Map);return}let t=!1;return(async()=>{try{let n=await(0,a.resolveMembers)(e);if(t)return;j(new Map(n.map(e=>[e.memberId,e])))}catch{if(t)return;j(new Map)}})(),()=>{t=!0}},[B]);let q=(0,r.useMemo)(()=>[{dataIndex:`caseTitle`,key:`caseTitle`,title:`案件`,width:300},{key:`state`,render:e=>(0,o.jsx)(i.Typography,{color:b(e.state),component:`span`,variant:`body`,children:e.stateLabel}),title:`狀態`,width:120},{key:`initiatorMemberId`,render:e=>(0,o.jsx)(i.Typography,{component:`span`,variant:`body`,children:x(e.initiatorMemberId,A)}),title:`發起人`,width:180},{key:`startedAt`,render:e=>(0,o.jsx)(i.Typography,{component:`span`,variant:`body`,children:n.t(e.startedAt)}),title:`發起時間`,width:220},{key:`completedAt`,render:e=>(0,o.jsx)(i.Typography,{component:`span`,variant:`body`,children:n.t(e.completedAt)}),title:`完成時間`,width:220}],[A]),J=(0,r.useMemo)(()=>({render:e=>[{name:`查看`,onClick:()=>D.push(`/instances/${e.id}`)}],variant:`base-secondary`,width:88}),[D]);return(0,o.jsxs)(i.Layout,{children:[(0,o.jsx)(e.t,{activeHref:p}),(0,o.jsxs)(i.Layout.Main,{children:[(0,o.jsx)(i.PageHeader,{children:(0,o.jsx)(c.default,{description:y,title:T})}),(0,o.jsx)(i.SectionGroup,{children:(0,o.jsxs)(i.Section,{filterArea:(0,o.jsx)(i.FilterArea,{className:u.instanceFilterArea,size:`sub`,children:(0,o.jsxs)(i.FilterLine,{children:[(0,o.jsx)(i.Filter,{span:3,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:l.FormFieldLayout.VERTICAL,name:`instanceSearchText`,children:(0,o.jsx)(i.Input,{fullWidth:!0,onChange:e=>{U(e.target.value),N(1)},placeholder:w,size:`sub`,value:H,variant:`base`})})}),(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:l.FormFieldLayout.VERTICAL,name:`instanceState`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>{G(h(e)),N(1)},options:[...f],placeholder:`狀態`,renderValue:e=>`狀態:${_(e)}`,size:`sub`,value:W})})})]})}),children:[O?(0,o.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:O}):null,!O&&!R&&B.length===0?(0,o.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:C}):null,(0,o.jsx)(i.Table,{actions:J,columns:q,dataSource:[...B],fullWidth:!0,loading:R,pagination:{current:M,onChange:e=>{N(e)},onChangePageSize:e=>{N(1),F(e)},pageSize:P,pageSizeLabel:`每頁筆數`,pageSizeOptions:d,renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:I}})]})})]})]})}function m(e){return{...e,caseTitle:(0,s.readApprovalInstanceCaseTitle)(e),key:e.id,stateLabel:y(e.state)}}function h(e){return v(e)?g(e.state):f[0]}function g(e){return f.find(t=>t.state===e)??f[0]}function _(e){return v(e)?e.name:f[0].name}function v(e){return typeof e==`object`&&!!e&&`id`in e&&`name`in e&&`state`in e}function y(e){return e===`RUNNING`?`進行中`:e===`APPROVED`?`已通過`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`CANCELLED`?`已取消`:e===`EXPIRED`?`已逾期`:`草稿`}function b(e){return e===`APPROVED`?`text-success`:e===`REJECTED`||e===`CANCELLED`||e===`EXPIRED`?`text-error`:`text-neutral`}function x(e,t){let n=(e??``).trim();return n?t.get(n)?.name??n:`未知發起人`}function S(e){return e instanceof Error?e.message:`讀取簽核案件失敗。`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return p}});
2
- //# sourceMappingURL=approval-instance-list-page-DIAmwhvl.cjs.map
@@ -1,2 +0,0 @@
1
- "use client";require('../auth-provider.css');const e=require("./router-adapter-BybHrCNP.cjs");let t=require("react"),n=require("@mezzanine-ui/react"),r=require("@rytass/bpm-core-client"),i=require("react/jsx-runtime");var a={authLoading:`bpm_authLoading_GiBnf`},o=(0,t.createContext)(null);function s({children:n,publicPaths:a=[`/login`],loginPath:s=`/login`}){let c=e.r(),[f,p]=(0,t.useState)(!0),[m,h]=(0,t.useState)(null),g=(0,t.useCallback)(async()=>{let e=await(0,r.readApiCurrentMember)();return h(e),e},[]),_=(0,t.useCallback)(async e=>{let t=await(0,r.loginApi)(e);return h(t),t},[]),v=(0,t.useCallback)(async()=>{await(0,r.logoutApi)(),h(null),c.replace(s)},[s,c]);(0,t.useEffect)(()=>{let e=!0;return p(!0),(async()=>{try{let t=await(0,r.readApiCurrentMember)();e&&h(t)}catch{e&&h(null)}finally{e&&p(!1)}})(),()=>{e=!1}},[]),(0,t.useEffect)(()=>{f||u(c.pathname,a)||m||c.replace(`${s}?next=${encodeURIComponent(d(c.pathname))}`)},[f,s,m,a,c]);let y=(0,t.useMemo)(()=>({loading:f,login:_,logout:v,member:m,refresh:g}),[f,_,v,m,g]);return f&&!u(c.pathname,a)?(0,i.jsx)(l,{label:`確認登入狀態`}):!f&&!m&&!u(c.pathname,a)?(0,i.jsx)(l,{label:`前往登入頁`}):(0,i.jsx)(o.Provider,{value:y,children:n})}function c(){let e=(0,t.useContext)(o);if(!e)throw Error(`useAuth must be used inside <AuthProvider>`);return e}function l({label:e}){return(0,i.jsx)(`main`,{className:a.authLoading,children:(0,i.jsx)(n.Typography,{color:`text-neutral`,variant:`body`,children:e})})}function u(e,t){return t.some(t=>t===e)}function d(e){return typeof window>`u`?e??`/`:`${window.location.pathname}${window.location.search}`}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
2
- //# sourceMappingURL=auth-provider-D2P-qWmY.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-provider-D2P-qWmY.cjs","names":[],"sources":["../../src/lib/auth-provider.module.scss","../../src/lib/auth-provider.tsx"],"sourcesContent":[".authLoading {\n align-items: center;\n background: var(--mzn-color-bg-body);\n display: flex;\n min-height: 100vh;\n justify-content: center;\n padding: 32px;\n}\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Typography } from '@mezzanine-ui/react';\nimport {\n loginApi,\n logoutApi,\n readApiCurrentMember,\n type ApiMember,\n} from '@rytass/bpm-core-client';\nimport { useRouterAdapter } from './router-adapter';\nimport styles from './auth-provider.module.scss';\n\ninterface AuthContextValue {\n readonly loading: boolean;\n readonly member: ApiMember | null;\n readonly login: (input: {\n readonly identifier: string;\n readonly password: string;\n }) => Promise<ApiMember>;\n readonly logout: () => Promise<void>;\n readonly refresh: () => Promise<ApiMember | null>;\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport interface AuthProviderProps {\n readonly children: ReactNode;\n /**\n * Paths that should not redirect to `/login` when there is no session.\n * Defaults to `['/login']`. Override when your host runs the login UI\n * under a different path.\n */\n readonly publicPaths?: readonly string[];\n /**\n * Where to send unauthenticated users. Defaults to `'/login'`.\n */\n readonly loginPath?: string;\n}\n\n/**\n * BPM auth context provider. Reads / writes the host BPM API session via\n * `@rytass/bpm-core-client` (`loginApi` / `logoutApi` / `readApiCurrentMember`)\n * and uses the host-supplied {@link useRouterAdapter} to redirect\n * unauthenticated users.\n */\nexport function AuthProvider({\n children,\n publicPaths = ['/login'],\n loginPath = '/login',\n}: AuthProviderProps): ReactElement {\n const router = useRouterAdapter();\n const [loading, setLoading] = useState(true);\n const [member, setMember] = useState<ApiMember | null>(null);\n\n const refresh = useCallback(async (): Promise<ApiMember | null> => {\n const current = await readApiCurrentMember();\n setMember(current);\n return current;\n }, []);\n\n const login = useCallback(\n async (input: {\n readonly identifier: string;\n readonly password: string;\n }): Promise<ApiMember> => {\n const next = await loginApi(input);\n setMember(next);\n return next;\n },\n [],\n );\n\n const logout = useCallback(async (): Promise<void> => {\n await logoutApi();\n setMember(null);\n router.replace(loginPath);\n }, [loginPath, router]);\n\n useEffect((): (() => void) => {\n let active = true;\n setLoading(true);\n void (async () => {\n try {\n const current = await readApiCurrentMember();\n if (active) setMember(current);\n } catch {\n if (active) setMember(null);\n } finally {\n if (active) setLoading(false);\n }\n })();\n return (): void => {\n active = false;\n };\n }, []);\n\n useEffect((): void => {\n if (loading || isPublicPath(router.pathname, publicPaths) || member) return;\n router.replace(\n `${loginPath}?next=${encodeURIComponent(readCurrentPath(router.pathname))}`,\n );\n }, [loading, loginPath, member, publicPaths, router]);\n\n const value = useMemo<AuthContextValue>(\n () => ({ loading, login, logout, member, refresh }),\n [loading, login, logout, member, refresh],\n );\n\n if (loading && !isPublicPath(router.pathname, publicPaths)) {\n return <AuthLoadingState label=\"確認登入狀態\" />;\n }\n if (!loading && !member && !isPublicPath(router.pathname, publicPaths)) {\n return <AuthLoadingState label=\"前往登入頁\" />;\n }\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\n/**\n * Access the BPM auth context. Throws when used outside `<AuthProvider>`.\n */\nexport function useAuth(): AuthContextValue {\n const ctx = useContext(AuthContext);\n if (!ctx) throw new Error('useAuth must be used inside <AuthProvider>');\n return ctx;\n}\n\nfunction AuthLoadingState({\n label,\n}: {\n readonly label: string;\n}): ReactElement {\n return (\n <main className={styles.authLoading}>\n <Typography color=\"text-neutral\" variant=\"body\">\n {label}\n </Typography>\n </main>\n );\n}\n\nfunction isPublicPath(\n pathname: string | null,\n publicPaths: readonly string[],\n): boolean {\n return publicPaths.some((p) => p === pathname);\n}\n\nfunction readCurrentPath(pathname: string | null): string {\n if (typeof window === 'undefined') return pathname ?? '/';\n return `${window.location.pathname}${window.location.search}`;\n}\n"],"mappings":"sOCiCM,GAAA,EAAA,EAAA,eAAqD,IAAI,EAsB/D,SAAgB,EAAa,CAC3B,WACA,cAAc,CAAC,QAAQ,EACvB,YAAY,UACsB,CAClC,IAAM,EAAS,EAAA,EAAiB,EAC1B,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,EAAI,EACrC,CAAC,EAAQ,IAAA,EAAA,EAAA,UAAwC,IAAI,EAErD,GAAA,EAAA,EAAA,aAAsB,SAAuC,CACjE,IAAM,EAAU,MAAA,EAAA,EAAA,sBAA2B,EAE3C,OADA,EAAU,CAAO,EACV,CACT,EAAG,CAAC,CAAC,EAEC,GAAA,EAAA,EAAA,aACJ,KAAO,IAGmB,CACxB,IAAM,EAAO,MAAA,EAAA,EAAA,UAAe,CAAK,EAEjC,OADA,EAAU,CAAI,EACP,CACT,EACA,CAAC,CACH,EAEM,GAAA,EAAA,EAAA,aAAqB,SAA2B,CACpD,MAAA,EAAA,EAAA,WAAgB,EAChB,EAAU,IAAI,EACd,EAAO,QAAQ,CAAS,CAC1B,EAAG,CAAC,EAAW,CAAM,CAAC,GAEtB,EAAA,EAAA,eAA8B,CAC5B,IAAI,EAAS,GAYb,OAXA,EAAW,EAAI,GACT,SAAY,CAChB,GAAI,CACF,IAAM,EAAU,MAAA,EAAA,EAAA,sBAA2B,EACvC,GAAQ,EAAU,CAAO,CAC/B,MAAQ,CACF,GAAQ,EAAU,IAAI,CAC5B,QAAU,CACJ,GAAQ,EAAW,EAAK,CAC9B,CACF,GAAG,MACgB,CACjB,EAAS,EACX,CACF,EAAG,CAAC,CAAC,GAEL,EAAA,EAAA,eAAsB,CAChB,GAAW,EAAa,EAAO,SAAU,CAAW,GAAK,GAC7D,EAAO,QACL,GAAG,EAAU,QAAQ,mBAAmB,EAAgB,EAAO,QAAQ,CAAC,GAC1E,CACF,EAAG,CAAC,EAAS,EAAW,EAAQ,EAAa,CAAM,CAAC,EAEpD,IAAM,GAAA,EAAA,EAAA,cACG,CAAE,UAAS,QAAO,SAAQ,SAAQ,SAAQ,GACjD,CAAC,EAAS,EAAO,EAAQ,EAAQ,CAAO,CAC1C,EAQA,OANI,GAAW,CAAC,EAAa,EAAO,SAAU,CAAW,GAChD,EAAA,EAAA,KAAC,EAAD,CAAkB,MAAM,QAAU,CAAA,EAEvC,CAAC,GAAW,CAAC,GAAU,CAAC,EAAa,EAAO,SAAU,CAAW,GAC5D,EAAA,EAAA,KAAC,EAAD,CAAkB,MAAM,OAAS,CAAA,GAEnC,EAAA,EAAA,KAAC,EAAY,SAAb,CAA6B,QAAQ,UAA+B,CAAA,CAC7E,CAKA,SAAgB,GAA4B,CAC1C,IAAM,GAAA,EAAA,EAAA,YAAiB,CAAW,EAClC,GAAI,CAAC,EAAK,MAAU,MAAM,4CAA4C,EACtE,OAAO,CACT,CAEA,SAAS,EAAiB,CACxB,SAGe,CACf,OACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAO,sBACtB,EAAA,EAAA,KAAC,EAAA,WAAD,CAAY,MAAM,eAAe,QAAQ,gBACtC,CACS,CAAA,CACR,CAAA,CAEV,CAEA,SAAS,EACP,EACA,EACS,CACT,OAAO,EAAY,KAAM,GAAM,IAAM,CAAQ,CAC/C,CAEA,SAAS,EAAgB,EAAiC,CAExD,OADI,OAAO,OAAW,IAAoB,GAAY,IAC/C,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS,QACvD"}
@@ -1,83 +0,0 @@
1
- "use client";
2
- import { r as e } from "./router-adapter-BdHZXLS3.js";
3
- import { createContext as t, useCallback as n, useContext as r, useEffect as i, useMemo as a, useState as o } from "react";
4
- import { Typography as s } from "@mezzanine-ui/react";
5
- import { loginApi as c, logoutApi as l, readApiCurrentMember as u } from "@rytass/bpm-core-client";
6
- import { jsx as d } from "react/jsx-runtime";
7
- import '../auth-provider.css';var f = { authLoading: "bpm_authLoading_GiBnf" }, p = t(null);
8
- function m({ children: t, publicPaths: r = ["/login"], loginPath: s = "/login" }) {
9
- let f = e(), [m, h] = o(!0), [y, b] = o(null), x = n(async () => {
10
- let e = await u();
11
- return b(e), e;
12
- }, []), S = n(async (e) => {
13
- let t = await c(e);
14
- return b(t), t;
15
- }, []), C = n(async () => {
16
- await l(), b(null), f.replace(s);
17
- }, [s, f]);
18
- i(() => {
19
- let e = !0;
20
- return h(!0), (async () => {
21
- try {
22
- let t = await u();
23
- e && b(t);
24
- } catch {
25
- e && b(null);
26
- } finally {
27
- e && h(!1);
28
- }
29
- })(), () => {
30
- e = !1;
31
- };
32
- }, []), i(() => {
33
- m || _(f.pathname, r) || y || f.replace(`${s}?next=${encodeURIComponent(v(f.pathname))}`);
34
- }, [
35
- m,
36
- s,
37
- y,
38
- r,
39
- f
40
- ]);
41
- let w = a(() => ({
42
- loading: m,
43
- login: S,
44
- logout: C,
45
- member: y,
46
- refresh: x
47
- }), [
48
- m,
49
- S,
50
- C,
51
- y,
52
- x
53
- ]);
54
- return m && !_(f.pathname, r) ? /* @__PURE__ */ d(g, { label: "確認登入狀態" }) : !m && !y && !_(f.pathname, r) ? /* @__PURE__ */ d(g, { label: "前往登入頁" }) : /* @__PURE__ */ d(p.Provider, {
55
- value: w,
56
- children: t
57
- });
58
- }
59
- function h() {
60
- let e = r(p);
61
- if (!e) throw Error("useAuth must be used inside <AuthProvider>");
62
- return e;
63
- }
64
- function g({ label: e }) {
65
- return /* @__PURE__ */ d("main", {
66
- className: f.authLoading,
67
- children: /* @__PURE__ */ d(s, {
68
- color: "text-neutral",
69
- variant: "body",
70
- children: e
71
- })
72
- });
73
- }
74
- function _(e, t) {
75
- return t.some((t) => t === e);
76
- }
77
- function v(e) {
78
- return typeof window > "u" ? e ?? "/" : `${window.location.pathname}${window.location.search}`;
79
- }
80
- //#endregion
81
- export { h as n, m as t };
82
-
83
- //# sourceMappingURL=auth-provider-TTO9eNZV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-provider-TTO9eNZV.js","names":[],"sources":["../../src/lib/auth-provider.module.scss","../../src/lib/auth-provider.tsx"],"sourcesContent":[".authLoading {\n align-items: center;\n background: var(--mzn-color-bg-body);\n display: flex;\n min-height: 100vh;\n justify-content: center;\n padding: 32px;\n}\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Typography } from '@mezzanine-ui/react';\nimport {\n loginApi,\n logoutApi,\n readApiCurrentMember,\n type ApiMember,\n} from '@rytass/bpm-core-client';\nimport { useRouterAdapter } from './router-adapter';\nimport styles from './auth-provider.module.scss';\n\ninterface AuthContextValue {\n readonly loading: boolean;\n readonly member: ApiMember | null;\n readonly login: (input: {\n readonly identifier: string;\n readonly password: string;\n }) => Promise<ApiMember>;\n readonly logout: () => Promise<void>;\n readonly refresh: () => Promise<ApiMember | null>;\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport interface AuthProviderProps {\n readonly children: ReactNode;\n /**\n * Paths that should not redirect to `/login` when there is no session.\n * Defaults to `['/login']`. Override when your host runs the login UI\n * under a different path.\n */\n readonly publicPaths?: readonly string[];\n /**\n * Where to send unauthenticated users. Defaults to `'/login'`.\n */\n readonly loginPath?: string;\n}\n\n/**\n * BPM auth context provider. Reads / writes the host BPM API session via\n * `@rytass/bpm-core-client` (`loginApi` / `logoutApi` / `readApiCurrentMember`)\n * and uses the host-supplied {@link useRouterAdapter} to redirect\n * unauthenticated users.\n */\nexport function AuthProvider({\n children,\n publicPaths = ['/login'],\n loginPath = '/login',\n}: AuthProviderProps): ReactElement {\n const router = useRouterAdapter();\n const [loading, setLoading] = useState(true);\n const [member, setMember] = useState<ApiMember | null>(null);\n\n const refresh = useCallback(async (): Promise<ApiMember | null> => {\n const current = await readApiCurrentMember();\n setMember(current);\n return current;\n }, []);\n\n const login = useCallback(\n async (input: {\n readonly identifier: string;\n readonly password: string;\n }): Promise<ApiMember> => {\n const next = await loginApi(input);\n setMember(next);\n return next;\n },\n [],\n );\n\n const logout = useCallback(async (): Promise<void> => {\n await logoutApi();\n setMember(null);\n router.replace(loginPath);\n }, [loginPath, router]);\n\n useEffect((): (() => void) => {\n let active = true;\n setLoading(true);\n void (async () => {\n try {\n const current = await readApiCurrentMember();\n if (active) setMember(current);\n } catch {\n if (active) setMember(null);\n } finally {\n if (active) setLoading(false);\n }\n })();\n return (): void => {\n active = false;\n };\n }, []);\n\n useEffect((): void => {\n if (loading || isPublicPath(router.pathname, publicPaths) || member) return;\n router.replace(\n `${loginPath}?next=${encodeURIComponent(readCurrentPath(router.pathname))}`,\n );\n }, [loading, loginPath, member, publicPaths, router]);\n\n const value = useMemo<AuthContextValue>(\n () => ({ loading, login, logout, member, refresh }),\n [loading, login, logout, member, refresh],\n );\n\n if (loading && !isPublicPath(router.pathname, publicPaths)) {\n return <AuthLoadingState label=\"確認登入狀態\" />;\n }\n if (!loading && !member && !isPublicPath(router.pathname, publicPaths)) {\n return <AuthLoadingState label=\"前往登入頁\" />;\n }\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\n/**\n * Access the BPM auth context. Throws when used outside `<AuthProvider>`.\n */\nexport function useAuth(): AuthContextValue {\n const ctx = useContext(AuthContext);\n if (!ctx) throw new Error('useAuth must be used inside <AuthProvider>');\n return ctx;\n}\n\nfunction AuthLoadingState({\n label,\n}: {\n readonly label: string;\n}): ReactElement {\n return (\n <main className={styles.authLoading}>\n <Typography color=\"text-neutral\" variant=\"body\">\n {label}\n </Typography>\n </main>\n );\n}\n\nfunction isPublicPath(\n pathname: string | null,\n publicPaths: readonly string[],\n): boolean {\n return publicPaths.some((p) => p === pathname);\n}\n\nfunction readCurrentPath(pathname: string | null): string {\n if (typeof window === 'undefined') return pathname ?? '/';\n return `${window.location.pathname}${window.location.search}`;\n}\n"],"mappings":";;;;;;kDCiCM,IAAc,EAAuC,IAAI;AAsB/D,SAAgB,EAAa,EAC3B,aACA,iBAAc,CAAC,QAAQ,GACvB,eAAY,YACsB;CAClC,IAAM,IAAS,EAAiB,GAC1B,CAAC,GAAS,KAAc,EAAS,EAAI,GACrC,CAAC,GAAQ,KAAa,EAA2B,IAAI,GAErD,IAAU,EAAY,YAAuC;EACjE,IAAM,IAAU,MAAM,EAAqB;EAE3C,OADA,EAAU,CAAO,GACV;CACT,GAAG,CAAC,CAAC,GAEC,IAAQ,EACZ,OAAO,MAGmB;EACxB,IAAM,IAAO,MAAM,EAAS,CAAK;EAEjC,OADA,EAAU,CAAI,GACP;CACT,GACA,CAAC,CACH,GAEM,IAAS,EAAY,YAA2B;EAGpD,AAFA,MAAM,EAAU,GAChB,EAAU,IAAI,GACd,EAAO,QAAQ,CAAS;CAC1B,GAAG,CAAC,GAAW,CAAM,CAAC;CAoBtB,AAlBA,QAA8B;EAC5B,IAAI,IAAS;EAYb,OAXA,EAAW,EAAI,IACT,YAAY;GAChB,IAAI;IACF,IAAM,IAAU,MAAM,EAAqB;IAC3C,AAAI,KAAQ,EAAU,CAAO;GAC/B,QAAQ;IACN,AAAI,KAAQ,EAAU,IAAI;GAC5B,UAAU;IACR,AAAI,KAAQ,EAAW,EAAK;GAC9B;EACF,GAAG,SACgB;GACjB,IAAS;EACX;CACF,GAAG,CAAC,CAAC,GAEL,QAAsB;EAChB,KAAW,EAAa,EAAO,UAAU,CAAW,KAAK,KAC7D,EAAO,QACL,GAAG,EAAU,QAAQ,mBAAmB,EAAgB,EAAO,QAAQ,CAAC,GAC1E;CACF,GAAG;EAAC;EAAS;EAAW;EAAQ;EAAa;CAAM,CAAC;CAEpD,IAAM,IAAQ,SACL;EAAE;EAAS;EAAO;EAAQ;EAAQ;CAAQ,IACjD;EAAC;EAAS;EAAO;EAAQ;EAAQ;CAAO,CAC1C;CAQA,OANI,KAAW,CAAC,EAAa,EAAO,UAAU,CAAW,IAChD,kBAAC,GAAD,EAAkB,OAAM,SAAU,CAAA,IAEvC,CAAC,KAAW,CAAC,KAAU,CAAC,EAAa,EAAO,UAAU,CAAW,IAC5D,kBAAC,GAAD,EAAkB,OAAM,QAAS,CAAA,IAEnC,kBAAC,EAAY,UAAb;EAA6B;EAAQ;CAA+B,CAAA;AAC7E;AAKA,SAAgB,IAA4B;CAC1C,IAAM,IAAM,EAAW,CAAW;CAClC,IAAI,CAAC,GAAK,MAAU,MAAM,4CAA4C;CACtE,OAAO;AACT;AAEA,SAAS,EAAiB,EACxB,YAGe;CACf,OACE,kBAAC,QAAD;EAAM,WAAW,EAAO;YACtB,kBAAC,GAAD;GAAY,OAAM;GAAe,SAAQ;aACtC;EACS,CAAA;CACR,CAAA;AAEV;AAEA,SAAS,EACP,GACA,GACS;CACT,OAAO,EAAY,MAAM,MAAM,MAAM,CAAQ;AAC/C;AAEA,SAAS,EAAgB,GAAiC;CAExD,OADI,OAAO,SAAW,MAAoB,KAAY,MAC/C,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS;AACvD"}
@@ -1,2 +0,0 @@
1
- "use client";require('../dashboard-page.css');const e=require("./app-navigation-DAC5gFbG.cjs"),t=require("./router-adapter-BybHrCNP.cjs"),n=require("./auth-provider-D2P-qWmY.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("react/jsx-runtime"),o=require("@rytass/bpm-core-client/workflow"),s=require("@mezzanine-ui/icons"),c=require("@mezzanine-ui/react/ContentHeader");c=e.o(c,1);var l={metricCard:`bpm_metricCard_vp2qC`},u={activeInstanceCount:0,completedInstanceCount:0,overdueTaskCount:0,pendingTaskCount:0,rejectedInstanceCount:0,totalInstanceCount:0,unreadNotificationCount:0};function d({activeHref:d}){let m=t.r(),{member:h}=n.n(),g=h?.memberId??null,[_,v]=(0,r.useState)(null),[y,b]=(0,r.useState)(!0),[x,S]=(0,r.useState)(u),C=(0,r.useCallback)(async()=>{if(!g){b(!1);return}b(!0),v(null);try{S(await(0,o.readWorkflowDashboardSummary)({currentMemberId:g,from:null,to:null}))}catch(e){v(p(e))}finally{b(!1)}},[g]);(0,r.useEffect)(()=>{C()},[C]);let w=(0,r.useMemo)(()=>[{caption:`目前需要你處理的任務`,href:`/inbox`,label:`待處理簽核`,value:f(x.pendingTaskCount,y)},{caption:`尚未讀取的站內通知`,href:`/notifications`,label:`未讀通知`,value:f(x.unreadNotificationCount,y)},{caption:`目前仍在流程中的案件`,href:`/search`,label:`進行中案件`,value:f(x.activeInstanceCount,y)},{caption:`已超過 SLA 的待處理任務`,href:`/inbox`,label:`逾時任務`,value:f(x.overdueTaskCount,y)},{caption:`你有權限查看的全部案件`,href:`/search`,label:`案件總數`,value:f(x.totalInstanceCount,y)}],[y,x]);return(0,a.jsxs)(i.Layout,{children:[(0,a.jsx)(e.t,{activeHref:d}),(0,a.jsxs)(i.Layout.Main,{children:[(0,a.jsx)(i.PageHeader,{children:(0,a.jsx)(c.default,{description:`查看待處理簽核、近期通知與你發起的案件進度。`,title:`工作台`,children:(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>m.push(`/instances/new`),variant:`base-primary`,children:`發起簽核`})})}),(0,a.jsx)(i.SectionGroup,{children:(0,a.jsxs)(i.Section,{children:[_?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:_}):null,(0,a.jsx)(i.CardGroup,{children:w.map(e=>(0,a.jsx)(i.BaseCard,{"aria-label":`前往${e.label}`,className:l.metricCard,description:e.value,onClick:()=>m.push(e.href),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),m.push(e.href))},role:`link`,tabIndex:0,title:e.label,children:(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:e.caption})},e.label))})]})})]})]})}function f(e,t){return t?`-`:String(e)}function p(e){return e instanceof Error?e.message:`讀取工作台摘要失敗。`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return d}});
2
- //# sourceMappingURL=dashboard-page-udYhnyMW.cjs.map
@@ -1,23 +0,0 @@
1
- "use client";
2
- import { createContext as e, useContext as t } from "react";
3
- import { jsx as n } from "react/jsx-runtime";
4
- //#region src/lib/router-adapter.tsx
5
- var r = e(null);
6
- function i({ value: e, children: t }) {
7
- return /* @__PURE__ */ n(r.Provider, {
8
- value: e,
9
- children: t
10
- });
11
- }
12
- function a() {
13
- let e = t(r);
14
- if (!e) throw Error("useRouterAdapter must be used inside <RouterAdapterProvider>. In Next.js, wrap your app with <NextRouterAdapterProvider> from `@rytass/bpm-core-react/pages/router-adapter`.");
15
- return e;
16
- }
17
- function o() {
18
- return typeof window > "u" ? new URLSearchParams() : new URLSearchParams(window.location.search);
19
- }
20
- //#endregion
21
- export { o as n, a as r, i as t };
22
-
23
- //# sourceMappingURL=router-adapter-BdHZXLS3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router-adapter-BdHZXLS3.js","names":[],"sources":["../../src/lib/router-adapter.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\n/**\n * Framework-agnostic router contract every BPM view consumes.\n *\n * Next.js App Router consumers wire it from `useRouter()` / `usePathname()`,\n * but the contract is intentionally generic so SPA / Remix / Tanstack Router\n * hosts can plug in the same `<RouterAdapterProvider>` with their own\n * navigation primitives.\n */\nexport interface RouterAdapter {\n /** Current pathname (e.g. \"/inbox\"). `null` during SSR before hydration. */\n readonly pathname: string | null;\n /** Navigate to `href` (push onto history). */\n push(href: string): void;\n /** Navigate to `href` and replace the current history entry. */\n replace(href: string): void;\n /** Optional: go back. Falls back to `history.back()` when omitted. */\n back?(): void;\n /**\n * Optional search params accessor. Returned `URLSearchParams` should be\n * read-only — mutating it does not navigate. Default implementation reads\n * `window.location.search` on the client.\n */\n searchParams?(): URLSearchParams;\n}\n\nconst RouterAdapterContext = createContext<RouterAdapter | null>(null);\n\nexport interface RouterAdapterProviderProps {\n readonly value: RouterAdapter;\n readonly children: ReactNode;\n}\n\n/**\n * Wraps the BPM React tree so `useRouterAdapter()` resolves to the host's\n * navigation primitives. Consumers typically put this once at the very root\n * of their layout (or inside a `'use client'` shim that reads\n * `useRouter()` + `usePathname()` from `next/navigation`).\n */\nexport function RouterAdapterProvider({\n value,\n children,\n}: RouterAdapterProviderProps): React.ReactElement {\n return (\n <RouterAdapterContext.Provider value={value}>\n {children}\n </RouterAdapterContext.Provider>\n );\n}\n\n/**\n * Reads the host-provided {@link RouterAdapter}. Throws when used outside a\n * `<RouterAdapterProvider>` to surface wiring mistakes early.\n */\nexport function useRouterAdapter(): RouterAdapter {\n const value = useContext(RouterAdapterContext);\n if (!value) {\n throw new Error(\n 'useRouterAdapter must be used inside <RouterAdapterProvider>. ' +\n 'In Next.js, wrap your app with <NextRouterAdapterProvider> from ' +\n '`@rytass/bpm-core-react/pages/router-adapter`.',\n );\n }\n return value;\n}\n\n/**\n * Pure default search-params reader for the browser. Server-side returns an\n * empty `URLSearchParams`. Used internally when a {@link RouterAdapter}\n * does not override `searchParams()`.\n */\nexport function defaultBrowserSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n"],"mappings":";;;;AA6BA,IAAM,IAAuB,EAAoC,IAAI;AAarE,SAAgB,EAAsB,EACpC,UACA,eACiD;CACjD,OACE,kBAAC,EAAqB,UAAtB;EAAsC;EACnC;CAC4B,CAAA;AAEnC;AAMA,SAAgB,IAAkC;CAChD,IAAM,IAAQ,EAAW,CAAoB;CAC7C,IAAI,CAAC,GACH,MAAU,MACR,8KAGF;CAEF,OAAO;AACT;AAOA,SAAgB,IAA8C;CAE5D,OADI,OAAO,SAAW,MAAoB,IAAI,gBAAgB,IACvD,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACnD"}
@@ -1,2 +0,0 @@
1
- "use client";let e=require("react"),t=require("react/jsx-runtime");var n=(0,e.createContext)(null);function r({value:e,children:r}){return(0,t.jsx)(n.Provider,{value:e,children:r})}function i(){let t=(0,e.useContext)(n);if(!t)throw Error("useRouterAdapter must be used inside <RouterAdapterProvider>. In Next.js, wrap your app with <NextRouterAdapterProvider> from `@rytass/bpm-core-react/pages/router-adapter`.");return t}function a(){return typeof window>`u`?new URLSearchParams:new URLSearchParams(window.location.search)}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}});
2
- //# sourceMappingURL=router-adapter-BybHrCNP.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router-adapter-BybHrCNP.cjs","names":[],"sources":["../../src/lib/router-adapter.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\n/**\n * Framework-agnostic router contract every BPM view consumes.\n *\n * Next.js App Router consumers wire it from `useRouter()` / `usePathname()`,\n * but the contract is intentionally generic so SPA / Remix / Tanstack Router\n * hosts can plug in the same `<RouterAdapterProvider>` with their own\n * navigation primitives.\n */\nexport interface RouterAdapter {\n /** Current pathname (e.g. \"/inbox\"). `null` during SSR before hydration. */\n readonly pathname: string | null;\n /** Navigate to `href` (push onto history). */\n push(href: string): void;\n /** Navigate to `href` and replace the current history entry. */\n replace(href: string): void;\n /** Optional: go back. Falls back to `history.back()` when omitted. */\n back?(): void;\n /**\n * Optional search params accessor. Returned `URLSearchParams` should be\n * read-only — mutating it does not navigate. Default implementation reads\n * `window.location.search` on the client.\n */\n searchParams?(): URLSearchParams;\n}\n\nconst RouterAdapterContext = createContext<RouterAdapter | null>(null);\n\nexport interface RouterAdapterProviderProps {\n readonly value: RouterAdapter;\n readonly children: ReactNode;\n}\n\n/**\n * Wraps the BPM React tree so `useRouterAdapter()` resolves to the host's\n * navigation primitives. Consumers typically put this once at the very root\n * of their layout (or inside a `'use client'` shim that reads\n * `useRouter()` + `usePathname()` from `next/navigation`).\n */\nexport function RouterAdapterProvider({\n value,\n children,\n}: RouterAdapterProviderProps): React.ReactElement {\n return (\n <RouterAdapterContext.Provider value={value}>\n {children}\n </RouterAdapterContext.Provider>\n );\n}\n\n/**\n * Reads the host-provided {@link RouterAdapter}. Throws when used outside a\n * `<RouterAdapterProvider>` to surface wiring mistakes early.\n */\nexport function useRouterAdapter(): RouterAdapter {\n const value = useContext(RouterAdapterContext);\n if (!value) {\n throw new Error(\n 'useRouterAdapter must be used inside <RouterAdapterProvider>. ' +\n 'In Next.js, wrap your app with <NextRouterAdapterProvider> from ' +\n '`@rytass/bpm-core-react/pages/router-adapter`.',\n );\n }\n return value;\n}\n\n/**\n * Pure default search-params reader for the browser. Server-side returns an\n * empty `URLSearchParams`. Used internally when a {@link RouterAdapter}\n * does not override `searchParams()`.\n */\nexport function defaultBrowserSearchParams(): URLSearchParams {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n}\n"],"mappings":"mEA6BA,IAAM,GAAA,EAAA,EAAA,eAA2D,IAAI,EAarE,SAAgB,EAAsB,CACpC,QACA,YACiD,CACjD,OACE,EAAA,EAAA,KAAC,EAAqB,SAAtB,CAAsC,QACnC,UAC4B,CAAA,CAEnC,CAMA,SAAgB,GAAkC,CAChD,IAAM,GAAA,EAAA,EAAA,YAAmB,CAAoB,EAC7C,GAAI,CAAC,EACH,MAAU,MACR,8KAGF,EAEF,OAAO,CACT,CAOA,SAAgB,GAA8C,CAE5D,OADI,OAAO,OAAW,IAAoB,IAAI,gBACvC,IAAI,gBAAgB,OAAO,SAAS,MAAM,CACnD"}
@@ -1,8 +0,0 @@
1
- import '../templates.css';var e = {
2
- templateFilterArea: "bpm_templateFilterArea_nUL-R",
3
- templateModalFields: "bpm_templateModalFields_hUxWp"
4
- };
5
- //#endregion
6
- export { e as t };
7
-
8
- //# sourceMappingURL=templates.module-B5bg_goX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates.module-B5bg_goX.js","names":[],"sources":["../../src/views/templates/templates.module.scss"],"sourcesContent":[".templateFilterArea {\n :global(.mzn-filter-area__actions) {\n display: none;\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\n.templateModalFields {\n display: grid;\n gap: 16px;\n}\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- require('../templates.css');var e={templateFilterArea:`bpm_templateFilterArea_nUL-R`,templateModalFields:`bpm_templateModalFields_hUxWp`};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return e}});
2
- //# sourceMappingURL=templates.module-ClRnQQX4.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates.module-ClRnQQX4.cjs","names":[],"sources":["../../src/views/templates/templates.module.scss"],"sourcesContent":[".templateFilterArea {\n :global(.mzn-filter-area__actions) {\n display: none;\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\n.templateModalFields {\n display: grid;\n gap: 16px;\n}\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/router-adapter-BybHrCNP.cjs"),t=require("../../../chunks/AdminDelegationsView-CqNmlVWx.cjs");let n=require("react"),r=require("react/jsx-runtime"),i=require("next/navigation");function a(a={}){let o=(0,i.useRouter)(),s=(0,i.usePathname)(),c=(0,i.useSearchParams)();return(0,r.jsx)(e.t,{value:(0,n.useMemo)(()=>({pathname:s,push:e=>o.push(e),replace:e=>o.replace(e),back:()=>o.back(),searchParams:()=>new URLSearchParams(c?.toString()??``)}),[o,s,c]),children:(0,r.jsx)(t.t,{...a})})}exports.default=a;
2
- //# sourceMappingURL=AdminDelegationsClientView.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminDelegationsClientView.cjs","names":[],"sources":["../../../../src/pages/admin/delegations/AdminDelegationsClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminDelegationsView,\n type AdminDelegationsViewProps,\n} from '../../../views/admin/delegations/AdminDelegationsView';\n\nexport default function AdminDelegationsClientView(\n props: AdminDelegationsViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminDelegationsView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":"6TAaA,SAAwB,EACtB,EAAmC,CAAC,EACtB,CACd,IAAM,GAAA,EAAA,EAAA,WAAuB,EACvB,GAAA,EAAA,EAAA,aAAuB,EACvB,GAAA,EAAA,EAAA,iBAA+B,EAcrC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAuB,OAAA,EAAA,EAAA,cAZhB,CACL,WACA,KAAO,GAAuB,EAAW,KAAK,CAAI,EAClD,QAAU,GAAuB,EAAW,QAAQ,CAAI,EACxD,SAAkB,EAAW,KAAK,EAClC,iBACE,IAAI,gBAAgB,GAAc,SAAS,GAAK,EAAE,CACtD,GACA,CAAC,EAAY,EAAU,CAAY,CAIL,YAC5B,EAAA,EAAA,KAAC,EAAA,EAAD,CAAsB,GAAI,CAAQ,CAAA,CACb,CAAA,CAE3B"}
@@ -1,3 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { AdminDelegationsViewProps } from '../../../views/admin/delegations/AdminDelegationsView';
3
- export default function AdminDelegationsClientView(props?: AdminDelegationsViewProps): ReactElement;
@@ -1,28 +0,0 @@
1
- "use client";
2
- import { t as e } from "../../../chunks/router-adapter-BdHZXLS3.js";
3
- import { t } from "../../../chunks/AdminDelegationsView-DydMZ9ED.js";
4
- import { useMemo as n } from "react";
5
- import { jsx as r } from "react/jsx-runtime";
6
- import { usePathname as i, useRouter as a, useSearchParams as o } from "next/navigation";
7
- //#region src/pages/admin/delegations/AdminDelegationsClientView.tsx
8
- function s(s = {}) {
9
- let c = a(), l = i(), u = o();
10
- return /* @__PURE__ */ r(e, {
11
- value: n(() => ({
12
- pathname: l,
13
- push: (e) => c.push(e),
14
- replace: (e) => c.replace(e),
15
- back: () => c.back(),
16
- searchParams: () => new URLSearchParams(u?.toString() ?? "")
17
- }), [
18
- c,
19
- l,
20
- u
21
- ]),
22
- children: /* @__PURE__ */ r(t, { ...s })
23
- });
24
- }
25
- //#endregion
26
- export { s as default };
27
-
28
- //# sourceMappingURL=AdminDelegationsClientView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminDelegationsClientView.js","names":[],"sources":["../../../../src/pages/admin/delegations/AdminDelegationsClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminDelegationsView,\n type AdminDelegationsViewProps,\n} from '../../../views/admin/delegations/AdminDelegationsView';\n\nexport default function AdminDelegationsClientView(\n props: AdminDelegationsViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminDelegationsView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAwB,EACtB,IAAmC,CAAC,GACtB;CACd,IAAM,IAAa,EAAU,GACvB,IAAW,EAAY,GACvB,IAAe,EAAgB;CAcrC,OACE,kBAAC,GAAD;EAAuB,OAbT,SACP;GACL;GACA,OAAO,MAAuB,EAAW,KAAK,CAAI;GAClD,UAAU,MAAuB,EAAW,QAAQ,CAAI;GACxD,YAAkB,EAAW,KAAK;GAClC,oBACE,IAAI,gBAAgB,GAAc,SAAS,KAAK,EAAE;EACtD,IACA;GAAC;GAAY;GAAU;EAAY,CAIL;YAC5B,kBAAC,GAAD,EAAsB,GAAI,EAAQ,CAAA;CACb,CAAA;AAE3B"}
@@ -1,2 +0,0 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/router-adapter-BybHrCNP.cjs"),t=require("../../../chunks/AdminOrgsView-bSsIyMvk.cjs");let n=require("react"),r=require("react/jsx-runtime"),i=require("next/navigation");function a(a={}){let o=(0,i.useRouter)(),s=(0,i.usePathname)(),c=(0,i.useSearchParams)();return(0,r.jsx)(e.t,{value:(0,n.useMemo)(()=>({pathname:s,push:e=>o.push(e),replace:e=>o.replace(e),back:()=>o.back(),searchParams:()=>new URLSearchParams(c?.toString()??``)}),[o,s,c]),children:(0,r.jsx)(t.t,{...a})})}exports.default=a;
2
- //# sourceMappingURL=AdminOrgsClientView.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminOrgsClientView.cjs","names":[],"sources":["../../../../src/pages/admin/orgs/AdminOrgsClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminOrgsView,\n type AdminOrgsViewProps,\n} from '../../../views/admin/orgs/AdminOrgsView';\n\nexport default function AdminOrgsClientView(\n props: AdminOrgsViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminOrgsView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":"sTAaA,SAAwB,EACtB,EAA4B,CAAC,EACf,CACd,IAAM,GAAA,EAAA,EAAA,WAAuB,EACvB,GAAA,EAAA,EAAA,aAAuB,EACvB,GAAA,EAAA,EAAA,iBAA+B,EAcrC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAuB,OAAA,EAAA,EAAA,cAZhB,CACL,WACA,KAAO,GAAuB,EAAW,KAAK,CAAI,EAClD,QAAU,GAAuB,EAAW,QAAQ,CAAI,EACxD,SAAkB,EAAW,KAAK,EAClC,iBACE,IAAI,gBAAgB,GAAc,SAAS,GAAK,EAAE,CACtD,GACA,CAAC,EAAY,EAAU,CAAY,CAIL,YAC5B,EAAA,EAAA,KAAC,EAAA,EAAD,CAAe,GAAI,CAAQ,CAAA,CACN,CAAA,CAE3B"}
@@ -1,3 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { AdminOrgsViewProps } from '../../../views/admin/orgs/AdminOrgsView';
3
- export default function AdminOrgsClientView(props?: AdminOrgsViewProps): ReactElement;
@@ -1,28 +0,0 @@
1
- "use client";
2
- import { t as e } from "../../../chunks/router-adapter-BdHZXLS3.js";
3
- import { t } from "../../../chunks/AdminOrgsView-DZaVAbaQ.js";
4
- import { useMemo as n } from "react";
5
- import { jsx as r } from "react/jsx-runtime";
6
- import { usePathname as i, useRouter as a, useSearchParams as o } from "next/navigation";
7
- //#region src/pages/admin/orgs/AdminOrgsClientView.tsx
8
- function s(s = {}) {
9
- let c = a(), l = i(), u = o();
10
- return /* @__PURE__ */ r(e, {
11
- value: n(() => ({
12
- pathname: l,
13
- push: (e) => c.push(e),
14
- replace: (e) => c.replace(e),
15
- back: () => c.back(),
16
- searchParams: () => new URLSearchParams(u?.toString() ?? "")
17
- }), [
18
- c,
19
- l,
20
- u
21
- ]),
22
- children: /* @__PURE__ */ r(t, { ...s })
23
- });
24
- }
25
- //#endregion
26
- export { s as default };
27
-
28
- //# sourceMappingURL=AdminOrgsClientView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminOrgsClientView.js","names":[],"sources":["../../../../src/pages/admin/orgs/AdminOrgsClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminOrgsView,\n type AdminOrgsViewProps,\n} from '../../../views/admin/orgs/AdminOrgsView';\n\nexport default function AdminOrgsClientView(\n props: AdminOrgsViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminOrgsView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAwB,EACtB,IAA4B,CAAC,GACf;CACd,IAAM,IAAa,EAAU,GACvB,IAAW,EAAY,GACvB,IAAe,EAAgB;CAcrC,OACE,kBAAC,GAAD;EAAuB,OAbT,SACP;GACL;GACA,OAAO,MAAuB,EAAW,KAAK,CAAI;GAClD,UAAU,MAAuB,EAAW,QAAQ,CAAI;GACxD,YAAkB,EAAW,KAAK;GAClC,oBACE,IAAI,gBAAgB,GAAc,SAAS,KAAK,EAAE;EACtD,IACA;GAAC;GAAY;GAAU;EAAY,CAIL;YAC5B,kBAAC,GAAD,EAAe,GAAI,EAAQ,CAAA;CACN,CAAA;AAE3B"}
@@ -1,2 +0,0 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/router-adapter-BybHrCNP.cjs"),t=require("../../../chunks/AdminUsersView-DlArLlIr.cjs");let n=require("react"),r=require("react/jsx-runtime"),i=require("next/navigation");function a(a={}){let o=(0,i.useRouter)(),s=(0,i.usePathname)(),c=(0,i.useSearchParams)();return(0,r.jsx)(e.t,{value:(0,n.useMemo)(()=>({pathname:s,push:e=>o.push(e),replace:e=>o.replace(e),back:()=>o.back(),searchParams:()=>new URLSearchParams(c?.toString()??``)}),[o,s,c]),children:(0,r.jsx)(t.t,{...a})})}exports.default=a;
2
- //# sourceMappingURL=AdminUsersClientView.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminUsersClientView.cjs","names":[],"sources":["../../../../src/pages/admin/users/AdminUsersClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminUsersView,\n type AdminUsersViewProps,\n} from '../../../views/admin/users/AdminUsersView';\n\nexport default function AdminUsersClientView(\n props: AdminUsersViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminUsersView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":"uTAaA,SAAwB,EACtB,EAA6B,CAAC,EAChB,CACd,IAAM,GAAA,EAAA,EAAA,WAAuB,EACvB,GAAA,EAAA,EAAA,aAAuB,EACvB,GAAA,EAAA,EAAA,iBAA+B,EAcrC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAuB,OAAA,EAAA,EAAA,cAZhB,CACL,WACA,KAAO,GAAuB,EAAW,KAAK,CAAI,EAClD,QAAU,GAAuB,EAAW,QAAQ,CAAI,EACxD,SAAkB,EAAW,KAAK,EAClC,iBACE,IAAI,gBAAgB,GAAc,SAAS,GAAK,EAAE,CACtD,GACA,CAAC,EAAY,EAAU,CAAY,CAIL,YAC5B,EAAA,EAAA,KAAC,EAAA,EAAD,CAAgB,GAAI,CAAQ,CAAA,CACP,CAAA,CAE3B"}
@@ -1,3 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { AdminUsersViewProps } from '../../../views/admin/users/AdminUsersView';
3
- export default function AdminUsersClientView(props?: AdminUsersViewProps): ReactElement;
@@ -1,28 +0,0 @@
1
- "use client";
2
- import { t as e } from "../../../chunks/router-adapter-BdHZXLS3.js";
3
- import { t } from "../../../chunks/AdminUsersView-C0oO05Br.js";
4
- import { useMemo as n } from "react";
5
- import { jsx as r } from "react/jsx-runtime";
6
- import { usePathname as i, useRouter as a, useSearchParams as o } from "next/navigation";
7
- //#region src/pages/admin/users/AdminUsersClientView.tsx
8
- function s(s = {}) {
9
- let c = a(), l = i(), u = o();
10
- return /* @__PURE__ */ r(e, {
11
- value: n(() => ({
12
- pathname: l,
13
- push: (e) => c.push(e),
14
- replace: (e) => c.replace(e),
15
- back: () => c.back(),
16
- searchParams: () => new URLSearchParams(u?.toString() ?? "")
17
- }), [
18
- c,
19
- l,
20
- u
21
- ]),
22
- children: /* @__PURE__ */ r(t, { ...s })
23
- });
24
- }
25
- //#endregion
26
- export { s as default };
27
-
28
- //# sourceMappingURL=AdminUsersClientView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminUsersClientView.js","names":[],"sources":["../../../../src/pages/admin/users/AdminUsersClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../../lib/router-adapter';\nimport {\n AdminUsersView,\n type AdminUsersViewProps,\n} from '../../../views/admin/users/AdminUsersView';\n\nexport default function AdminUsersClientView(\n props: AdminUsersViewProps = {},\n): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <AdminUsersView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAwB,EACtB,IAA6B,CAAC,GAChB;CACd,IAAM,IAAa,EAAU,GACvB,IAAW,EAAY,GACvB,IAAe,EAAgB;CAcrC,OACE,kBAAC,GAAD;EAAuB,OAbT,SACP;GACL;GACA,OAAO,MAAuB,EAAW,KAAK,CAAI;GAClD,UAAU,MAAuB,EAAW,QAAQ,CAAI;GACxD,YAAkB,EAAW,KAAK;GAClC,oBACE,IAAI,gBAAgB,GAAc,SAAS,KAAK,EAAE;EACtD,IACA;GAAC;GAAY;GAAU;EAAY,CAIL;YAC5B,kBAAC,GAAD,EAAgB,GAAI,EAAQ,CAAA;CACP,CAAA;AAE3B"}
@@ -1,2 +0,0 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../chunks/router-adapter-BybHrCNP.cjs"),t=require("../../chunks/CcView-BsVsya5F.cjs");let n=require("react"),r=require("react/jsx-runtime"),i=require("next/navigation");function a(a={}){let o=(0,i.useRouter)(),s=(0,i.usePathname)(),c=(0,i.useSearchParams)();return(0,r.jsx)(e.t,{value:(0,n.useMemo)(()=>({pathname:s,push:e=>o.push(e),replace:e=>o.replace(e),back:()=>o.back(),searchParams:()=>new URLSearchParams(c?.toString()??``)}),[o,s,c]),children:(0,r.jsx)(t.t,{...a})})}exports.default=a;
2
- //# sourceMappingURL=CcClientView.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CcClientView.cjs","names":[],"sources":["../../../src/pages/cc/CcClientView.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, type ReactElement } from 'react';\nimport { usePathname, useRouter, useSearchParams } from 'next/navigation';\nimport {\n RouterAdapterProvider,\n type RouterAdapter,\n} from '../../lib/router-adapter';\nimport { CcView, type CcViewProps } from '../../views/cc/CcView';\n\n/**\n * Next.js App Router client shim for `<CcView />`. Wires\n * `next/navigation` hooks to the framework-agnostic {@link RouterAdapter}.\n */\nexport default function CcClientView(props: CcViewProps = {}): ReactElement {\n const nextRouter = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const adapter = useMemo<RouterAdapter>(\n () => ({\n pathname,\n push: (href: string): void => nextRouter.push(href),\n replace: (href: string): void => nextRouter.replace(href),\n back: (): void => nextRouter.back(),\n searchParams: (): URLSearchParams =>\n new URLSearchParams(searchParams?.toString() ?? ''),\n }),\n [nextRouter, pathname, searchParams],\n );\n\n return (\n <RouterAdapterProvider value={adapter}>\n <CcView {...props} />\n </RouterAdapterProvider>\n );\n}\n"],"mappings":"ySAcA,SAAwB,EAAa,EAAqB,CAAC,EAAiB,CAC1E,IAAM,GAAA,EAAA,EAAA,WAAuB,EACvB,GAAA,EAAA,EAAA,aAAuB,EACvB,GAAA,EAAA,EAAA,iBAA+B,EAcrC,OACE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAuB,OAAA,EAAA,EAAA,cAZhB,CACL,WACA,KAAO,GAAuB,EAAW,KAAK,CAAI,EAClD,QAAU,GAAuB,EAAW,QAAQ,CAAI,EACxD,SAAkB,EAAW,KAAK,EAClC,iBACE,IAAI,gBAAgB,GAAc,SAAS,GAAK,EAAE,CACtD,GACA,CAAC,EAAY,EAAU,CAAY,CAIL,YAC5B,EAAA,EAAA,KAAC,EAAA,EAAD,CAAQ,GAAI,CAAQ,CAAA,CACC,CAAA,CAE3B"}
@@ -1,7 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { CcViewProps } from '../../views/cc/CcView';
3
- /**
4
- * Next.js App Router client shim for `<CcView />`. Wires
5
- * `next/navigation` hooks to the framework-agnostic {@link RouterAdapter}.
6
- */
7
- export default function CcClientView(props?: CcViewProps): ReactElement;