@alepha/ui 0.17.2 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/admin/{AdminApiKeys-CF_qOO3u.js → AdminApiKeys-C-6_Q-lH.js} +56 -192
  2. package/dist/admin/AdminApiKeys-C-6_Q-lH.js.map +1 -0
  3. package/dist/admin/{AdminAudits-BQno3hZG.js → AdminAudits-Bgbf04hO.js} +25 -61
  4. package/dist/admin/AdminAudits-Bgbf04hO.js.map +1 -0
  5. package/dist/admin/{AdminFiles-kvuUaASF.js → AdminFiles-B9a7G3cY.js} +6 -8
  6. package/dist/admin/AdminFiles-B9a7G3cY.js.map +1 -0
  7. package/dist/admin/{AdminJobDashboard-CrPxp0W1.js → AdminJobDashboard-DaTwf5OY.js} +55 -186
  8. package/dist/admin/AdminJobDashboard-DaTwf5OY.js.map +1 -0
  9. package/dist/admin/{AdminJobExecutions-D-b4Zt7W.js → AdminJobExecutions-B9cek5dl.js} +132 -168
  10. package/dist/admin/AdminJobExecutions-B9cek5dl.js.map +1 -0
  11. package/dist/admin/{AdminJobRegistry-CNX5cpDx.js → AdminJobRegistry-DFgV3oqx.js} +60 -83
  12. package/dist/admin/AdminJobRegistry-DFgV3oqx.js.map +1 -0
  13. package/dist/admin/AdminLayout-DHsvWxVB.js +70 -0
  14. package/dist/admin/AdminLayout-DHsvWxVB.js.map +1 -0
  15. package/dist/admin/{AdminParameters-DCGbpt2c.js → AdminParameters-DHw9ATgl.js} +53 -53
  16. package/dist/admin/AdminParameters-DHw9ATgl.js.map +1 -0
  17. package/dist/admin/{AdminSessions-DyhW6RZv.js → AdminSessions-BhGJPI3z.js} +11 -18
  18. package/dist/admin/AdminSessions-BhGJPI3z.js.map +1 -0
  19. package/dist/admin/{AdminUserLayout-CrBj4UuI.js → AdminUserLayout-BdC4Te8m.js} +112 -151
  20. package/dist/admin/AdminUserLayout-BdC4Te8m.js.map +1 -0
  21. package/dist/admin/AdminUserProfile-DAt23fqY.js +69 -0
  22. package/dist/admin/AdminUserProfile-DAt23fqY.js.map +1 -0
  23. package/dist/admin/AdminUserSessions-1uzcx02z.js +109 -0
  24. package/dist/admin/AdminUserSessions-1uzcx02z.js.map +1 -0
  25. package/dist/admin/AdminUsers-C85c3eiQ.js +121 -0
  26. package/dist/admin/AdminUsers-C85c3eiQ.js.map +1 -0
  27. package/dist/{auth/AuthLayout-CdJcrPs4.js → admin/AuthLayout-DFJvCvzw.js} +3 -3
  28. package/dist/{auth/AuthLayout-CdJcrPs4.js.map → admin/AuthLayout-DFJvCvzw.js.map} +1 -1
  29. package/dist/{auth/IconGoogle-Bm18QD2q.js → admin/IconGoogle-CSQLPYwX.js} +1 -1
  30. package/dist/{auth/IconGoogle-Bm18QD2q.js.map → admin/IconGoogle-CSQLPYwX.js.map} +1 -1
  31. package/dist/{demo/DemoLogin-DjJ9314c.js → admin/Login-BGheURrg.js} +15 -129
  32. package/dist/{auth/Login-BS_FYTy0.js.map → admin/Login-BGheURrg.js.map} +1 -1
  33. package/dist/{auth/Profile-CjDsW378.js → admin/Profile-B-c9pCPf.js} +5 -5
  34. package/dist/{auth/Profile-CjDsW378.js.map → admin/Profile-B-c9pCPf.js.map} +1 -1
  35. package/dist/{demo/DemoRegister-DzkJ5M83.js → admin/Register-Cs10l8vX.js} +20 -146
  36. package/dist/{auth/Register-C5eqzAaD.js.map → admin/Register-Cs10l8vX.js.map} +1 -1
  37. package/dist/{demo/DemoResetPassword-DWh4_BpQ.js → admin/ResetPassword-BwDdfkGH.js} +20 -82
  38. package/dist/{auth/ResetPassword-XifinVao.js.map → admin/ResetPassword-BwDdfkGH.js.map} +1 -1
  39. package/dist/{demo/DemoVerifyEmail-DbU_tCj8.js → admin/VerifyEmail-DfXHAiQl.js} +15 -32
  40. package/dist/{auth/VerifyEmail-DTgbeJOO.js.map → admin/VerifyEmail-DfXHAiQl.js.map} +1 -1
  41. package/dist/admin/auth-Dr0Cf8I7.js +319 -0
  42. package/dist/admin/auth-Dr0Cf8I7.js.map +1 -0
  43. package/dist/admin/core-2xoLiT0o.js +4031 -0
  44. package/dist/admin/core-2xoLiT0o.js.map +1 -0
  45. package/dist/admin/index.d.ts +739 -13
  46. package/dist/admin/index.d.ts.map +1 -1
  47. package/dist/admin/index.js +79 -111
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/admin/rolldown-runtime-CjeV3_4I.js +18 -0
  50. package/dist/auth/AuthLayout-CAE1pX9s.js +22 -0
  51. package/dist/auth/AuthLayout-CAE1pX9s.js.map +1 -0
  52. package/dist/auth/{Login-BS_FYTy0.js → Login-Denw_UGy.js} +8 -8
  53. package/dist/auth/Login-Denw_UGy.js.map +1 -0
  54. package/dist/auth/Profile-BMX_Ar_s.js +155 -0
  55. package/dist/auth/Profile-BMX_Ar_s.js.map +1 -0
  56. package/dist/auth/{Register-C5eqzAaD.js → Register-6hi_cpfF.js} +8 -8
  57. package/dist/auth/Register-6hi_cpfF.js.map +1 -0
  58. package/dist/auth/{ResetPassword-XifinVao.js → ResetPassword-CqfTk1FI.js} +6 -6
  59. package/dist/auth/ResetPassword-CqfTk1FI.js.map +1 -0
  60. package/dist/auth/{VerifyEmail-DTgbeJOO.js → VerifyEmail-nWiSTMjF.js} +5 -5
  61. package/dist/auth/VerifyEmail-nWiSTMjF.js.map +1 -0
  62. package/dist/auth/core-niW0sFLv.js +2264 -0
  63. package/dist/auth/core-niW0sFLv.js.map +1 -0
  64. package/dist/auth/index.d.ts +336 -8
  65. package/dist/auth/index.d.ts.map +1 -1
  66. package/dist/auth/index.js +18 -22
  67. package/dist/auth/index.js.map +1 -1
  68. package/dist/core/index.d.ts +1033 -843
  69. package/dist/core/index.d.ts.map +1 -1
  70. package/dist/core/index.js +1626 -1354
  71. package/dist/core/index.js.map +1 -1
  72. package/dist/demo/AuthLayout-jLa0aKsI.js +22 -0
  73. package/dist/demo/AuthLayout-jLa0aKsI.js.map +1 -0
  74. package/dist/demo/DemoButton-BmaWZVwf.js +178 -0
  75. package/dist/demo/DemoButton-BmaWZVwf.js.map +1 -0
  76. package/dist/demo/{DemoDataTable-lnBKWBf8.js → DemoDataTable-Z9xyV221.js} +18 -18
  77. package/dist/demo/DemoDataTable-Z9xyV221.js.map +1 -0
  78. package/dist/demo/DemoDialog-4ItHLf9t.js +101 -0
  79. package/dist/demo/DemoDialog-4ItHLf9t.js.map +1 -0
  80. package/dist/demo/DemoFlex-EtVq8QfX.js +105 -0
  81. package/dist/demo/DemoFlex-EtVq8QfX.js.map +1 -0
  82. package/dist/demo/DemoHeading-BS-vGfkI.js +18 -0
  83. package/dist/demo/DemoHeading-BS-vGfkI.js.map +1 -0
  84. package/dist/demo/{DemoHome-CUMZsYaH.js → DemoHome-Clbn8AmS.js} +9 -12
  85. package/dist/demo/DemoHome-Clbn8AmS.js.map +1 -0
  86. package/dist/demo/DemoJsonViewer-DkIX_ky2.js +109 -0
  87. package/dist/demo/DemoJsonViewer-DkIX_ky2.js.map +1 -0
  88. package/dist/demo/DemoLayout-C56xb5EE.js +73 -0
  89. package/dist/demo/DemoLayout-C56xb5EE.js.map +1 -0
  90. package/dist/demo/DemoLogin-BZwpicOS.js +128 -0
  91. package/dist/demo/DemoLogin-BZwpicOS.js.map +1 -0
  92. package/dist/demo/DemoRegister-C7_qc4MJ.js +140 -0
  93. package/dist/demo/DemoRegister-C7_qc4MJ.js.map +1 -0
  94. package/dist/demo/DemoResetPassword-BI1Ct4Dw.js +76 -0
  95. package/dist/demo/DemoResetPassword-BI1Ct4Dw.js.map +1 -0
  96. package/dist/demo/{DemoSidebar-C1csnGhX.js → DemoSidebar-CcBo4ltC.js} +6 -9
  97. package/dist/demo/DemoSidebar-CcBo4ltC.js.map +1 -0
  98. package/dist/demo/DemoText-CzXuUn3g.js +124 -0
  99. package/dist/demo/DemoText-CzXuUn3g.js.map +1 -0
  100. package/dist/demo/DemoToast-BgHDhWrX.js +95 -0
  101. package/dist/demo/DemoToast-BgHDhWrX.js.map +1 -0
  102. package/dist/demo/{DemoTypeForm-CWz6fJrJ.js → DemoTypeForm-DDzWoMSV.js} +4 -4
  103. package/dist/demo/{DemoTypeForm-CWz6fJrJ.js.map → DemoTypeForm-DDzWoMSV.js.map} +1 -1
  104. package/dist/demo/DemoVerifyEmail-C_Irdnov.js +30 -0
  105. package/dist/demo/DemoVerifyEmail-C_Irdnov.js.map +1 -0
  106. package/dist/demo/IconGoogle-CSQLPYwX.js +56 -0
  107. package/dist/demo/IconGoogle-CSQLPYwX.js.map +1 -0
  108. package/dist/demo/Login-hSOU3jZc.js +219 -0
  109. package/dist/demo/Login-hSOU3jZc.js.map +1 -0
  110. package/dist/demo/Profile-CWqti7FB.js +155 -0
  111. package/dist/demo/Profile-CWqti7FB.js.map +1 -0
  112. package/dist/demo/Register-a70LPgs2.js +375 -0
  113. package/dist/demo/Register-a70LPgs2.js.map +1 -0
  114. package/dist/demo/ResetPassword-DWN0lzr5.js +286 -0
  115. package/dist/demo/ResetPassword-DWN0lzr5.js.map +1 -0
  116. package/dist/demo/Showcase-Dq3MISpd.js +232 -0
  117. package/dist/demo/Showcase-Dq3MISpd.js.map +1 -0
  118. package/dist/demo/VerifyEmail-DZWL72K4.js +135 -0
  119. package/dist/demo/VerifyEmail-DZWL72K4.js.map +1 -0
  120. package/dist/demo/auth-d6n3xbug.js +257 -0
  121. package/dist/demo/auth-d6n3xbug.js.map +1 -0
  122. package/dist/demo/core-RCUw1Q-a.js +4217 -0
  123. package/dist/demo/core-RCUw1Q-a.js.map +1 -0
  124. package/dist/demo/index.d.ts +17 -6
  125. package/dist/demo/index.d.ts.map +1 -1
  126. package/dist/demo/index.js +92 -24
  127. package/dist/demo/index.js.map +1 -1
  128. package/dist/demo/rolldown-runtime-CjeV3_4I.js +18 -0
  129. package/package.json +16 -20
  130. package/src/admin/AdminRouter.ts +10 -39
  131. package/src/admin/components/AdminLayout.tsx +42 -10
  132. package/src/admin/components/audits/AdminAudits.tsx +10 -64
  133. package/src/admin/components/files/AdminFiles.tsx +2 -3
  134. package/src/admin/components/jobs/AdminJobDashboard.tsx +36 -142
  135. package/src/admin/components/jobs/AdminJobExecutions.tsx +117 -175
  136. package/src/admin/components/jobs/AdminJobRegistry.tsx +58 -73
  137. package/src/admin/components/keys/AdminApiKeys.tsx +21 -169
  138. package/src/admin/components/parameters/AdminParameters.tsx +4 -4
  139. package/src/admin/components/parameters/ParameterEmptyState.tsx +1 -2
  140. package/src/admin/components/parameters/ParameterHistory.tsx +3 -3
  141. package/src/admin/components/parameters/ParameterTree.tsx +2 -8
  142. package/src/admin/components/parameters/types.ts +3 -3
  143. package/src/admin/components/sessions/AdminSessions.tsx +8 -16
  144. package/src/admin/components/users/AdminUserLayout.tsx +113 -150
  145. package/src/admin/components/users/AdminUserProfile.tsx +50 -0
  146. package/src/admin/components/users/AdminUserSessions.tsx +106 -126
  147. package/src/admin/components/users/AdminUsers.tsx +46 -62
  148. package/src/admin/index.ts +0 -4
  149. package/src/auth/components/buttons/UserButton.tsx +1 -1
  150. package/src/auth/index.ts +0 -4
  151. package/src/core/UiRouter.ts +1 -1
  152. package/src/core/atoms/alephaSidebarAtom.ts +7 -31
  153. package/src/core/components/{layout/AlephaMantineProvider.tsx → AlephaMantineProvider.tsx} +3 -4
  154. package/src/core/components/Flex.tsx +63 -0
  155. package/src/core/components/Heading.tsx +19 -0
  156. package/src/core/components/Text.tsx +140 -0
  157. package/src/core/components/buttons/ActionButton.tsx +12 -1
  158. package/src/core/components/buttons/BurgerButton.tsx +3 -3
  159. package/src/core/components/buttons/LanguageButton.tsx +1 -1
  160. package/src/core/components/buttons/ToggleSidebarButton.tsx +1 -4
  161. package/src/core/components/data/DetailDrawer.tsx +144 -0
  162. package/src/core/components/data/DetailList.tsx +64 -0
  163. package/src/core/components/data/StatCards.tsx +50 -0
  164. package/src/core/components/layout/AppBar.tsx +11 -10
  165. package/src/core/components/layout/Breadcrumb.tsx +8 -8
  166. package/src/core/components/layout/Container.tsx +15 -0
  167. package/src/core/components/layout/DashboardShell.tsx +23 -238
  168. package/src/core/components/layout/Omnibar.tsx +1 -2
  169. package/src/core/components/layout/Sidebar.tsx +103 -71
  170. package/src/core/components/layout/index.ts +65 -0
  171. package/src/core/{components/form → form/components}/Control.tsx +32 -14
  172. package/src/core/{components/form → form/components}/ControlArray.tsx +2 -5
  173. package/src/core/{components/form → form/components}/ControlDate.tsx +1 -4
  174. package/src/core/{components/form → form/components}/ControlNumber.tsx +1 -4
  175. package/src/core/{components/form → form/components}/ControlObject.tsx +1 -4
  176. package/src/core/{components/form → form/components}/ControlQueryBuilder.tsx +7 -7
  177. package/src/core/{components/form → form/components}/ControlSelect.tsx +2 -4
  178. package/src/core/{components/form → form/components}/TypeForm.browser.spec.tsx +22 -64
  179. package/src/core/{components/form → form/components}/TypeForm.tsx +1 -3
  180. package/src/core/form/factories/dialogForm.tsx +31 -0
  181. package/src/core/form/index.ts +23 -0
  182. package/src/core/{utils → form/utils}/parseInput.ts +2 -4
  183. package/src/core/index.ts +43 -51
  184. package/src/core/interfaces/AlephaIntent.ts +6 -0
  185. package/src/core/interfaces/AlephaTheme.ts +0 -1
  186. package/src/core/json/factories/dialogJson.tsx +24 -0
  187. package/src/core/json/index.ts +2 -0
  188. package/src/core/primitives/$ui.ts +17 -0
  189. package/src/core/services/DialogService.tsx +1 -48
  190. package/src/core/styles.css +1 -8
  191. package/src/core/{components/table → table/components}/ColumnPicker.tsx +2 -3
  192. package/src/core/{components/table → table/components}/DataTable.tsx +8 -9
  193. package/src/core/{components/table → table/components}/DataTableFilters.tsx +6 -3
  194. package/src/core/{components/table → table/components}/DataTableToolbar.tsx +4 -5
  195. package/src/core/{components/table → table/components}/FilterPicker.tsx +2 -3
  196. package/src/core/table/index.ts +12 -0
  197. package/src/core/{components/table → table/interfaces}/types.ts +2 -2
  198. package/src/demo/DemoRouter.ts +87 -6
  199. package/src/demo/components/DemoHome.tsx +6 -10
  200. package/src/demo/components/DemoLayout.tsx +38 -8
  201. package/src/demo/components/auth/DemoLogin.tsx +1 -1
  202. package/src/demo/components/auth/DemoRegister.tsx +1 -1
  203. package/src/demo/components/auth/DemoResetPassword.tsx +1 -1
  204. package/src/demo/components/auth/DemoVerifyEmail.tsx +1 -1
  205. package/src/demo/components/core/DemoButton.tsx +160 -0
  206. package/src/demo/components/core/DemoFlex.tsx +101 -0
  207. package/src/demo/components/core/DemoHeading.tsx +13 -0
  208. package/src/demo/components/core/DemoText.tsx +110 -0
  209. package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
  210. package/src/demo/components/layout/DemoDialog.tsx +103 -0
  211. package/src/demo/components/{core → layout}/DemoSidebar.tsx +0 -1
  212. package/src/demo/components/layout/DemoToast.tsx +96 -0
  213. package/src/demo/components/shared/MacWindow.tsx +149 -74
  214. package/src/demo/components/shared/Showcase.tsx +4 -8
  215. package/src/demo/index.ts +1 -4
  216. package/src/demo/primitives/$uiDemo.ts +10 -0
  217. package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +0 -1
  218. package/dist/admin/AdminAudits-BQno3hZG.js.map +0 -1
  219. package/dist/admin/AdminFiles-kvuUaASF.js.map +0 -1
  220. package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +0 -1
  221. package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +0 -1
  222. package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +0 -1
  223. package/dist/admin/AdminLayout-e-ZP5nWw.js +0 -37
  224. package/dist/admin/AdminLayout-e-ZP5nWw.js.map +0 -1
  225. package/dist/admin/AdminParameters-DCGbpt2c.js.map +0 -1
  226. package/dist/admin/AdminSessions-DyhW6RZv.js.map +0 -1
  227. package/dist/admin/AdminUserAudits-D1GcREEE.js +0 -177
  228. package/dist/admin/AdminUserAudits-D1GcREEE.js.map +0 -1
  229. package/dist/admin/AdminUserCreate-DR8LA0tv.js +0 -104
  230. package/dist/admin/AdminUserCreate-DR8LA0tv.js.map +0 -1
  231. package/dist/admin/AdminUserDetails-CDkZNHQD.js +0 -477
  232. package/dist/admin/AdminUserDetails-CDkZNHQD.js.map +0 -1
  233. package/dist/admin/AdminUserLayout-CrBj4UuI.js.map +0 -1
  234. package/dist/admin/AdminUserSessions-srgFHrqy.js +0 -129
  235. package/dist/admin/AdminUserSessions-srgFHrqy.js.map +0 -1
  236. package/dist/admin/AdminUserSettings-BFuxl-xT.js +0 -167
  237. package/dist/admin/AdminUserSettings-BFuxl-xT.js.map +0 -1
  238. package/dist/admin/AdminUsers-D1pDpiwK.js +0 -118
  239. package/dist/admin/AdminUsers-D1pDpiwK.js.map +0 -1
  240. package/dist/demo/DemoDataTable-lnBKWBf8.js.map +0 -1
  241. package/dist/demo/DemoHome-CUMZsYaH.js.map +0 -1
  242. package/dist/demo/DemoJsonViewer-_uokbGaW.js +0 -429
  243. package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +0 -1
  244. package/dist/demo/DemoLayout-DHVoacE6.js +0 -46
  245. package/dist/demo/DemoLayout-DHVoacE6.js.map +0 -1
  246. package/dist/demo/DemoLogin-DjJ9314c.js.map +0 -1
  247. package/dist/demo/DemoRegister-DzkJ5M83.js.map +0 -1
  248. package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +0 -1
  249. package/dist/demo/DemoSidebar-C1csnGhX.js.map +0 -1
  250. package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +0 -1
  251. package/dist/demo/Showcase-BzoXNlCn.js +0 -185
  252. package/dist/demo/Showcase-BzoXNlCn.js.map +0 -1
  253. package/dist/json/index.d.ts +0 -57
  254. package/dist/json/index.d.ts.map +0 -1
  255. package/dist/json/index.js +0 -325
  256. package/dist/json/index.js.map +0 -1
  257. package/src/admin/components/users/AdminUserAudits.tsx +0 -184
  258. package/src/admin/components/users/AdminUserCreate.tsx +0 -85
  259. package/src/admin/components/users/AdminUserDetails.tsx +0 -431
  260. package/src/admin/components/users/AdminUserSettings.tsx +0 -171
  261. package/src/core/components/data/ErrorViewer.tsx +0 -171
  262. package/src/json/extensions/DialogService.tsx +0 -31
  263. package/src/json/index.ts +0 -18
  264. package/src/json/styles.css +0 -1
  265. /package/dist/{demo → auth}/IconGoogle-Ch1m3Uzl.js +0 -0
  266. /package/dist/{demo → auth}/IconGoogle-Ch1m3Uzl.js.map +0 -0
  267. /package/src/{json → core/json}/components/JsonViewer.css +0 -0
  268. /package/src/{json → core/json}/components/JsonViewer.tsx +0 -0
  269. /package/src/core/{components/table → table/components}/DataTablePagination.tsx +0 -0
  270. /package/src/core/{components/table → table/components}/useTableSelection.ts +0 -0
@@ -1,11 +1,11 @@
1
- import { ActionButton, DataTable, Text, useDialog, useToast } from "@alepha/ui";
1
+ import { _ as ActionButton, b as useToast, f as DetailList, i as useDialog, r as DataTable, s as Text$1, u as Flex$1 } from "./core-2xoLiT0o.js";
2
2
  import { t } from "alepha";
3
- import { IconAlertTriangle, IconCircleCheck, IconCircleX, IconClock, IconPlayerPlay, IconRefresh } from "@tabler/icons-react";
4
- import { Badge, Code, Flex as Flex$1, Paper, Table } from "@mantine/core";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- import { useClient } from "alepha/react";
7
3
  import { useI18n } from "alepha/react/i18n";
4
+ import { Badge, Code, Paper, Table } from "@mantine/core";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
8
6
  import { useCallback, useEffect, useState } from "react";
7
+ import { IconCircleX, IconRefresh } from "@tabler/icons-react";
8
+ import { useClient } from "alepha/react";
9
9
 
10
10
  //#region ../../src/admin/components/jobs/AdminJobExecutions.tsx
11
11
  const PRIORITY_LABELS = {
@@ -22,39 +22,6 @@ const formatDuration = (start, end) => {
22
22
  if (duration < 36e5) return `${Math.floor(duration / 6e4)}m ${Math.floor(duration % 6e4 / 1e3)}s`;
23
23
  return `${Math.floor(duration / 36e5)}h ${Math.floor(duration % 36e5 / 6e4)}m`;
24
24
  };
25
- const getStatusColor = (status) => {
26
- switch (status) {
27
- case "completed": return "teal";
28
- case "running": return "blue";
29
- case "failed":
30
- case "dead": return "red";
31
- case "cancelled": return "orange";
32
- case "scheduled": return "violet";
33
- case "retrying": return "yellow";
34
- case "pending": return "gray";
35
- default: return "gray";
36
- }
37
- };
38
- const getStatusIcon = (status, size = 14) => {
39
- switch (status) {
40
- case "completed": return /* @__PURE__ */ jsx(IconCircleCheck, { size });
41
- case "failed":
42
- case "dead": return /* @__PURE__ */ jsx(IconCircleX, { size });
43
- case "running": return /* @__PURE__ */ jsx(IconPlayerPlay, { size });
44
- case "cancelled": return /* @__PURE__ */ jsx(IconAlertTriangle, { size });
45
- default: return /* @__PURE__ */ jsx(IconClock, { size });
46
- }
47
- };
48
- const getLogLevelColor = (level) => {
49
- switch (level) {
50
- case "ERROR": return "red";
51
- case "WARN": return "orange";
52
- case "INFO": return "blue";
53
- case "DEBUG": return "gray";
54
- case "TRACE": return "dimmed";
55
- default: return "gray";
56
- }
57
- };
58
25
  const executionFilters = t.object({
59
26
  job: t.optional(t.string()),
60
27
  status: t.optional(t.enum([
@@ -82,7 +49,7 @@ const AdminJobExecutions = () => {
82
49
  const [refreshKey, setRefreshKey] = useState(0);
83
50
  const handleRetry = useCallback(async (id) => {
84
51
  try {
85
- await client.retryExecution({ params: { id } });
52
+ await client.retryJobExecution({ params: { id } });
86
53
  toast.success("Execution retried");
87
54
  setRefreshKey((k) => k + 1);
88
55
  } catch {
@@ -97,7 +64,7 @@ const AdminJobExecutions = () => {
97
64
  confirmColor: "red"
98
65
  })) return;
99
66
  try {
100
- await client.cancelExecution({ params: { id } });
67
+ await client.cancelJobExecution({ params: { id } });
101
68
  toast.success("Execution cancelled");
102
69
  setRefreshKey((k) => k + 1);
103
70
  } catch {
@@ -130,7 +97,7 @@ const AdminJobExecutions = () => {
130
97
  filters: executionFilters,
131
98
  defaultFilters: ["job", "status"],
132
99
  items: async (filters) => {
133
- return await client.findExecutions({ query: { ...filters } });
100
+ return await client.findJobExecutions({ query: { ...filters } });
134
101
  },
135
102
  columns: {
136
103
  status: {
@@ -138,15 +105,13 @@ const AdminJobExecutions = () => {
138
105
  fit: true,
139
106
  value: (item) => /* @__PURE__ */ jsx(Badge, {
140
107
  size: "sm",
141
- variant: "light",
142
- color: getStatusColor(item.status),
143
- leftSection: getStatusIcon(item.status, 12),
108
+ variant: "default",
144
109
  children: item.status
145
110
  })
146
111
  },
147
112
  jobName: {
148
113
  label: "Job",
149
- value: (item) => /* @__PURE__ */ jsx(Text, {
114
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
150
115
  size: "sm",
151
116
  fw: 500,
152
117
  ff: "monospace",
@@ -156,7 +121,7 @@ const AdminJobExecutions = () => {
156
121
  priority: {
157
122
  label: "Priority",
158
123
  fit: true,
159
- value: (item) => /* @__PURE__ */ jsx(Text, {
124
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
160
125
  size: "xs",
161
126
  c: "dimmed",
162
127
  children: PRIORITY_LABELS[item.priority] ?? item.priority
@@ -165,7 +130,7 @@ const AdminJobExecutions = () => {
165
130
  attempt: {
166
131
  label: "Attempt",
167
132
  fit: true,
168
- value: (item) => /* @__PURE__ */ jsxs(Text, {
133
+ value: (item) => /* @__PURE__ */ jsxs(Text$1, {
169
134
  size: "sm",
170
135
  ff: "monospace",
171
136
  children: [
@@ -179,7 +144,7 @@ const AdminJobExecutions = () => {
179
144
  label: "Trigger",
180
145
  fit: true,
181
146
  defaultHidden: true,
182
- value: (item) => /* @__PURE__ */ jsx(Text, {
147
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
183
148
  size: "xs",
184
149
  c: "dimmed",
185
150
  children: item.triggeredByName ?? "—"
@@ -189,7 +154,7 @@ const AdminJobExecutions = () => {
189
154
  label: "Created",
190
155
  fit: true,
191
156
  defaultHidden: true,
192
- value: (item) => /* @__PURE__ */ jsx(Text, {
157
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
193
158
  size: "xs",
194
159
  c: "dimmed",
195
160
  children: l(item.createdAt, { date: "fromNow" })
@@ -198,7 +163,7 @@ const AdminJobExecutions = () => {
198
163
  startedAt: {
199
164
  label: "Started",
200
165
  fit: true,
201
- value: (item) => /* @__PURE__ */ jsx(Text, {
166
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
202
167
  size: "xs",
203
168
  c: "dimmed",
204
169
  children: item.startedAt ? l(item.startedAt, { date: "fromNow" }) : "—"
@@ -207,7 +172,7 @@ const AdminJobExecutions = () => {
207
172
  duration: {
208
173
  label: "Duration",
209
174
  fit: true,
210
- value: (item) => /* @__PURE__ */ jsx(Text, {
175
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
211
176
  size: "xs",
212
177
  c: "dimmed",
213
178
  ff: "monospace",
@@ -217,9 +182,9 @@ const AdminJobExecutions = () => {
217
182
  error: {
218
183
  label: "Error",
219
184
  defaultHidden: true,
220
- value: (item) => /* @__PURE__ */ jsx(Text, {
185
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
221
186
  size: "xs",
222
- c: "red",
187
+ c: "dimmed",
223
188
  lineClamp: 1,
224
189
  children: item.error ?? "—"
225
190
  })
@@ -228,7 +193,7 @@ const AdminJobExecutions = () => {
228
193
  label: "Key",
229
194
  fit: true,
230
195
  defaultHidden: true,
231
- value: (item) => /* @__PURE__ */ jsx(Text, {
196
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
232
197
  size: "xs",
233
198
  c: "dimmed",
234
199
  ff: "monospace",
@@ -239,7 +204,7 @@ const AdminJobExecutions = () => {
239
204
  label: "Worker",
240
205
  fit: true,
241
206
  defaultHidden: true,
242
- value: (item) => /* @__PURE__ */ jsx(Text, {
207
+ value: (item) => /* @__PURE__ */ jsx(Text$1, {
243
208
  size: "xs",
244
209
  c: "dimmed",
245
210
  ff: "monospace",
@@ -251,13 +216,11 @@ const AdminJobExecutions = () => {
251
216
  fit: true,
252
217
  actions: (item) => [{
253
218
  tooltip: "Retry",
254
- color: "blue",
255
219
  icon: IconRefresh,
256
220
  onClick: () => handleRetry(item.id),
257
221
  visible: item.can?.retry
258
222
  }, {
259
223
  tooltip: "Cancel",
260
- color: "red",
261
224
  icon: IconCircleX,
262
225
  onClick: () => handleCancel(item.id),
263
226
  visible: item.can?.cancel
@@ -273,7 +236,7 @@ const AdminJobExecutions = () => {
273
236
  children: [item.error && /* @__PURE__ */ jsxs(Flex$1, {
274
237
  direction: "column",
275
238
  gap: 2,
276
- children: [/* @__PURE__ */ jsx(Text, {
239
+ children: [/* @__PURE__ */ jsx(Text$1, {
277
240
  size: "xs",
278
241
  c: "dimmed",
279
242
  tt: "uppercase",
@@ -281,11 +244,10 @@ const AdminJobExecutions = () => {
281
244
  children: "Error"
282
245
  }), /* @__PURE__ */ jsx(Paper, {
283
246
  p: "xs",
284
- bg: "var(--mantine-color-red-light)",
285
247
  radius: "sm",
286
- children: /* @__PURE__ */ jsx(Text, {
248
+ withBorder: true,
249
+ children: /* @__PURE__ */ jsx(Text$1, {
287
250
  size: "xs",
288
- c: "red",
289
251
  style: {
290
252
  whiteSpace: "pre-wrap",
291
253
  wordBreak: "break-word"
@@ -300,13 +262,13 @@ const AdminJobExecutions = () => {
300
262
  /* @__PURE__ */ jsxs(Flex$1, {
301
263
  direction: "column",
302
264
  gap: 2,
303
- children: [/* @__PURE__ */ jsx(Text, {
265
+ children: [/* @__PURE__ */ jsx(Text$1, {
304
266
  size: "xs",
305
267
  c: "dimmed",
306
268
  tt: "uppercase",
307
269
  fw: 600,
308
270
  children: "ID"
309
- }), /* @__PURE__ */ jsx(Text, {
271
+ }), /* @__PURE__ */ jsx(Text$1, {
310
272
  size: "xs",
311
273
  ff: "monospace",
312
274
  children: item.id
@@ -315,13 +277,13 @@ const AdminJobExecutions = () => {
315
277
  item.key && /* @__PURE__ */ jsxs(Flex$1, {
316
278
  direction: "column",
317
279
  gap: 2,
318
- children: [/* @__PURE__ */ jsx(Text, {
280
+ children: [/* @__PURE__ */ jsx(Text$1, {
319
281
  size: "xs",
320
282
  c: "dimmed",
321
283
  tt: "uppercase",
322
284
  fw: 600,
323
285
  children: "Key"
324
- }), /* @__PURE__ */ jsx(Text, {
286
+ }), /* @__PURE__ */ jsx(Text$1, {
325
287
  size: "xs",
326
288
  ff: "monospace",
327
289
  children: item.key
@@ -330,13 +292,13 @@ const AdminJobExecutions = () => {
330
292
  item.workerId && /* @__PURE__ */ jsxs(Flex$1, {
331
293
  direction: "column",
332
294
  gap: 2,
333
- children: [/* @__PURE__ */ jsx(Text, {
295
+ children: [/* @__PURE__ */ jsx(Text$1, {
334
296
  size: "xs",
335
297
  c: "dimmed",
336
298
  tt: "uppercase",
337
299
  fw: 600,
338
300
  children: "Worker"
339
- }), /* @__PURE__ */ jsx(Text, {
301
+ }), /* @__PURE__ */ jsx(Text$1, {
340
302
  size: "xs",
341
303
  ff: "monospace",
342
304
  children: item.workerId
@@ -345,13 +307,13 @@ const AdminJobExecutions = () => {
345
307
  item.triggeredByName && /* @__PURE__ */ jsxs(Flex$1, {
346
308
  direction: "column",
347
309
  gap: 2,
348
- children: [/* @__PURE__ */ jsx(Text, {
310
+ children: [/* @__PURE__ */ jsx(Text$1, {
349
311
  size: "xs",
350
312
  c: "dimmed",
351
313
  tt: "uppercase",
352
314
  fw: 600,
353
315
  children: "Triggered By"
354
- }), /* @__PURE__ */ jsx(Text, {
316
+ }), /* @__PURE__ */ jsx(Text$1, {
355
317
  size: "xs",
356
318
  children: item.triggeredByName
357
319
  })]
@@ -380,7 +342,7 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
380
342
  setExpandedLogs(/* @__PURE__ */ new Set());
381
343
  setLoading(true);
382
344
  try {
383
- setDetail(await client.getExecution({ params: { id: execId } }));
345
+ setDetail(await client.getJobExecution({ params: { id: execId } }));
384
346
  } catch {
385
347
  toast.danger("Failed to load execution details");
386
348
  } finally {
@@ -418,12 +380,93 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
418
380
  align: "center",
419
381
  justify: "center",
420
382
  py: "xl",
421
- children: /* @__PURE__ */ jsx(Text, {
383
+ children: /* @__PURE__ */ jsx(Text$1, {
422
384
  c: "dimmed",
423
385
  children: "Loading..."
424
386
  })
425
387
  });
426
388
  if (!detail) return null;
389
+ const detailItems = [
390
+ {
391
+ label: "ID",
392
+ value: /* @__PURE__ */ jsx(Text$1, {
393
+ size: "sm",
394
+ ff: "monospace",
395
+ children: detail.id
396
+ }),
397
+ copyable: detail.id
398
+ },
399
+ {
400
+ label: "Status",
401
+ value: /* @__PURE__ */ jsx(Text$1, {
402
+ size: "sm",
403
+ tt: "capitalize",
404
+ children: detail.status
405
+ })
406
+ },
407
+ {
408
+ label: "Priority",
409
+ value: PRIORITY_LABELS[detail.priority] ?? "Normal"
410
+ },
411
+ {
412
+ label: "Attempt",
413
+ value: /* @__PURE__ */ jsxs(Text$1, {
414
+ size: "sm",
415
+ ff: "monospace",
416
+ children: [
417
+ detail.attempt,
418
+ "/",
419
+ detail.maxAttempts
420
+ ]
421
+ })
422
+ },
423
+ {
424
+ label: "Worker",
425
+ value: /* @__PURE__ */ jsx(Text$1, {
426
+ size: "sm",
427
+ ff: "monospace",
428
+ children: detail.workerId
429
+ }),
430
+ hidden: !detail.workerId
431
+ },
432
+ {
433
+ label: "Key",
434
+ value: /* @__PURE__ */ jsx(Text$1, {
435
+ size: "sm",
436
+ ff: "monospace",
437
+ children: detail.key
438
+ }),
439
+ hidden: !detail.key
440
+ },
441
+ {
442
+ label: "Created",
443
+ value: String(l(detail.createdAt, { date: "lll" }))
444
+ },
445
+ {
446
+ label: "Started",
447
+ value: detail.startedAt ? String(l(detail.startedAt, { date: "lll" })) : void 0,
448
+ hidden: !detail.startedAt
449
+ },
450
+ {
451
+ label: "Duration",
452
+ value: detail.startedAt && (detail.completedAt || detail.status === "running") ? /* @__PURE__ */ jsx(Text$1, {
453
+ size: "sm",
454
+ ff: "monospace",
455
+ children: formatDuration(detail.startedAt, detail.completedAt)
456
+ }) : void 0,
457
+ hidden: !(detail.startedAt && (detail.completedAt || detail.status === "running"))
458
+ },
459
+ {
460
+ label: "Triggered By",
461
+ value: detail.triggeredByName,
462
+ hidden: !detail.triggeredByName
463
+ },
464
+ {
465
+ label: "Cancelled By",
466
+ value: detail.cancelledByName,
467
+ hidden: !detail.cancelledByName
468
+ }
469
+ ];
427
470
  return /* @__PURE__ */ jsxs(Flex$1, {
428
471
  direction: "column",
429
472
  gap: "md",
@@ -432,19 +475,18 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
432
475
  align: "center",
433
476
  gap: "sm",
434
477
  children: [
435
- /* @__PURE__ */ jsx(Text, {
478
+ /* @__PURE__ */ jsx(Text$1, {
436
479
  fw: 600,
437
480
  ff: "monospace",
438
481
  children: detail.jobName
439
482
  }),
440
- /* @__PURE__ */ jsx(Badge, {
483
+ /* @__PURE__ */ jsx(Text$1, {
441
484
  size: "sm",
442
- variant: "light",
443
- color: getStatusColor(detail.status),
444
- leftSection: getStatusIcon(detail.status, 12),
485
+ tt: "capitalize",
486
+ c: "dimmed",
445
487
  children: detail.status
446
488
  }),
447
- /* @__PURE__ */ jsxs(Text, {
489
+ /* @__PURE__ */ jsxs(Text$1, {
448
490
  size: "xs",
449
491
  c: "dimmed",
450
492
  children: [
@@ -469,7 +511,6 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
469
511
  tooltip: "Retry",
470
512
  variant: "light",
471
513
  size: "xs",
472
- color: "blue",
473
514
  icon: IconRefresh,
474
515
  onClick: handleRetry
475
516
  }),
@@ -477,7 +518,6 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
477
518
  tooltip: "Cancel",
478
519
  variant: "light",
479
520
  size: "xs",
480
- color: "red",
481
521
  icon: IconCircleX,
482
522
  onClick: handleCancel
483
523
  })
@@ -487,74 +527,21 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
487
527
  p: "sm",
488
528
  radius: "md",
489
529
  withBorder: true,
490
- children: [/* @__PURE__ */ jsx(Text, {
530
+ children: [/* @__PURE__ */ jsx(Text$1, {
491
531
  size: "sm",
492
532
  fw: 600,
493
533
  mb: "xs",
494
534
  children: "Details"
495
- }), /* @__PURE__ */ jsxs(Flex$1, {
496
- gap: "lg",
497
- wrap: "wrap",
498
- children: [
499
- /* @__PURE__ */ jsx(DetailField, {
500
- label: "ID",
501
- value: detail.id,
502
- monospace: true,
503
- copyable: true
504
- }),
505
- /* @__PURE__ */ jsx(DetailField, {
506
- label: "Status",
507
- value: detail.status,
508
- capitalize: true
509
- }),
510
- /* @__PURE__ */ jsx(DetailField, {
511
- label: "Priority",
512
- value: PRIORITY_LABELS[detail.priority] ?? "Normal"
513
- }),
514
- /* @__PURE__ */ jsx(DetailField, {
515
- label: "Attempt",
516
- value: `${detail.attempt}/${detail.maxAttempts}`,
517
- monospace: true
518
- }),
519
- detail.workerId && /* @__PURE__ */ jsx(DetailField, {
520
- label: "Worker",
521
- value: detail.workerId,
522
- monospace: true
523
- }),
524
- detail.key && /* @__PURE__ */ jsx(DetailField, {
525
- label: "Key",
526
- value: detail.key,
527
- monospace: true
528
- }),
529
- /* @__PURE__ */ jsx(DetailField, {
530
- label: "Created",
531
- value: String(l(detail.createdAt, { date: "lll" }))
532
- }),
533
- detail.startedAt && /* @__PURE__ */ jsx(DetailField, {
534
- label: "Started",
535
- value: String(l(detail.startedAt, { date: "lll" }))
536
- }),
537
- detail.startedAt && (detail.completedAt || detail.status === "running") && /* @__PURE__ */ jsx(DetailField, {
538
- label: "Duration",
539
- value: formatDuration(detail.startedAt, detail.completedAt),
540
- monospace: true
541
- }),
542
- detail.triggeredByName && /* @__PURE__ */ jsx(DetailField, {
543
- label: "Triggered By",
544
- value: detail.triggeredByName
545
- }),
546
- detail.cancelledByName && /* @__PURE__ */ jsx(DetailField, {
547
- label: "Cancelled By",
548
- value: detail.cancelledByName
549
- })
550
- ]
535
+ }), /* @__PURE__ */ jsx(DetailList, {
536
+ items: detailItems,
537
+ columns: 2
551
538
  })]
552
539
  }),
553
540
  detail.payload && /* @__PURE__ */ jsxs(Paper, {
554
541
  p: "sm",
555
542
  radius: "md",
556
543
  withBorder: true,
557
- children: [/* @__PURE__ */ jsx(Text, {
544
+ children: [/* @__PURE__ */ jsx(Text$1, {
558
545
  size: "sm",
559
546
  fw: 600,
560
547
  mb: "xs",
@@ -568,19 +555,17 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
568
555
  p: "sm",
569
556
  radius: "md",
570
557
  withBorder: true,
571
- children: [/* @__PURE__ */ jsx(Text, {
558
+ children: [/* @__PURE__ */ jsx(Text$1, {
572
559
  size: "sm",
573
560
  fw: 600,
574
561
  mb: "xs",
575
- c: "red",
576
562
  children: "Error"
577
563
  }), /* @__PURE__ */ jsx(Paper, {
578
564
  p: "xs",
579
- bg: "var(--mantine-color-red-light)",
580
565
  radius: "sm",
581
- children: /* @__PURE__ */ jsx(Text, {
566
+ withBorder: true,
567
+ children: /* @__PURE__ */ jsx(Text$1, {
582
568
  size: "sm",
583
- c: "red",
584
569
  style: {
585
570
  whiteSpace: "pre-wrap",
586
571
  wordBreak: "break-word"
@@ -593,7 +578,7 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
593
578
  p: "sm",
594
579
  radius: "md",
595
580
  withBorder: true,
596
- children: [/* @__PURE__ */ jsxs(Text, {
581
+ children: [/* @__PURE__ */ jsxs(Text$1, {
597
582
  size: "sm",
598
583
  fw: 600,
599
584
  mb: "xs",
@@ -626,17 +611,16 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
626
611
  children: [
627
612
  /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Badge, {
628
613
  size: "xs",
629
- variant: "light",
630
- color: getLogLevelColor(log.level),
614
+ variant: "default",
631
615
  children: log.level
632
616
  }) }),
633
- /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text, {
617
+ /* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
634
618
  size: "xs",
635
619
  c: "dimmed",
636
620
  ff: "monospace",
637
621
  children: new Date(log.timestamp).toLocaleTimeString()
638
622
  }) }),
639
- /* @__PURE__ */ jsxs(Table.Td, { children: [/* @__PURE__ */ jsx(Text, {
623
+ /* @__PURE__ */ jsxs(Table.Td, { children: [/* @__PURE__ */ jsx(Text$1, {
640
624
  size: "xs",
641
625
  children: log.message
642
626
  }), expandedLogs.has(i) && log.data && /* @__PURE__ */ jsx(Code, {
@@ -652,27 +636,7 @@ const ExecutionDetailContent = ({ item, onRetry, onCancel }) => {
652
636
  ]
653
637
  });
654
638
  };
655
- const DetailField = ({ label, value, monospace, capitalize, copyable }) => /* @__PURE__ */ jsxs(Flex$1, {
656
- direction: "column",
657
- gap: 2,
658
- children: [/* @__PURE__ */ jsx(Text, {
659
- size: "xs",
660
- c: "dimmed",
661
- tt: "uppercase",
662
- fw: 600,
663
- children: label
664
- }), /* @__PURE__ */ jsx(Text, {
665
- size: "sm",
666
- ff: monospace ? "monospace" : void 0,
667
- tt: capitalize ? "capitalize" : void 0,
668
- style: copyable ? {
669
- cursor: "pointer",
670
- userSelect: "all"
671
- } : void 0,
672
- children: value
673
- })]
674
- });
675
639
 
676
640
  //#endregion
677
641
  export { AdminJobExecutions as default };
678
- //# sourceMappingURL=AdminJobExecutions-D-b4Zt7W.js.map
642
+ //# sourceMappingURL=AdminJobExecutions-B9cek5dl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminJobExecutions-B9cek5dl.js","names":["Flex","Text"],"sources":["../../src/admin/components/jobs/AdminJobExecutions.tsx"],"sourcesContent":["import type { DetailListItem } from \"@alepha/ui\";\nimport {\n ActionButton,\n DataTable,\n DetailList,\n Flex,\n Text,\n useDialog,\n useToast,\n} from \"@alepha/ui\";\nimport { Badge, Code, Paper, Table } from \"@mantine/core\";\nimport { IconCircleX, IconRefresh } from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport type {\n AdminJobController,\n JobExecutionDetailResource,\n JobExecutionResource,\n} from \"alepha/api/jobs\";\nimport type { LogEntry } from \"alepha/logger\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PRIORITY_LABELS: Record<number, string> = {\n 0: \"Critical\",\n 1: \"High\",\n 2: \"Normal\",\n 3: \"Low\",\n};\n\nconst formatDuration = (\n start: Date | string,\n end?: Date | string | null,\n): string => {\n const startTime = new Date(start).getTime();\n const endTime = end ? new Date(end).getTime() : Date.now();\n const duration = endTime - startTime;\n\n if (duration < 1000) return `${duration}ms`;\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`;\n if (duration < 3600000)\n return `${Math.floor(duration / 60000)}m ${Math.floor((duration % 60000) / 1000)}s`;\n return `${Math.floor(duration / 3600000)}h ${Math.floor((duration % 3600000) / 60000)}m`;\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst executionFilters = t.object({\n job: t.optional(t.string()),\n status: t.optional(\n t.enum([\n \"pending\",\n \"scheduled\",\n \"retrying\",\n \"running\",\n \"completed\",\n \"failed\",\n \"dead\",\n \"cancelled\",\n ]),\n ),\n priority: t.optional(t.enum([\"critical\", \"high\", \"normal\", \"low\"])),\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst AdminJobExecutions = () => {\n const client = useClient<AdminJobController>();\n const { l } = useI18n();\n const toast = useToast();\n const dialog = useDialog();\n const [refreshKey, setRefreshKey] = useState(0);\n\n const handleRetry = useCallback(\n async (id: string) => {\n try {\n await client.retryJobExecution({ params: { id } });\n toast.success(\"Execution retried\");\n setRefreshKey((k) => k + 1);\n } catch {\n toast.danger(\"Failed to retry execution\");\n }\n },\n [client, toast],\n );\n\n const handleCancel = useCallback(\n async (id: string) => {\n const confirmed = await dialog.confirm({\n title: \"Cancel Execution\",\n message: \"Are you sure you want to cancel this execution?\",\n confirmLabel: \"Cancel\",\n confirmColor: \"red\",\n });\n\n if (!confirmed) return;\n\n try {\n await client.cancelJobExecution({ params: { id } });\n toast.success(\"Execution cancelled\");\n setRefreshKey((k) => k + 1);\n } catch {\n toast.danger(\"Failed to cancel execution\");\n }\n },\n [client, dialog, toast],\n );\n\n return (\n <Flex flex={1} direction=\"column\" gap=\"md\">\n <DataTable<JobExecutionResource, typeof executionFilters>\n key={`executions-${refreshKey}`}\n submitOnInit\n defaultSize={20}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"sm\",\n verticalSpacing: \"sm\",\n highlightOnHover: true,\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"job\" || key === \"status\" || key === \"priority\") {\n return form.submit();\n }\n }}\n filters={executionFilters}\n defaultFilters={[\"job\", \"status\"]}\n items={async (filters) => {\n const response = await client.findJobExecutions({\n query: {\n ...filters,\n },\n });\n return response as Page<JobExecutionResource>;\n }}\n columns={{\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge size=\"sm\" variant=\"default\">\n {item.status}\n </Badge>\n ),\n },\n jobName: {\n label: \"Job\",\n value: (item) => (\n <Text size=\"sm\" fw={500} ff=\"monospace\">\n {item.jobName}\n </Text>\n ),\n },\n priority: {\n label: \"Priority\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {PRIORITY_LABELS[item.priority] ?? item.priority}\n </Text>\n ),\n },\n attempt: {\n label: \"Attempt\",\n fit: true,\n value: (item) => (\n <Text size=\"sm\" ff=\"monospace\">\n {item.attempt}/{item.maxAttempts}\n </Text>\n ),\n },\n triggeredByName: {\n label: \"Trigger\",\n fit: true,\n defaultHidden: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.triggeredByName ?? \"\\u2014\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n defaultHidden: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n startedAt: {\n label: \"Started\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.startedAt\n ? l(item.startedAt, { date: \"fromNow\" })\n : \"\\u2014\"}\n </Text>\n ),\n },\n duration: {\n label: \"Duration\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {item.startedAt &&\n (item.completedAt || item.status === \"running\")\n ? formatDuration(item.startedAt, item.completedAt)\n : \"\\u2014\"}\n </Text>\n ),\n },\n error: {\n label: \"Error\",\n defaultHidden: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" lineClamp={1}>\n {item.error ?? \"\\u2014\"}\n </Text>\n ),\n },\n key: {\n label: \"Key\",\n fit: true,\n defaultHidden: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {item.key ?? \"\\u2014\"}\n </Text>\n ),\n },\n workerId: {\n label: \"Worker\",\n fit: true,\n defaultHidden: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {item.workerId ?? \"\\u2014\"}\n </Text>\n ),\n },\n actions: {\n label: \"\",\n fit: true,\n actions: (item) => [\n {\n tooltip: \"Retry\",\n icon: IconRefresh,\n onClick: () => handleRetry(item.id),\n visible: item.can?.retry,\n },\n {\n tooltip: \"Cancel\",\n icon: IconCircleX,\n onClick: () => handleCancel(item.id),\n visible: item.can?.cancel,\n },\n ],\n },\n }}\n panel={{\n can: (item) => Boolean(item.error || item.key || item.workerId),\n render: (item) => (\n <Flex direction=\"column\" gap=\"sm\" p=\"sm\">\n {item.error && (\n <Flex direction=\"column\" gap={2}>\n <Text size=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={600}>\n Error\n </Text>\n <Paper p=\"xs\" radius=\"sm\" withBorder>\n <Text\n size=\"xs\"\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n }}\n >\n {item.error}\n </Text>\n </Paper>\n </Flex>\n )}\n <Flex gap=\"lg\" wrap=\"wrap\">\n <Flex direction=\"column\" gap={2}>\n <Text size=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={600}>\n ID\n </Text>\n <Text size=\"xs\" ff=\"monospace\">\n {item.id}\n </Text>\n </Flex>\n {item.key && (\n <Flex direction=\"column\" gap={2}>\n <Text size=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={600}>\n Key\n </Text>\n <Text size=\"xs\" ff=\"monospace\">\n {item.key}\n </Text>\n </Flex>\n )}\n {item.workerId && (\n <Flex direction=\"column\" gap={2}>\n <Text size=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={600}>\n Worker\n </Text>\n <Text size=\"xs\" ff=\"monospace\">\n {item.workerId}\n </Text>\n </Flex>\n )}\n {item.triggeredByName && (\n <Flex direction=\"column\" gap={2}>\n <Text size=\"xs\" c=\"dimmed\" tt=\"uppercase\" fw={600}>\n Triggered By\n </Text>\n <Text size=\"xs\">{item.triggeredByName}</Text>\n </Flex>\n )}\n </Flex>\n </Flex>\n ),\n }}\n drawer={(item) => (\n <ExecutionDetailContent\n item={item}\n onRetry={handleRetry}\n onCancel={handleCancel}\n />\n )}\n />\n </Flex>\n );\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ExecutionDetailContent = ({\n item,\n onRetry,\n onCancel,\n}: {\n item: JobExecutionResource;\n onRetry: (id: string) => Promise<void>;\n onCancel: (id: string) => Promise<void>;\n}) => {\n const client = useClient<AdminJobController>();\n const { l } = useI18n();\n const toast = useToast();\n const [detail, setDetail] = useState<JobExecutionDetailResource | null>(null);\n const [loading, setLoading] = useState(false);\n const [expandedLogs, setExpandedLogs] = useState<Set<number>>(new Set());\n\n const loadDetail = useCallback(\n async (execId: string) => {\n setDetail(null);\n setExpandedLogs(new Set());\n setLoading(true);\n try {\n const data = await client.getJobExecution({ params: { id: execId } });\n setDetail(data);\n } catch {\n toast.danger(\"Failed to load execution details\");\n } finally {\n setLoading(false);\n }\n },\n [client, toast],\n );\n\n useEffect(() => {\n loadDetail(item.id);\n }, [item.id, loadDetail]);\n\n const handleRetry = useCallback(async () => {\n await onRetry(item.id);\n loadDetail(item.id);\n }, [item.id, onRetry, loadDetail]);\n\n const handleCancel = useCallback(async () => {\n await onCancel(item.id);\n loadDetail(item.id);\n }, [item.id, onCancel, loadDetail]);\n\n const toggleLogExpand = useCallback((index: number) => {\n setExpandedLogs((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n return next;\n });\n }, []);\n\n if (loading) {\n return (\n <Flex align=\"center\" justify=\"center\" py=\"xl\">\n <Text c=\"dimmed\">Loading...</Text>\n </Flex>\n );\n }\n\n if (!detail) return null;\n\n const detailItems: DetailListItem[] = [\n {\n label: \"ID\",\n value: (\n <Text size=\"sm\" ff=\"monospace\">\n {detail.id}\n </Text>\n ),\n copyable: detail.id,\n },\n {\n label: \"Status\",\n value: (\n <Text size=\"sm\" tt=\"capitalize\">\n {detail.status}\n </Text>\n ),\n },\n {\n label: \"Priority\",\n value: PRIORITY_LABELS[detail.priority] ?? \"Normal\",\n },\n {\n label: \"Attempt\",\n value: (\n <Text size=\"sm\" ff=\"monospace\">\n {detail.attempt}/{detail.maxAttempts}\n </Text>\n ),\n },\n {\n label: \"Worker\",\n value: (\n <Text size=\"sm\" ff=\"monospace\">\n {detail.workerId}\n </Text>\n ),\n hidden: !detail.workerId,\n },\n {\n label: \"Key\",\n value: (\n <Text size=\"sm\" ff=\"monospace\">\n {detail.key}\n </Text>\n ),\n hidden: !detail.key,\n },\n {\n label: \"Created\",\n value: String(l(detail.createdAt, { date: \"lll\" })),\n },\n {\n label: \"Started\",\n value: detail.startedAt\n ? String(l(detail.startedAt, { date: \"lll\" }))\n : undefined,\n hidden: !detail.startedAt,\n },\n {\n label: \"Duration\",\n value:\n detail.startedAt &&\n (detail.completedAt || detail.status === \"running\") ? (\n <Text size=\"sm\" ff=\"monospace\">\n {formatDuration(detail.startedAt, detail.completedAt)}\n </Text>\n ) : undefined,\n hidden: !(\n detail.startedAt &&\n (detail.completedAt || detail.status === \"running\")\n ),\n },\n {\n label: \"Triggered By\",\n value: detail.triggeredByName,\n hidden: !detail.triggeredByName,\n },\n {\n label: \"Cancelled By\",\n value: detail.cancelledByName,\n hidden: !detail.cancelledByName,\n },\n ];\n\n return (\n <Flex direction=\"column\" gap=\"md\">\n {/* Header */}\n <Flex align=\"center\" gap=\"sm\">\n <Text fw={600} ff=\"monospace\">\n {detail.jobName}\n </Text>\n <Text size=\"sm\" tt=\"capitalize\" c=\"dimmed\">\n {detail.status}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {detail.attempt}/{detail.maxAttempts}\n </Text>\n </Flex>\n\n {/* Actions */}\n <Flex gap=\"xs\">\n <ActionButton\n tooltip=\"Refresh\"\n variant=\"light\"\n size=\"xs\"\n icon={IconRefresh}\n onClick={() => loadDetail(item.id)}\n />\n {detail.can?.retry && (\n <ActionButton\n tooltip=\"Retry\"\n variant=\"light\"\n size=\"xs\"\n icon={IconRefresh}\n onClick={handleRetry}\n />\n )}\n {detail.can?.cancel && (\n <ActionButton\n tooltip=\"Cancel\"\n variant=\"light\"\n size=\"xs\"\n icon={IconCircleX}\n onClick={handleCancel}\n />\n )}\n </Flex>\n\n {/* Details */}\n <Paper p=\"sm\" radius=\"md\" withBorder>\n <Text size=\"sm\" fw={600} mb=\"xs\">\n Details\n </Text>\n <DetailList items={detailItems} columns={2} />\n </Paper>\n\n {/* Payload */}\n {detail.payload && (\n <Paper p=\"sm\" radius=\"md\" withBorder>\n <Text size=\"sm\" fw={600} mb=\"xs\">\n Payload\n </Text>\n <Code block>{JSON.stringify(detail.payload, null, 2)}</Code>\n </Paper>\n )}\n\n {/* Error */}\n {detail.error && (\n <Paper p=\"sm\" radius=\"md\" withBorder>\n <Text size=\"sm\" fw={600} mb=\"xs\">\n Error\n </Text>\n <Paper p=\"xs\" radius=\"sm\" withBorder>\n <Text\n size=\"sm\"\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n }}\n >\n {detail.error}\n </Text>\n </Paper>\n </Paper>\n )}\n\n {/* Logs */}\n {detail.logs && detail.logs.length > 0 && (\n <Paper p=\"sm\" radius=\"md\" withBorder>\n <Text size=\"sm\" fw={600} mb=\"xs\">\n Logs ({detail.logs.length})\n </Text>\n <Flex\n direction=\"column\"\n style={{ maxHeight: 400, overflowY: \"auto\" }}\n >\n <Table highlightOnHover>\n <Table.Thead>\n <Table.Tr>\n <Table.Th style={{ width: 60 }}>Level</Table.Th>\n <Table.Th style={{ width: 90 }}>Time</Table.Th>\n <Table.Th>Message</Table.Th>\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {detail.logs.map((log: LogEntry, i: number) => (\n <Table.Tr\n key={i}\n style={log.data ? { cursor: \"pointer\" } : undefined}\n onClick={log.data ? () => toggleLogExpand(i) : undefined}\n >\n <Table.Td>\n <Badge size=\"xs\" variant=\"default\">\n {log.level}\n </Badge>\n </Table.Td>\n <Table.Td>\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {new Date(log.timestamp).toLocaleTimeString()}\n </Text>\n </Table.Td>\n <Table.Td>\n <Text size=\"xs\">{log.message}</Text>\n {expandedLogs.has(i) && log.data && (\n <Code block mt=\"xs\">\n {JSON.stringify(log.data, null, 2)}\n </Code>\n )}\n </Table.Td>\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n </Flex>\n </Paper>\n )}\n </Flex>\n );\n};\n\nexport default AdminJobExecutions;\n"],"mappings":";;;;;;;;;;AAyBA,MAAM,kBAA0C;CAC9C,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAED,MAAM,kBACJ,OACA,QACW;CACX,MAAM,YAAY,IAAI,KAAK,MAAM,CAAC,SAAS;CAE3C,MAAM,YADU,MAAM,IAAI,KAAK,IAAI,CAAC,SAAS,GAAG,KAAK,KAAK,IAC/B;AAE3B,KAAI,WAAW,IAAM,QAAO,GAAG,SAAS;AACxC,KAAI,WAAW,IAAO,QAAO,IAAI,WAAW,KAAM,QAAQ,EAAE,CAAC;AAC7D,KAAI,WAAW,KACb,QAAO,GAAG,KAAK,MAAM,WAAW,IAAM,CAAC,IAAI,KAAK,MAAO,WAAW,MAAS,IAAK,CAAC;AACnF,QAAO,GAAG,KAAK,MAAM,WAAW,KAAQ,CAAC,IAAI,KAAK,MAAO,WAAW,OAAW,IAAM,CAAC;;AAKxF,MAAM,mBAAmB,EAAE,OAAO;CAChC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC3B,QAAQ,EAAE,SACR,EAAE,KAAK;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,CACH;CACD,UAAU,EAAE,SAAS,EAAE,KAAK;EAAC;EAAY;EAAQ;EAAU;EAAM,CAAC,CAAC;CACpE,CAAC;AAIF,MAAM,2BAA2B;CAC/B,MAAM,SAAS,WAA+B;CAC9C,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,QAAQ,UAAU;CACxB,MAAM,SAAS,WAAW;CAC1B,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAE/C,MAAM,cAAc,YAClB,OAAO,OAAe;AACpB,MAAI;AACF,SAAM,OAAO,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,SAAM,QAAQ,oBAAoB;AAClC,kBAAe,MAAM,IAAI,EAAE;UACrB;AACN,SAAM,OAAO,4BAA4B;;IAG7C,CAAC,QAAQ,MAAM,CAChB;CAED,MAAM,eAAe,YACnB,OAAO,OAAe;AAQpB,MAAI,CAPc,MAAM,OAAO,QAAQ;GACrC,OAAO;GACP,SAAS;GACT,cAAc;GACd,cAAc;GACf,CAAC,CAEc;AAEhB,MAAI;AACF,SAAM,OAAO,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACnD,SAAM,QAAQ,sBAAsB;AACpC,kBAAe,MAAM,IAAI,EAAE;UACrB;AACN,SAAM,OAAO,6BAA6B;;IAG9C;EAAC;EAAQ;EAAQ;EAAM,CACxB;AAED,QACE,oBAACA;EAAK,MAAM;EAAG,WAAU;EAAS,KAAI;YACpC,oBAAC;GAEC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IACnB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,SAAS,QAAQ,YAAY,QAAQ,WAC/C,QAAO,KAAK,QAAQ;;GAGxB,SAAS;GACT,gBAAgB,CAAC,OAAO,SAAS;GACjC,OAAO,OAAO,YAAY;AAMxB,WALiB,MAAM,OAAO,kBAAkB,EAC9C,OAAO,EACL,GAAG,SACJ,EACF,CAAC;;GAGJ,SAAS;IACP,QAAQ;KACN,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAM,MAAK;MAAK,SAAQ;gBACtB,KAAK;OACA;KAEX;IACD,SAAS;KACP,OAAO;KACP,QAAQ,SACN,oBAACC;MAAK,MAAK;MAAK,IAAI;MAAK,IAAG;gBACzB,KAAK;OACD;KAEV;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;gBACf,gBAAgB,KAAK,aAAa,KAAK;OACnC;KAEV;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,QAAQ,SACN,qBAACA;MAAK,MAAK;MAAK,IAAG;;OAChB,KAAK;OAAQ;OAAE,KAAK;;OAChB;KAEV;IACD,iBAAiB;KACf,OAAO;KACP,KAAK;KACL,eAAe;KACf,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK,mBAAmB;OACpB;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,eAAe;KACf,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK,YACF,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC,GACtC;OACC;KAEV;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;MAAS,IAAG;gBAC3B,KAAK,cACL,KAAK,eAAe,KAAK,WAAW,aACjC,eAAe,KAAK,WAAW,KAAK,YAAY,GAChD;OACC;KAEV;IACD,OAAO;KACL,OAAO;KACP,eAAe;KACf,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;MAAS,WAAW;gBACnC,KAAK,SAAS;OACV;KAEV;IACD,KAAK;KACH,OAAO;KACP,KAAK;KACL,eAAe;KACf,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;MAAS,IAAG;gBAC3B,KAAK,OAAO;OACR;KAEV;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,eAAe;KACf,QAAQ,SACN,oBAACA;MAAK,MAAK;MAAK,GAAE;MAAS,IAAG;gBAC3B,KAAK,YAAY;OACb;KAEV;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,UAAU,SAAS,CACjB;MACE,SAAS;MACT,MAAM;MACN,eAAe,YAAY,KAAK,GAAG;MACnC,SAAS,KAAK,KAAK;MACpB,EACD;MACE,SAAS;MACT,MAAM;MACN,eAAe,aAAa,KAAK,GAAG;MACpC,SAAS,KAAK,KAAK;MACpB,CACF;KACF;IACF;GACD,OAAO;IACL,MAAM,SAAS,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS;IAC/D,SAAS,SACP,qBAACD;KAAK,WAAU;KAAS,KAAI;KAAK,GAAE;gBACjC,KAAK,SACJ,qBAACA;MAAK,WAAU;MAAS,KAAK;iBAC5B,oBAACC;OAAK,MAAK;OAAK,GAAE;OAAS,IAAG;OAAY,IAAI;iBAAK;QAE5C,EACP,oBAAC;OAAM,GAAE;OAAK,QAAO;OAAK;iBACxB,oBAACA;QACC,MAAK;QACL,OAAO;SACL,YAAY;SACZ,WAAW;SACZ;kBAEA,KAAK;SACD;QACD;OACH,EAET,qBAACD;MAAK,KAAI;MAAK,MAAK;;OAClB,qBAACA;QAAK,WAAU;QAAS,KAAK;mBAC5B,oBAACC;SAAK,MAAK;SAAK,GAAE;SAAS,IAAG;SAAY,IAAI;mBAAK;UAE5C,EACP,oBAACA;SAAK,MAAK;SAAK,IAAG;mBAChB,KAAK;UACD;SACF;OACN,KAAK,OACJ,qBAACD;QAAK,WAAU;QAAS,KAAK;mBAC5B,oBAACC;SAAK,MAAK;SAAK,GAAE;SAAS,IAAG;SAAY,IAAI;mBAAK;UAE5C,EACP,oBAACA;SAAK,MAAK;SAAK,IAAG;mBAChB,KAAK;UACD;SACF;OAER,KAAK,YACJ,qBAACD;QAAK,WAAU;QAAS,KAAK;mBAC5B,oBAACC;SAAK,MAAK;SAAK,GAAE;SAAS,IAAG;SAAY,IAAI;mBAAK;UAE5C,EACP,oBAACA;SAAK,MAAK;SAAK,IAAG;mBAChB,KAAK;UACD;SACF;OAER,KAAK,mBACJ,qBAACD;QAAK,WAAU;QAAS,KAAK;mBAC5B,oBAACC;SAAK,MAAK;SAAK,GAAE;SAAS,IAAG;SAAY,IAAI;mBAAK;UAE5C,EACP,oBAACA;SAAK,MAAK;mBAAM,KAAK;UAAuB;SACxC;;OAEJ;MACF;IAEV;GACD,SAAS,SACP,oBAAC;IACO;IACN,SAAS;IACT,UAAU;KACV;KA9NC,cAAc,aAgOnB;GACG;;AAMX,MAAM,0BAA0B,EAC9B,MACA,SACA,eAKI;CACJ,MAAM,SAAS,WAA+B;CAC9C,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,QAAQ,UAAU;CACxB,MAAM,CAAC,QAAQ,aAAa,SAA4C,KAAK;CAC7E,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,CAAC,cAAc,mBAAmB,yBAAsB,IAAI,KAAK,CAAC;CAExE,MAAM,aAAa,YACjB,OAAO,WAAmB;AACxB,YAAU,KAAK;AACf,kCAAgB,IAAI,KAAK,CAAC;AAC1B,aAAW,KAAK;AAChB,MAAI;AAEF,aADa,MAAM,OAAO,gBAAgB,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC,CACtD;UACT;AACN,SAAM,OAAO,mCAAmC;YACxC;AACR,cAAW,MAAM;;IAGrB,CAAC,QAAQ,MAAM,CAChB;AAED,iBAAgB;AACd,aAAW,KAAK,GAAG;IAClB,CAAC,KAAK,IAAI,WAAW,CAAC;CAEzB,MAAM,cAAc,YAAY,YAAY;AAC1C,QAAM,QAAQ,KAAK,GAAG;AACtB,aAAW,KAAK,GAAG;IAClB;EAAC,KAAK;EAAI;EAAS;EAAW,CAAC;CAElC,MAAM,eAAe,YAAY,YAAY;AAC3C,QAAM,SAAS,KAAK,GAAG;AACvB,aAAW,KAAK,GAAG;IAClB;EAAC,KAAK;EAAI;EAAU;EAAW,CAAC;CAEnC,MAAM,kBAAkB,aAAa,UAAkB;AACrD,mBAAiB,SAAS;GACxB,MAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,OAAI,KAAK,IAAI,MAAM,CACjB,MAAK,OAAO,MAAM;OAElB,MAAK,IAAI,MAAM;AAEjB,UAAO;IACP;IACD,EAAE,CAAC;AAEN,KAAI,QACF,QACE,oBAACD;EAAK,OAAM;EAAS,SAAQ;EAAS,IAAG;YACvC,oBAACC;GAAK,GAAE;aAAS;IAAiB;GAC7B;AAIX,KAAI,CAAC,OAAQ,QAAO;CAEpB,MAAM,cAAgC;EACpC;GACE,OAAO;GACP,OACE,oBAACA;IAAK,MAAK;IAAK,IAAG;cAChB,OAAO;KACH;GAET,UAAU,OAAO;GAClB;EACD;GACE,OAAO;GACP,OACE,oBAACA;IAAK,MAAK;IAAK,IAAG;cAChB,OAAO;KACH;GAEV;EACD;GACE,OAAO;GACP,OAAO,gBAAgB,OAAO,aAAa;GAC5C;EACD;GACE,OAAO;GACP,OACE,qBAACA;IAAK,MAAK;IAAK,IAAG;;KAChB,OAAO;KAAQ;KAAE,OAAO;;KACpB;GAEV;EACD;GACE,OAAO;GACP,OACE,oBAACA;IAAK,MAAK;IAAK,IAAG;cAChB,OAAO;KACH;GAET,QAAQ,CAAC,OAAO;GACjB;EACD;GACE,OAAO;GACP,OACE,oBAACA;IAAK,MAAK;IAAK,IAAG;cAChB,OAAO;KACH;GAET,QAAQ,CAAC,OAAO;GACjB;EACD;GACE,OAAO;GACP,OAAO,OAAO,EAAE,OAAO,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC;GACpD;EACD;GACE,OAAO;GACP,OAAO,OAAO,YACV,OAAO,EAAE,OAAO,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,GAC5C;GACJ,QAAQ,CAAC,OAAO;GACjB;EACD;GACE,OAAO;GACP,OACE,OAAO,cACN,OAAO,eAAe,OAAO,WAAW,aACvC,oBAACA;IAAK,MAAK;IAAK,IAAG;cAChB,eAAe,OAAO,WAAW,OAAO,YAAY;KAChD,GACL;GACN,QAAQ,EACN,OAAO,cACN,OAAO,eAAe,OAAO,WAAW;GAE5C;EACD;GACE,OAAO;GACP,OAAO,OAAO;GACd,QAAQ,CAAC,OAAO;GACjB;EACD;GACE,OAAO;GACP,OAAO,OAAO;GACd,QAAQ,CAAC,OAAO;GACjB;EACF;AAED,QACE,qBAACD;EAAK,WAAU;EAAS,KAAI;;GAE3B,qBAACA;IAAK,OAAM;IAAS,KAAI;;KACvB,oBAACC;MAAK,IAAI;MAAK,IAAG;gBACf,OAAO;OACH;KACP,oBAACA;MAAK,MAAK;MAAK,IAAG;MAAa,GAAE;gBAC/B,OAAO;OACH;KACP,qBAACA;MAAK,MAAK;MAAK,GAAE;;OACf,OAAO;OAAQ;OAAE,OAAO;;OACpB;;KACF;GAGP,qBAACD;IAAK,KAAI;;KACR,oBAAC;MACC,SAAQ;MACR,SAAQ;MACR,MAAK;MACL,MAAM;MACN,eAAe,WAAW,KAAK,GAAG;OAClC;KACD,OAAO,KAAK,SACX,oBAAC;MACC,SAAQ;MACR,SAAQ;MACR,MAAK;MACL,MAAM;MACN,SAAS;OACT;KAEH,OAAO,KAAK,UACX,oBAAC;MACC,SAAQ;MACR,SAAQ;MACR,MAAK;MACL,MAAM;MACN,SAAS;OACT;;KAEC;GAGP,qBAAC;IAAM,GAAE;IAAK,QAAO;IAAK;eACxB,oBAACC;KAAK,MAAK;KAAK,IAAI;KAAK,IAAG;eAAK;MAE1B,EACP,oBAAC;KAAW,OAAO;KAAa,SAAS;MAAK;KACxC;GAGP,OAAO,WACN,qBAAC;IAAM,GAAE;IAAK,QAAO;IAAK;eACxB,oBAACA;KAAK,MAAK;KAAK,IAAI;KAAK,IAAG;eAAK;MAE1B,EACP,oBAAC;KAAK;eAAO,KAAK,UAAU,OAAO,SAAS,MAAM,EAAE;MAAQ;KACtD;GAIT,OAAO,SACN,qBAAC;IAAM,GAAE;IAAK,QAAO;IAAK;eACxB,oBAACA;KAAK,MAAK;KAAK,IAAI;KAAK,IAAG;eAAK;MAE1B,EACP,oBAAC;KAAM,GAAE;KAAK,QAAO;KAAK;eACxB,oBAACA;MACC,MAAK;MACL,OAAO;OACL,YAAY;OACZ,WAAW;OACZ;gBAEA,OAAO;OACH;MACD;KACF;GAIT,OAAO,QAAQ,OAAO,KAAK,SAAS,KACnC,qBAAC;IAAM,GAAE;IAAK,QAAO;IAAK;eACxB,qBAACA;KAAK,MAAK;KAAK,IAAI;KAAK,IAAG;;MAAK;MACxB,OAAO,KAAK;MAAO;;MACrB,EACP,oBAACD;KACC,WAAU;KACV,OAAO;MAAE,WAAW;MAAK,WAAW;MAAQ;eAE5C,qBAAC;MAAM;iBACL,oBAAC,MAAM,mBACL,qBAAC,MAAM;OACL,oBAAC,MAAM;QAAG,OAAO,EAAE,OAAO,IAAI;kBAAE;SAAgB;OAChD,oBAAC,MAAM;QAAG,OAAO,EAAE,OAAO,IAAI;kBAAE;SAAe;OAC/C,oBAAC,MAAM,gBAAG,YAAkB;UACnB,GACC,EACd,oBAAC,MAAM,mBACJ,OAAO,KAAK,KAAK,KAAe,MAC/B,qBAAC,MAAM;OAEL,OAAO,IAAI,OAAO,EAAE,QAAQ,WAAW,GAAG;OAC1C,SAAS,IAAI,aAAa,gBAAgB,EAAE,GAAG;;QAE/C,oBAAC,MAAM,gBACL,oBAAC;SAAM,MAAK;SAAK,SAAQ;mBACtB,IAAI;UACC,GACC;QACX,oBAAC,MAAM,gBACL,oBAACC;SAAK,MAAK;SAAK,GAAE;SAAS,IAAG;mBAC3B,IAAI,KAAK,IAAI,UAAU,CAAC,oBAAoB;UACxC,GACE;QACX,qBAAC,MAAM,iBACL,oBAACA;SAAK,MAAK;mBAAM,IAAI;UAAe,EACnC,aAAa,IAAI,EAAE,IAAI,IAAI,QAC1B,oBAAC;SAAK;SAAM,IAAG;mBACZ,KAAK,UAAU,IAAI,MAAM,MAAM,EAAE;UAC7B,IAEA;;SArBN,EAsBI,CACX,GACU;OACR;MACH;KACD;;GAEL"}