@hotmeshio/long-tail 0.22.1 → 0.22.2

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 (291) hide show
  1. package/build/api/escalations/accumulate.js +38 -19
  2. package/build/api/escalations/resolve-batch.js +18 -11
  3. package/build/api/roles.js +4 -0
  4. package/build/api/scan-codes/badge-policy.d.ts +10 -0
  5. package/build/api/scan-codes/badge-policy.js +72 -0
  6. package/build/api/scan-codes/choice.js +16 -10
  7. package/build/api/scan-codes/context.d.ts +45 -1
  8. package/build/api/scan-codes/context.js +51 -3
  9. package/build/api/scan-codes/execute.js +73 -35
  10. package/build/api/scan-codes/grant.d.ts +27 -0
  11. package/build/api/scan-codes/grant.js +67 -0
  12. package/build/api/scan-codes/hold.d.ts +10 -0
  13. package/build/api/scan-codes/hold.js +98 -0
  14. package/build/api/scan-codes/identity.d.ts +5 -2
  15. package/build/api/scan-codes/identity.js +26 -8
  16. package/build/api/scan-codes/subject.d.ts +15 -0
  17. package/build/api/scan-codes/subject.js +68 -0
  18. package/build/api/scan-codes/verb-accumulate.d.ts +24 -0
  19. package/build/api/scan-codes/verb-accumulate.js +147 -0
  20. package/build/api/scan-codes/verb-fill.d.ts +6 -0
  21. package/build/api/scan-codes/verb-fill.js +152 -0
  22. package/build/api/scan-codes/verbs-subject.d.ts +14 -0
  23. package/build/api/scan-codes/verbs-subject.js +270 -0
  24. package/build/api/scan-codes/verbs.d.ts +1 -21
  25. package/build/api/scan-codes/verbs.js +26 -115
  26. package/build/index.d.ts +1 -0
  27. package/build/index.js +8 -2
  28. package/build/lib/db/schemas/037_scan_gtin_and_subject_grants.sql +27 -0
  29. package/build/routes/escalations/acting.d.ts +5 -0
  30. package/build/routes/escalations/acting.js +8 -1
  31. package/build/routes/scan-codes.js +3 -0
  32. package/build/services/iam/acting-identity.d.ts +29 -4
  33. package/build/services/iam/acting-identity.js +60 -17
  34. package/build/services/iam/ephemeral.d.ts +21 -0
  35. package/build/services/iam/ephemeral.js +32 -1
  36. package/build/services/iam/sql.d.ts +10 -0
  37. package/build/services/iam/sql.js +32 -3
  38. package/build/services/role/badge-grant.d.ts +5 -0
  39. package/build/services/role/badge-grant.js +36 -0
  40. package/build/services/role/seed.js +5 -0
  41. package/build/services/role/types.d.ts +14 -0
  42. package/build/services/role/types.js +5 -0
  43. package/build/services/scan-code/index.d.ts +3 -2
  44. package/build/services/scan-code/index.js +7 -1
  45. package/build/services/scan-code/parse.d.ts +23 -20
  46. package/build/services/scan-code/parse.js +45 -90
  47. package/build/services/scan-code/read.js +1 -0
  48. package/build/services/scan-code/sql.d.ts +3 -3
  49. package/build/services/scan-code/sql.js +11 -8
  50. package/build/services/scan-code/validate-subject.d.ts +7 -0
  51. package/build/services/scan-code/validate-subject.js +158 -0
  52. package/build/services/scan-code/validate.d.ts +7 -0
  53. package/build/services/scan-code/validate.js +94 -18
  54. package/build/services/scan-code/write.d.ts +1 -0
  55. package/build/services/scan-code/write.js +9 -3
  56. package/build/shared/form-validation/field-validator.js +4 -0
  57. package/build/shared/form-validation/index.d.ts +1 -0
  58. package/build/shared/form-validation/index.js +1 -0
  59. package/build/shared/form-validation/x-lt-scan.d.ts +52 -0
  60. package/build/shared/form-validation/x-lt-scan.js +166 -0
  61. package/build/shared/scan-code/gtin.d.ts +5 -0
  62. package/build/shared/scan-code/gtin.js +25 -0
  63. package/build/shared/scan-code/index.d.ts +2 -0
  64. package/build/shared/scan-code/index.js +10 -0
  65. package/build/shared/scan-code/parse.d.ts +46 -0
  66. package/build/shared/scan-code/parse.js +133 -0
  67. package/build/system/mcp-servers/admin/scan-codes.js +10 -4
  68. package/build/system/mcp-servers/admin/schemas.d.ts +754 -23
  69. package/build/system/mcp-servers/admin/schemas.js +57 -4
  70. package/build/system/mcp-servers/human-queue-schemas.d.ts +6 -6
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/build/types/escalation.d.ts +2 -0
  73. package/build/types/escalation.js +3 -1
  74. package/build/types/index.d.ts +2 -2
  75. package/build/types/index.js +8 -1
  76. package/build/types/scan-code/constants.d.ts +182 -0
  77. package/build/types/{scan-code.js → scan-code/constants.js} +72 -11
  78. package/build/types/scan-code/index.d.ts +3 -0
  79. package/build/types/scan-code/index.js +17 -0
  80. package/build/types/scan-code/response.d.ts +140 -0
  81. package/build/types/scan-code/response.js +2 -0
  82. package/build/types/scan-code/rule.d.ts +199 -0
  83. package/build/types/scan-code/rule.js +2 -0
  84. package/build/types/startup.d.ts +3 -1
  85. package/dashboard/dist/assets/{AdminDashboard-BbWve-Ax.js → AdminDashboard-DBW12qQt.js} +2 -2
  86. package/dashboard/dist/assets/{AdminDashboard-BbWve-Ax.js.map → AdminDashboard-DBW12qQt.js.map} +1 -1
  87. package/dashboard/dist/assets/{AgentConfigPage-M-9eTKhP.js → AgentConfigPage-CmHv8U9M.js} +2 -2
  88. package/dashboard/dist/assets/{AgentConfigPage-M-9eTKhP.js.map → AgentConfigPage-CmHv8U9M.js.map} +1 -1
  89. package/dashboard/dist/assets/{AgentDetailPage-CsakSlx5.js → AgentDetailPage-D1scIbz-.js} +3 -3
  90. package/dashboard/dist/assets/{AgentDetailPage-CsakSlx5.js.map → AgentDetailPage-D1scIbz-.js.map} +1 -1
  91. package/dashboard/dist/assets/{AgentsPage-Cj_cRTT1.js → AgentsPage-BA_ai9HJ.js} +2 -2
  92. package/dashboard/dist/assets/{AgentsPage-Cj_cRTT1.js.map → AgentsPage-BA_ai9HJ.js.map} +1 -1
  93. package/dashboard/dist/assets/{AvailableEscalationsPage-BXJmMBM1.js → AvailableEscalationsPage-C2_5aEFW.js} +2 -2
  94. package/dashboard/dist/assets/{AvailableEscalationsPage-BXJmMBM1.js.map → AvailableEscalationsPage-C2_5aEFW.js.map} +1 -1
  95. package/dashboard/dist/assets/{BotPicker-CGB16rYU.js → BotPicker-BZo4Kp4a.js} +2 -2
  96. package/dashboard/dist/assets/{BotPicker-CGB16rYU.js.map → BotPicker-BZo4Kp4a.js.map} +1 -1
  97. package/dashboard/dist/assets/{BulkAssignModal-MjxcU7N1.js → BulkAssignModal-BFhyxY2T.js} +2 -2
  98. package/dashboard/dist/assets/{BulkAssignModal-MjxcU7N1.js.map → BulkAssignModal-BFhyxY2T.js.map} +1 -1
  99. package/dashboard/dist/assets/CapabilitiesPage-CvOX6vAc.js +2 -0
  100. package/dashboard/dist/assets/{CapabilitiesPage-BxadotXn.js.map → CapabilitiesPage-CvOX6vAc.js.map} +1 -1
  101. package/dashboard/dist/assets/{CollapsibleSection-BBNpP-6h.js → CollapsibleSection-GCJsV9Oq.js} +2 -2
  102. package/dashboard/dist/assets/{CollapsibleSection-BBNpP-6h.js.map → CollapsibleSection-GCJsV9Oq.js.map} +1 -1
  103. package/dashboard/dist/assets/{ConfirmDeleteModal-D_kAbT_D.js → ConfirmDeleteModal-CAgYLcef.js} +2 -2
  104. package/dashboard/dist/assets/{ConfirmDeleteModal-D_kAbT_D.js.map → ConfirmDeleteModal-CAgYLcef.js.map} +1 -1
  105. package/dashboard/dist/assets/CountdownTimer-Dik2z0M_.js +2 -0
  106. package/dashboard/dist/assets/{CountdownTimer-CI_JOAvk.js.map → CountdownTimer-Dik2z0M_.js.map} +1 -1
  107. package/dashboard/dist/assets/{CredentialsPage-C9OA1Q2J.js → CredentialsPage-twd2xCOW.js} +2 -2
  108. package/dashboard/dist/assets/{CredentialsPage-C9OA1Q2J.js.map → CredentialsPage-twd2xCOW.js.map} +1 -1
  109. package/dashboard/dist/assets/{CronLabel-sxLLBf2I.js → CronLabel-DdnIuudX.js} +2 -2
  110. package/dashboard/dist/assets/{CronLabel-sxLLBf2I.js.map → CronLabel-DdnIuudX.js.map} +1 -1
  111. package/dashboard/dist/assets/{ElapsedCell-jH9m8Dgl.js → ElapsedCell-DCctVv5R.js} +2 -2
  112. package/dashboard/dist/assets/{ElapsedCell-jH9m8Dgl.js.map → ElapsedCell-DCctVv5R.js.map} +1 -1
  113. package/dashboard/dist/assets/{EntityTimelinePanel-Dl3Nr2kk.js → EntityTimelinePanel-CMnskyWv.js} +2 -2
  114. package/dashboard/dist/assets/{EntityTimelinePanel-Dl3Nr2kk.js.map → EntityTimelinePanel-CMnskyWv.js.map} +1 -1
  115. package/dashboard/dist/assets/{EscalationListSchemaPage-DAK6It5J.js → EscalationListSchemaPage-VfCn6WDb.js} +3 -3
  116. package/dashboard/dist/assets/{EscalationListSchemaPage-DAK6It5J.js.map → EscalationListSchemaPage-VfCn6WDb.js.map} +1 -1
  117. package/dashboard/dist/assets/{EscalationListView-CAHbdxKR.js → EscalationListView-CGQZxcC-.js} +2 -2
  118. package/dashboard/dist/assets/{EscalationListView-CAHbdxKR.js.map → EscalationListView-CGQZxcC-.js.map} +1 -1
  119. package/dashboard/dist/assets/{EscalationSchemaPage-DotfAMCL.js → EscalationSchemaPage-BX0tx-PM.js} +3 -3
  120. package/dashboard/dist/assets/{EscalationSchemaPage-DotfAMCL.js.map → EscalationSchemaPage-BX0tx-PM.js.map} +1 -1
  121. package/dashboard/dist/assets/{EscalationTimeline-DqmFydnU.js → EscalationTimeline-DKoSM56J.js} +2 -2
  122. package/dashboard/dist/assets/{EscalationTimeline-DqmFydnU.js.map → EscalationTimeline-DKoSM56J.js.map} +1 -1
  123. package/dashboard/dist/assets/{EscalationTitleSelect-BpRquguO.js → EscalationTitleSelect-DWGLBOmS.js} +2 -2
  124. package/dashboard/dist/assets/{EscalationTitleSelect-BpRquguO.js.map → EscalationTitleSelect-DWGLBOmS.js.map} +1 -1
  125. package/dashboard/dist/assets/{EscalationsOverview-DtGOqnP4.js → EscalationsOverview-C2XoguaA.js} +2 -2
  126. package/dashboard/dist/assets/{EscalationsOverview-DtGOqnP4.js.map → EscalationsOverview-C2XoguaA.js.map} +1 -1
  127. package/dashboard/dist/assets/{EventTable-DSHqKyX2.js → EventTable-CBUWq7--.js} +2 -2
  128. package/dashboard/dist/assets/{EventTable-DSHqKyX2.js.map → EventTable-CBUWq7--.js.map} +1 -1
  129. package/dashboard/dist/assets/{FilterBar-Dxd0wNSW.js → FilterBar-8IdbleZ9.js} +2 -2
  130. package/dashboard/dist/assets/{FilterBar-Dxd0wNSW.js.map → FilterBar-8IdbleZ9.js.map} +1 -1
  131. package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js +2 -0
  132. package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js.map +1 -0
  133. package/dashboard/dist/assets/{GraphInvokePage-ChqqGkro.js → GraphInvokePage-CUvoPzsW.js} +2 -2
  134. package/dashboard/dist/assets/{GraphInvokePage-ChqqGkro.js.map → GraphInvokePage-CUvoPzsW.js.map} +1 -1
  135. package/dashboard/dist/assets/{HomePage-ByKesG8w.js → HomePage-BP7v9GLJ.js} +2 -2
  136. package/dashboard/dist/assets/{HomePage-ByKesG8w.js.map → HomePage-BP7v9GLJ.js.map} +1 -1
  137. package/dashboard/dist/assets/{ListToolbar-Ddz_S2av.js → ListToolbar-Cnacuwoy.js} +2 -2
  138. package/dashboard/dist/assets/{ListToolbar-Ddz_S2av.js.map → ListToolbar-Cnacuwoy.js.map} +1 -1
  139. package/dashboard/dist/assets/{McpOverview-CVe13tEv.js → McpOverview-C2JoNoDA.js} +2 -2
  140. package/dashboard/dist/assets/{McpOverview-CVe13tEv.js.map → McpOverview-C2JoNoDA.js.map} +1 -1
  141. package/dashboard/dist/assets/{McpQueryDetailPage-BQYF2Mjq.js → McpQueryDetailPage-C_nih0w-.js} +2 -2
  142. package/dashboard/dist/assets/{McpQueryDetailPage-BQYF2Mjq.js.map → McpQueryDetailPage-C_nih0w-.js.map} +1 -1
  143. package/dashboard/dist/assets/{McpQueryPage-DZi5lm7s.js → McpQueryPage-U_wNXow2.js} +2 -2
  144. package/dashboard/dist/assets/{McpQueryPage-DZi5lm7s.js.map → McpQueryPage-U_wNXow2.js.map} +1 -1
  145. package/dashboard/dist/assets/{McpRunDetailPage-DreARTE1.js → McpRunDetailPage-DtKoJq6J.js} +2 -2
  146. package/dashboard/dist/assets/{McpRunDetailPage-DreARTE1.js.map → McpRunDetailPage-DtKoJq6J.js.map} +1 -1
  147. package/dashboard/dist/assets/{McpRunsPage-DmO0YVhT.js → McpRunsPage-CnYtfGhf.js} +2 -2
  148. package/dashboard/dist/assets/{McpRunsPage-DmO0YVhT.js.map → McpRunsPage-CnYtfGhf.js.map} +1 -1
  149. package/dashboard/dist/assets/{OperationsPage-DpjCO85T.js → OperationsPage-C7hupIer.js} +2 -2
  150. package/dashboard/dist/assets/{OperationsPage-DpjCO85T.js.map → OperationsPage-C7hupIer.js.map} +1 -1
  151. package/dashboard/dist/assets/{OperatorDashboard-Vv_MEBkv.js → OperatorDashboard-fVuLn2D5.js} +2 -2
  152. package/dashboard/dist/assets/{OperatorDashboard-Vv_MEBkv.js.map → OperatorDashboard-fVuLn2D5.js.map} +1 -1
  153. package/dashboard/dist/assets/{PersonaDetailPage-CW-2uBHY.js → PersonaDetailPage-C-4o8lPw.js} +2 -2
  154. package/dashboard/dist/assets/{PersonaDetailPage-CW-2uBHY.js.map → PersonaDetailPage-C-4o8lPw.js.map} +1 -1
  155. package/dashboard/dist/assets/{PersonasPage-CO6yYQdm.js → PersonasPage-BL1FwLmv.js} +2 -2
  156. package/dashboard/dist/assets/{PersonasPage-CO6yYQdm.js.map → PersonasPage-BL1FwLmv.js.map} +1 -1
  157. package/dashboard/dist/assets/{PortalPage-DcNqhBlg.js → PortalPage-tJG5sgb1.js} +2 -2
  158. package/dashboard/dist/assets/{PortalPage-DcNqhBlg.js.map → PortalPage-tJG5sgb1.js.map} +1 -1
  159. package/dashboard/dist/assets/{ProcessDetailPage-BuipGZcC.js → ProcessDetailPage-Dz_jY4Yt.js} +2 -2
  160. package/dashboard/dist/assets/{ProcessDetailPage-BuipGZcC.js.map → ProcessDetailPage-Dz_jY4Yt.js.map} +1 -1
  161. package/dashboard/dist/assets/{ProcessesListPage-D9DYntvl.js → ProcessesListPage-Cbn9cter.js} +2 -2
  162. package/dashboard/dist/assets/{ProcessesListPage-D9DYntvl.js.map → ProcessesListPage-Cbn9cter.js.map} +1 -1
  163. package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js +8 -0
  164. package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js.map +1 -0
  165. package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js +8 -0
  166. package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js.map +1 -0
  167. package/dashboard/dist/assets/{RolesPage-0QJOBSzF.js → RolesPage-NwmMvZFa.js} +2 -2
  168. package/dashboard/dist/assets/{RolesPage-0QJOBSzF.js.map → RolesPage-NwmMvZFa.js.map} +1 -1
  169. package/dashboard/dist/assets/{RunAsSelector-Dh4lyyRo.js → RunAsSelector-tgEooTyU.js} +2 -2
  170. package/dashboard/dist/assets/{RunAsSelector-Dh4lyyRo.js.map → RunAsSelector-tgEooTyU.js.map} +1 -1
  171. package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js +2 -0
  172. package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js.map +1 -0
  173. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js +2 -0
  174. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js.map +1 -0
  175. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js +2 -0
  176. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js.map +1 -0
  177. package/dashboard/dist/assets/{StickyPagination-BSUyf5ja.js → StickyPagination-CsTI_gvJ.js} +2 -2
  178. package/dashboard/dist/assets/{StickyPagination-BSUyf5ja.js.map → StickyPagination-CsTI_gvJ.js.map} +1 -1
  179. package/dashboard/dist/assets/{StreamMessageDetail--tp7l2Sd.js → StreamMessageDetail-auRlvjTh.js} +2 -2
  180. package/dashboard/dist/assets/{StreamMessageDetail--tp7l2Sd.js.map → StreamMessageDetail-auRlvjTh.js.map} +1 -1
  181. package/dashboard/dist/assets/{SwimlaneTimeline-CxBZ2THh.js → SwimlaneTimeline-BLoVHYAd.js} +2 -2
  182. package/dashboard/dist/assets/{SwimlaneTimeline-CxBZ2THh.js.map → SwimlaneTimeline-BLoVHYAd.js.map} +1 -1
  183. package/dashboard/dist/assets/{TaskDetailPage-BJ1QrmPH.js → TaskDetailPage-BPsZ1bK_.js} +2 -2
  184. package/dashboard/dist/assets/{TaskDetailPage-BJ1QrmPH.js.map → TaskDetailPage-BPsZ1bK_.js.map} +1 -1
  185. package/dashboard/dist/assets/{TasksListPage-5BydGWmt.js → TasksListPage-BNGM74yT.js} +2 -2
  186. package/dashboard/dist/assets/{TasksListPage-5BydGWmt.js.map → TasksListPage-BNGM74yT.js.map} +1 -1
  187. package/dashboard/dist/assets/{TimeAgo-CCnz84Y4.js → TimeAgo-BnAHXGK7.js} +2 -2
  188. package/dashboard/dist/assets/{TimeAgo-CCnz84Y4.js.map → TimeAgo-BnAHXGK7.js.map} +1 -1
  189. package/dashboard/dist/assets/{TimestampCell-D0ru7Lya.js → TimestampCell-J4yae6mc.js} +2 -2
  190. package/dashboard/dist/assets/{TimestampCell-D0ru7Lya.js.map → TimestampCell-J4yae6mc.js.map} +1 -1
  191. package/dashboard/dist/assets/{ToolTestPanel-3Kpofmen.js → ToolTestPanel-BdzzgXDu.js} +2 -2
  192. package/dashboard/dist/assets/{ToolTestPanel-3Kpofmen.js.map → ToolTestPanel-BdzzgXDu.js.map} +1 -1
  193. package/dashboard/dist/assets/{TopicDetailPage-BaBXD_AK.js → TopicDetailPage-DJKg8lb7.js} +2 -2
  194. package/dashboard/dist/assets/{TopicDetailPage-BaBXD_AK.js.map → TopicDetailPage-DJKg8lb7.js.map} +1 -1
  195. package/dashboard/dist/assets/{TopicsPage-Cnm1AAjh.js → TopicsPage-DQV0WxG6.js} +2 -2
  196. package/dashboard/dist/assets/{TopicsPage-Cnm1AAjh.js.map → TopicsPage-DQV0WxG6.js.map} +1 -1
  197. package/dashboard/dist/assets/{UserName-CXsdPiMZ.js → UserName-Ct09nGh5.js} +2 -2
  198. package/dashboard/dist/assets/{UserName-CXsdPiMZ.js.map → UserName-Ct09nGh5.js.map} +1 -1
  199. package/dashboard/dist/assets/{WorkflowExecutionPage-zx3AUJFd.js → WorkflowExecutionPage-B5WJOsee.js} +2 -2
  200. package/dashboard/dist/assets/{WorkflowExecutionPage-zx3AUJFd.js.map → WorkflowExecutionPage-B5WJOsee.js.map} +1 -1
  201. package/dashboard/dist/assets/{WorkflowsDashboard-DfAGK1l7.js → WorkflowsDashboard-Hc87TRgD.js} +2 -2
  202. package/dashboard/dist/assets/{WorkflowsDashboard-DfAGK1l7.js.map → WorkflowsDashboard-Hc87TRgD.js.map} +1 -1
  203. package/dashboard/dist/assets/{WorkflowsOverview-QIYvoa13.js → WorkflowsOverview-CJQbyOj-.js} +2 -2
  204. package/dashboard/dist/assets/{WorkflowsOverview-QIYvoa13.js.map → WorkflowsOverview-CJQbyOj-.js.map} +1 -1
  205. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGgO3hyB.js → YamlWorkflowDetailPage-BMeED677.js} +8 -8
  206. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGgO3hyB.js.map → YamlWorkflowDetailPage-BMeED677.js.map} +1 -1
  207. package/dashboard/dist/assets/{YamlWorkflowsPage-CEsHm0B9.js → YamlWorkflowsPage-BMMg0Id6.js} +2 -2
  208. package/dashboard/dist/assets/{YamlWorkflowsPage-CEsHm0B9.js.map → YamlWorkflowsPage-BMMg0Id6.js.map} +1 -1
  209. package/dashboard/dist/assets/{agents-v_HH3Rji.js → agents-CdFkgFvg.js} +2 -2
  210. package/dashboard/dist/assets/{agents-v_HH3Rji.js.map → agents-CdFkgFvg.js.map} +1 -1
  211. package/dashboard/dist/assets/{bots-bwvWYrXz.js → bots-Mj3LHWWg.js} +2 -2
  212. package/dashboard/dist/assets/{bots-bwvWYrXz.js.map → bots-Mj3LHWWg.js.map} +1 -1
  213. package/dashboard/dist/assets/{capabilities-D4vaw_nQ.js → capabilities-Dw1ObK2-.js} +2 -2
  214. package/dashboard/dist/assets/{capabilities-D4vaw_nQ.js.map → capabilities-Dw1ObK2-.js.map} +1 -1
  215. package/dashboard/dist/assets/{controlplane-CiiZ6LJF.js → controlplane-DcNE1APv.js} +2 -2
  216. package/dashboard/dist/assets/{controlplane-CiiZ6LJF.js.map → controlplane-DcNE1APv.js.map} +1 -1
  217. package/dashboard/dist/assets/{escalation-columns-Dv-MB3eC.js → escalation-columns-D364Trpy.js} +2 -2
  218. package/dashboard/dist/assets/{escalation-columns-Dv-MB3eC.js.map → escalation-columns-D364Trpy.js.map} +1 -1
  219. package/dashboard/dist/assets/{index-IJmtbuLh.js → index-B3veJ698.js} +2 -2
  220. package/dashboard/dist/assets/{index-IJmtbuLh.js.map → index-B3veJ698.js.map} +1 -1
  221. package/dashboard/dist/assets/index-BQeHJHYN.js +67 -0
  222. package/dashboard/dist/assets/index-BQeHJHYN.js.map +1 -0
  223. package/dashboard/dist/assets/{index-D2VKBMng.js → index-BRGTmoYY.js} +2 -2
  224. package/dashboard/dist/assets/{index-D2VKBMng.js.map → index-BRGTmoYY.js.map} +1 -1
  225. package/dashboard/dist/assets/{index-C4Lce2ET.js → index-Bd6-KmBE.js} +3 -3
  226. package/dashboard/dist/assets/{index-C4Lce2ET.js.map → index-Bd6-KmBE.js.map} +1 -1
  227. package/dashboard/dist/assets/{index-CcuvGdvf.js → index-BiVce3n0.js} +2 -2
  228. package/dashboard/dist/assets/{index-CcuvGdvf.js.map → index-BiVce3n0.js.map} +1 -1
  229. package/dashboard/dist/assets/{index-D6pBLZFu.js → index-BmNAVd4s.js} +2 -2
  230. package/dashboard/dist/assets/{index-D6pBLZFu.js.map → index-BmNAVd4s.js.map} +1 -1
  231. package/dashboard/dist/assets/{index-CjenRVX_.js → index-Bq5XNEzD.js} +2 -2
  232. package/dashboard/dist/assets/{index-CjenRVX_.js.map → index-Bq5XNEzD.js.map} +1 -1
  233. package/dashboard/dist/assets/{index-CzjUgFt_.js → index-DPStdq4T.js} +2 -2
  234. package/dashboard/dist/assets/{index-CzjUgFt_.js.map → index-DPStdq4T.js.map} +1 -1
  235. package/dashboard/dist/assets/index-DcppjzP5.css +1 -0
  236. package/dashboard/dist/assets/{index-C3WutFpT.js → index-DkcI4V_H.js} +2 -2
  237. package/dashboard/dist/assets/{index-C3WutFpT.js.map → index-DkcI4V_H.js.map} +1 -1
  238. package/dashboard/dist/assets/{index-2tzsxFat.js → index-Dyotfa_k.js} +2 -2
  239. package/dashboard/dist/assets/{index-2tzsxFat.js.map → index-Dyotfa_k.js.map} +1 -1
  240. package/dashboard/dist/assets/{index-C_ISDOWJ.js → index-MDD4JYtu.js} +2 -2
  241. package/dashboard/dist/assets/{index-C_ISDOWJ.js.map → index-MDD4JYtu.js.map} +1 -1
  242. package/dashboard/dist/assets/index-WSm8bgE7.js +3 -0
  243. package/dashboard/dist/assets/index-WSm8bgE7.js.map +1 -0
  244. package/dashboard/dist/assets/{index-BLB77tc8.js → index-eDm6cz0F.js} +2 -2
  245. package/dashboard/dist/assets/{index-BLB77tc8.js.map → index-eDm6cz0F.js.map} +1 -1
  246. package/dashboard/dist/assets/{knowledge-D1YP2NzS.js → knowledge-Bafewjxk.js} +2 -2
  247. package/dashboard/dist/assets/{knowledge-D1YP2NzS.js.map → knowledge-Bafewjxk.js.map} +1 -1
  248. package/dashboard/dist/assets/{mcp-query-D5jUdZwN.js → mcp-query-BzTtIG90.js} +2 -2
  249. package/dashboard/dist/assets/{mcp-query-D5jUdZwN.js.map → mcp-query-BzTtIG90.js.map} +1 -1
  250. package/dashboard/dist/assets/{mcp-Bb5psC61.js → mcp-vLIutbnc.js} +2 -2
  251. package/dashboard/dist/assets/{mcp-Bb5psC61.js.map → mcp-vLIutbnc.js.map} +1 -1
  252. package/dashboard/dist/assets/{personas-CDndbkp4.js → personas-WD40EDS_.js} +2 -2
  253. package/dashboard/dist/assets/{personas-CDndbkp4.js.map → personas-WD40EDS_.js.map} +1 -1
  254. package/dashboard/dist/assets/{pipelines-Dq3kNhKu.js → pipelines-DFwULWs3.js} +2 -2
  255. package/dashboard/dist/assets/{pipelines-Dq3kNhKu.js.map → pipelines-DFwULWs3.js.map} +1 -1
  256. package/dashboard/dist/assets/{tasks-BlpDsWCy.js → tasks-La_-WAUn.js} +2 -2
  257. package/dashboard/dist/assets/{tasks-BlpDsWCy.js.map → tasks-La_-WAUn.js.map} +1 -1
  258. package/dashboard/dist/assets/{topics-C0YaR9fu.js → topics-CzYMlvqm.js} +2 -2
  259. package/dashboard/dist/assets/{topics-C0YaR9fu.js.map → topics-CzYMlvqm.js.map} +1 -1
  260. package/dashboard/dist/assets/{useDebouncedValue-B-KC5ba3.js → useDebouncedValue-C0FQyANW.js} +2 -2
  261. package/dashboard/dist/assets/{useDebouncedValue-B-KC5ba3.js.map → useDebouncedValue-C0FQyANW.js.map} +1 -1
  262. package/dashboard/dist/assets/{useNamespace-Dkr5g2Ac.js → useNamespace-WW_XjAb3.js} +2 -2
  263. package/dashboard/dist/assets/{useNamespace-Dkr5g2Ac.js.map → useNamespace-WW_XjAb3.js.map} +1 -1
  264. package/dashboard/dist/assets/{useYamlActivityEvents-BANBOshA.js → useYamlActivityEvents-B3YxPeFt.js} +2 -2
  265. package/dashboard/dist/assets/{useYamlActivityEvents-BANBOshA.js.map → useYamlActivityEvents-B3YxPeFt.js.map} +1 -1
  266. package/dashboard/dist/assets/{yaml-workflows-BLYoJfmB.js → yaml-workflows-COHOjdhF.js} +2 -2
  267. package/dashboard/dist/assets/{yaml-workflows-BLYoJfmB.js.map → yaml-workflows-COHOjdhF.js.map} +1 -1
  268. package/dashboard/dist/index.html +2 -2
  269. package/docs/dashboard.md +1 -1
  270. package/docs/hitl/x-lt-scan.md +51 -0
  271. package/docs/hitl-guide.md +2 -0
  272. package/docs/scan-codes.md +221 -21
  273. package/package.json +1 -1
  274. package/build/types/scan-code.d.ts +0 -317
  275. package/dashboard/dist/assets/CapabilitiesPage-BxadotXn.js +0 -2
  276. package/dashboard/dist/assets/CountdownTimer-CI_JOAvk.js +0 -2
  277. package/dashboard/dist/assets/ResolverForm-BVG8X0sS.js +0 -8
  278. package/dashboard/dist/assets/ResolverForm-BVG8X0sS.js.map +0 -1
  279. package/dashboard/dist/assets/RoleDetailPage-KCXDqoJz.js +0 -8
  280. package/dashboard/dist/assets/RoleDetailPage-KCXDqoJz.js.map +0 -1
  281. package/dashboard/dist/assets/ScanCodesPage-CUhCz-Yr.js +0 -2
  282. package/dashboard/dist/assets/ScanCodesPage-CUhCz-Yr.js.map +0 -1
  283. package/dashboard/dist/assets/ScanSchemeDetailPage-qzXKNqJK.js +0 -2
  284. package/dashboard/dist/assets/ScanSchemeDetailPage-qzXKNqJK.js.map +0 -1
  285. package/dashboard/dist/assets/ScanStationPage-D8e8cG3t.js +0 -2
  286. package/dashboard/dist/assets/ScanStationPage-D8e8cG3t.js.map +0 -1
  287. package/dashboard/dist/assets/index-CT-FN6CW.js +0 -3
  288. package/dashboard/dist/assets/index-CT-FN6CW.js.map +0 -1
  289. package/dashboard/dist/assets/index-Dh8MJl3L.css +0 -1
  290. package/dashboard/dist/assets/index-N71QQ3J5.js +0 -67
  291. package/dashboard/dist/assets/index-N71QQ3J5.js.map +0 -1
@@ -1,317 +0,0 @@
1
- import type { ContainerSelector } from './facets';
2
- /**
3
- * Scan-code types: schemes, rules, and execute outcomes.
4
- *
5
- * A scan code is a plain string from any input source (barcode scanner,
6
- * RFID reader, manual entry) encoding version:category:target. The scheme
7
- * (selected by the leading TWO digits, 10-99) declares which escalation
8
- * metadata facet the target resolves against and how the string parses.
9
- * The rule (selected by the single-digit category, 0-9) is an ordered list
10
- * of condition/action steps over the escalation surface plus a fallback.
11
- * Both indices are assigned automatically; operators name entries, not numbers.
12
- */
13
- import type { ScanChoice, ScanPresentedChoice } from './scan-choice';
14
- export declare const SCAN_ENCODINGS: {
15
- /** Digits only, fixed widths — fits UPC-A/EAN/ITF labels. */
16
- readonly FIXED: "fixed";
17
- /** Delimiter-separated text — Code 128 / QR / DataMatrix labels. */
18
- readonly DELIMITED: "delimited";
19
- };
20
- export type ScanEncoding = (typeof SCAN_ENCODINGS)[keyof typeof SCAN_ENCODINGS];
21
- export declare const SCAN_SCHEME_KINDS: {
22
- /** The ECA model: the target resolves against escalations; the rule's steps run. */
23
- readonly ACTION: "action";
24
- /**
25
- * A badge: the target resolves against users (target_facet names the
26
- * lt_users.metadata key it matches) and a match mints a short-lived
27
- * acting-identity grant. Identity schemes never walk steps.
28
- */
29
- readonly IDENTITY: "identity";
30
- };
31
- export type ScanSchemeKind = (typeof SCAN_SCHEME_KINDS)[keyof typeof SCAN_SCHEME_KINDS];
32
- export declare const SCAN_VERBS: {
33
- readonly SHOW_DETAIL: "show-detail";
34
- readonly SHOW_LIST: "show-list";
35
- readonly CLAIM: "claim";
36
- readonly CLAIM_SHOW_DETAIL: "claim-show-detail";
37
- readonly RELEASE: "release";
38
- readonly RESOLVE: "resolve";
39
- readonly ESCALATE: "escalate";
40
- readonly CANCEL: "cancel";
41
- /**
42
- * Add the scanned item to an accumulator escalation. With
43
- * `params.accumulate.containerFacet` the scan locates the ITEM's own row
44
- * and joins it to the container that shares that facet value, writing
45
- * both rows in one statement; without it the scan locates the CONTAINER
46
- * and adds `params.itemKey`.
47
- */
48
- readonly ACCUMULATE: "accumulate";
49
- /** Locate the row, then PRESENT its reality + the step's labeled choices. */
50
- readonly PRESENT: "present";
51
- };
52
- export type ScanVerb = (typeof SCAN_VERBS)[keyof typeof SCAN_VERBS];
53
- /** Verbs that change escalation state (may carry a confirm prompt). */
54
- export declare const SCAN_MUTATING_VERBS: readonly ScanVerb[];
55
- export declare const SCAN_OUTCOMES: {
56
- /** A step matched and its action ran (or the located item is returned for show verbs). */
57
- readonly EXECUTED: "executed";
58
- /** A show-list step matched multiple escalations. */
59
- readonly MATCHED_LIST: "matched_list";
60
- /** A confirm step located its target; the client must confirm before the per-id action runs. */
61
- readonly CONFIRM_REQUIRED: "confirm_required";
62
- /** No step matched; render the rule's fallback screen. */
63
- readonly NO_MATCH_FALLBACK: "no_match_fallback";
64
- /** Unknown/disabled scheme version or category. */
65
- readonly UNCONFIGURED: "unconfigured";
66
- /** The code string did not parse under the scheme. */
67
- readonly INVALID_CODE: "invalid_code";
68
- /** The caller's roles do not permit the matched action. */
69
- readonly FORBIDDEN: "forbidden";
70
- /** A concurrent actor won the row (double scan). */
71
- readonly CONFLICT: "conflict";
72
- /** An identity scan matched a user; the response carries the acting grant. */
73
- readonly IDENTITY_PRIMED: "identity_primed";
74
- /** An identity scan matched no user; render the rule's fallback screen. */
75
- readonly IDENTITY_UNKNOWN: "identity_unknown";
76
- /**
77
- * The step/choice requires an acting identity the request cannot satisfy
78
- * (no grant, a dead grant, or a write-incapable principal); render the
79
- * rule's notPrimed screen. Distinct from FORBIDDEN — the acting user's own
80
- * RBAC was never consulted.
81
- */
82
- readonly NOT_PRIMED: "not_primed";
83
- /** A PRESENT step located its row; the response carries reality + choices. */
84
- readonly CHOICES: "choices";
85
- /**
86
- * An accumulate step in item mode located the item's row, but no pending
87
- * container carries its facet: the previous container closed and its
88
- * successor has not parked yet. The response carries the item row and the
89
- * facet so the station can say "container closing, scan again".
90
- */
91
- readonly NO_OPEN_CONTAINER: "no_open_container";
92
- };
93
- export type ScanOutcome = (typeof SCAN_OUTCOMES)[keyof typeof SCAN_OUTCOMES];
94
- export declare const SCAN_AVAILABILITY: {
95
- readonly AVAILABLE: "available";
96
- readonly CLAIMED: "claimed";
97
- readonly MINE: "mine";
98
- readonly ANY: "any";
99
- };
100
- export type ScanAvailability = (typeof SCAN_AVAILABILITY)[keyof typeof SCAN_AVAILABILITY];
101
- export declare const SCAN_CARDINALITY: {
102
- readonly FIRST: "first";
103
- readonly MANY: "many";
104
- };
105
- export type ScanCardinality = (typeof SCAN_CARDINALITY)[keyof typeof SCAN_CARDINALITY];
106
- /** Metadata keys stamped onto escalations touched by a scan (provenance). */
107
- export declare const SCAN_PROVENANCE_KEYS: {
108
- readonly SCHEME: "scanScheme";
109
- readonly CATEGORY: "scanCategory";
110
- readonly ACTION_NAME: "scanActionName";
111
- readonly SCANNED_AT: "scannedAt";
112
- /** The authenticated device principal when a mutation ran under an acting identity. */
113
- readonly STATION: "scanStation";
114
- };
115
- /** The ephemeral-keystore label acting-identity grants are minted under. */
116
- export declare const ACTING_IDENTITY_LABEL = "acting_identity";
117
- /**
118
- * Template tokens usable inside step params (item key, resolver payload,
119
- * metadata). Beyond the three scan tokens, `{claim.<facet>}` reads the
120
- * acting user's single live claim and `{item.<facet>}` reads the row an
121
- * item-mode accumulate step located; a token that cannot resolve fails the
122
- * step instead of writing the literal.
123
- */
124
- export declare const SCAN_TEMPLATE_TOKENS: {
125
- readonly TARGET: "{scan.target}";
126
- readonly CATEGORY: "{scan.category}";
127
- readonly SCANNED_AT: "{scan.scannedAt}";
128
- };
129
- /** Facet-bag token prefixes: `{claim.orderId}`, `{item.binKey}`. */
130
- export declare const SCAN_TEMPLATE_BAGS: {
131
- readonly CLAIM: "claim";
132
- readonly ITEM: "item";
133
- };
134
- export type ScanTemplateBag = (typeof SCAN_TEMPLATE_BAGS)[keyof typeof SCAN_TEMPLATE_BAGS];
135
- export interface ScanScheme {
136
- version: number;
137
- name: string;
138
- description: string | null;
139
- /**
140
- * The metadata key the scanned target resolves against: an escalation
141
- * metadata key for action schemes, an lt_users.metadata key (e.g.
142
- * badge_id) for identity schemes.
143
- */
144
- target_facet: string;
145
- encoding: ScanEncoding;
146
- delimiter: string;
147
- target_length: number | null;
148
- kind: ScanSchemeKind;
149
- /** Identity kind only: how long a minted acting grant lives (1–86400 s). */
150
- grant_ttl_seconds: number | null;
151
- /** Identity kind only: 0 = TTL-bound; n = the grant covers n scan requests. */
152
- grant_max_uses: number;
153
- enabled: boolean;
154
- created_at?: string;
155
- updated_at?: string;
156
- }
157
- /** The Condition: a view over the escalation surface. */
158
- export interface ScanStepQuery {
159
- /** Expected queue(s). Empty/absent = any role visible to the caller. */
160
- roles?: string[];
161
- status?: 'pending' | 'resolved' | 'cancelled';
162
- availability?: ScanAvailability;
163
- /** Extra metadata guards beyond the scheme's target facet. */
164
- facets?: Record<string, any>;
165
- }
166
- export interface ScanStepParams {
167
- /** Canned resolver payload template (resolve). Values may use SCAN_TEMPLATE_TOKENS. */
168
- resolverPayload?: Record<string, any>;
169
- /** Metadata to merge/stamp (claim, resolve, escalate). */
170
- metadata?: Record<string, any>;
171
- /** Target role for escalate (a new escalation is created there). */
172
- targetRole?: string;
173
- /** Escalation type for the created escalation (escalate). */
174
- escalationType?: string;
175
- /** Description for the created escalation (escalate). */
176
- description?: string;
177
- /** How to close the located escalation before an escalate creates the next one. */
178
- closeCurrent?: 'resolve' | 'cancel';
179
- /** Claim window (claim verbs). */
180
- durationMinutes?: number;
181
- /** Item key template (accumulate, container-locate mode). Defaults to `{scan.target}`. */
182
- itemKey?: string;
183
- /** Accumulate verb options. */
184
- accumulate?: ScanAccumulateParams;
185
- }
186
- export interface ScanAccumulateParams {
187
- /**
188
- * Item-locate mode: the scanned target is the item's own escalation (found
189
- * by the scheme facet); the container is the pending accumulator whose
190
- * metadata carries this facet with the same value the item row holds.
191
- */
192
- containerFacet?: string;
193
- /** Expected container queue(s); intersects with the actor's write scope. Alias of `container.roles`. */
194
- containerRoles?: string[];
195
- /**
196
- * Item-locate mode: which pending accumulator may be the container, beyond
197
- * sharing the facet. Types, subtypes and extra facet guards narrow the pick;
198
- * the item's own row is never its container.
199
- */
200
- container?: ContainerSelector & {
201
- roles?: string[];
202
- };
203
- /** Item-locate mode: also write the item's row as the reciprocal (default true). */
204
- reciprocal?: boolean;
205
- }
206
- export interface ScanStep {
207
- query: ScanStepQuery;
208
- cardinality?: ScanCardinality;
209
- verb: ScanVerb;
210
- /** Present = two-phase: locate, then the client confirms before the per-id action runs. */
211
- confirm?: {
212
- prompt: string;
213
- };
214
- params?: ScanStepParams;
215
- /** PRESENT only: the labeled choice set rendered under the located reality. */
216
- choices?: ScanChoice[];
217
- /**
218
- * PRESENT only: when the step holds exactly ONE confirm-less choice, the
219
- * scan executes it directly instead of presenting — one scan, one action.
220
- * An unsatisfied identity requirement still stops over at the badge screen.
221
- */
222
- autoSelectSingle?: boolean;
223
- /** The step executes only under a real acting identity (badge or a write-capable login). */
224
- requireActingIdentity?: boolean;
225
- }
226
- export interface ScanRuleFallback {
227
- /** Markdown rendered on the fallback screen when no step matches. */
228
- markdown?: string;
229
- /** Optional dashboard route to land on instead of the default list. */
230
- route?: string;
231
- }
232
- export interface ScanRule {
233
- scheme_version: number;
234
- /** Single digit, '0'–'9' (auto-assigned). */
235
- category: string;
236
- /** Friendly label — this is what gets printed next to the physical code. */
237
- name: string;
238
- steps: ScanStep[];
239
- fallback: ScanRuleFallback;
240
- /** The "scan your badge" screen — rendered when an acting identity is required and absent. */
241
- notPrimed: ScanRuleFallback;
242
- enabled: boolean;
243
- created_at?: string;
244
- updated_at?: string;
245
- }
246
- export interface ParsedScanCode {
247
- version: number;
248
- category: string;
249
- target: string;
250
- }
251
- export interface ScanExecuteRequest {
252
- code: string;
253
- /** An acting-identity grant (eph:v1:acting_identity:*) — verbs run as that user. */
254
- actingToken?: string;
255
- /** The grant being replaced by an identity scan — best-effort revoked on mint. */
256
- previousActingToken?: string;
257
- }
258
- /** Action awaiting client-side confirmation (CONFIRM_REQUIRED). */
259
- export interface ScanPendingAction {
260
- escalationId: string;
261
- verb: ScanVerb;
262
- prompt: string;
263
- params?: ScanStepParams;
264
- }
265
- export interface ScanExecuteResponse {
266
- outcome: ScanOutcome;
267
- /** The parsed code, echoed for display/toasts. */
268
- parsed?: ParsedScanCode;
269
- /** Rule identity (name is the friendly label). */
270
- rule?: {
271
- schemeVersion: number;
272
- category: string;
273
- name: string;
274
- };
275
- /** Index of the step that matched. */
276
- stepIndex?: number;
277
- verb?: ScanVerb;
278
- /** Single matched escalation (show-detail, claim, resolve, escalate, cancel outcomes). */
279
- escalation?: Record<string, any>;
280
- /** Multiple matches (show-list). */
281
- escalations?: Record<string, any>[];
282
- total?: number;
283
- /** Query the client uses to build the list-page URL (show-list). */
284
- listQuery?: ScanStepQuery & {
285
- targetFacet: string;
286
- target: string;
287
- };
288
- pendingAction?: ScanPendingAction;
289
- fallback?: ScanRuleFallback;
290
- /** The "scan your badge" screen (NOT_PRIMED, or beside withheld choices). */
291
- notPrimed?: ScanRuleFallback;
292
- /** The labeled choice set (CHOICES). */
293
- choices?: ScanPresentedChoice[];
294
- /** NO_OPEN_CONTAINER: the facet the located item names and no pending container carries. */
295
- container?: {
296
- facet: string;
297
- value: string;
298
- };
299
- /** CHOICES: the step would auto-execute its single choice — only identity stopped it. */
300
- autoSelect?: boolean;
301
- /** The badged person (IDENTITY_PRIMED) — id lets the client recognize its own claims. */
302
- actor?: {
303
- id: string;
304
- displayName: string;
305
- };
306
- /** The minted acting grant (IDENTITY_PRIMED) — eph:v1:acting_identity:<uuid>. */
307
- actingToken?: string;
308
- /** Display copy of the grant's expiry (the keystore enforces it). */
309
- expiresAt?: string;
310
- /**
311
- * IDENTITY_PRIMED: the scheme's `grant_max_uses`. `1` is a single-shot
312
- * grant the client drops after the first request that carries it; `0`
313
- * lives until its TTL.
314
- */
315
- maxUses?: number;
316
- error?: string;
317
- }
@@ -1,2 +0,0 @@
1
- import{a as i,j as e}from"./vendor-query-DvWWuNIB.js";import{u as I}from"./capabilities-D4vaw_nQ.js";import{T as w,S}from"./ToolTestPanel-3Kpofmen.js";import{T as k}from"./ToolPill-CQCsVdzD.js";import{P}from"./PageHeader-CMd3f4bz.js";import{F as E,b as T,a as L}from"./FilterBar-Dxd0wNSW.js";import{aU as R}from"./index-N71QQ3J5.js";import{L as A,x as O,bY as $,l as K,bs as q,q as D,bj as F,E as Y,a2 as B,j as M}from"./vendor-icons-CeVtUKyP.js";import"./mcp-Bb5psC61.js";import"./RunAsSelector-Dh4lyyRo.js";import"./BotPicker-CGB16rYU.js";import"./bots-bwvWYrXz.js";import"./vendor-react-_9U4mKFr.js";import"./helpers-DzO-OGPe.js";const y={Communication:B,Analysis:Y,Media:F,Data:D,Automation:q,Development:K,System:$,Reference:O,Other:A},p="capability-run";function ae(){const{data:n,isLoading:c}=I(),a=R(),[l,N]=i.useState(""),[m,g]=i.useState(null),[t,x]=i.useState(null),u=(n==null?void 0:n.categories)??[],C=(n==null?void 0:n.totalTools)??0,j=i.useMemo(()=>{let s=u;if(m&&(s=s.filter(r=>r.name===m)),!l.trim())return s;const o=l.toLowerCase();return s.map(r=>({...r,tools:r.tools.filter(v=>v.name.toLowerCase().includes(o)||v.description.toLowerCase().includes(o)||v.serverName.toLowerCase().includes(o))})).filter(r=>r.tools.length>0)},[u,l,m]),f=t?`${t.serverId}:${t.tool.name}`:null,h=i.useRef(null),d=i.useRef(!1);i.useEffect(()=>{a&&f!==h.current&&(h.current=f,t?a.setPanel(e.jsx("div",{className:"h-full overflow-y-auto",children:e.jsx(w,{serverId:t.serverId,serverName:t.serverName,tool:t.tool,onClose:()=>x(null)})}),{key:p,width:420}):(d.current=!1,a.closePanel(p)))},[t,f,a]),i.useEffect(()=>{if(!(!a||!t)){if(a.open&&a.ownerKey===p){d.current=!0;return}d.current&&(d.current=!1,x(null))}},[a,t]);const b=i.useRef(a);return b.current=a,i.useEffect(()=>()=>{var s;h.current&&((s=b.current)==null||s.closePanel(p))},[]),e.jsxs("div",{children:[e.jsx(P,{title:"Capabilities"}),!c&&u.length>0&&e.jsxs(E,{children:[e.jsx(T,{label:"Category",value:m??"",onChange:s=>g(s||null),options:u.map(s=>({value:s.name,label:s.name}))}),e.jsx(L,{label:"Search",value:l,onChange:N,placeholder:`${C} capabilities…`})]}),c?e.jsx("div",{className:"animate-pulse space-y-8",children:[1,2,3].map(s=>e.jsxs("div",{children:[e.jsx("div",{className:"h-4 bg-surface-sunken rounded w-28 mb-4"}),e.jsx("div",{className:"space-y-3",children:[1,2,3].map(o=>e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"h-4 bg-surface-sunken rounded w-36"}),e.jsx("div",{className:"h-3 bg-surface-sunken rounded w-full"})]},o))})]},s))}):j.length===0?e.jsx("p",{className:"text-sm text-text-tertiary mt-8",children:l||m?"No capabilities match your filter.":"No capabilities registered yet."}):e.jsx("div",{className:"space-y-10",children:j.map(s=>{const o=y[s.name]??y.Other;return e.jsxs("div",{children:[e.jsxs("div",{className:"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border",children:[e.jsx(o,{className:"w-3 h-3 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"section-h2",children:s.name}),e.jsx("span",{className:"text-xs text-text-quaternary",children:s.tools.length})]}),e.jsx("div",{className:"divide-y divide-surface-border/30",children:s.tools.map(r=>e.jsx(W,{tool:r,isSelected:(t==null?void 0:t.tool.name)===r.name&&(t==null?void 0:t.serverId)===r.serverId,onSelect:()=>x({serverId:r.serverId,serverName:r.serverName,tool:{name:r.name,description:r.description,inputSchema:r.inputSchema}})},`${r.serverId}-${r.name}`))})]},s.name)})})]})}function W({tool:n,isSelected:c,onSelect:a}){return e.jsxs("div",{role:"button",tabIndex:0,onClick:a,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&a()},className:"group relative py-2 px-3 -mx-3 rounded-md cursor-pointer hover:bg-surface-hover/30 transition-colors text-left",children:[c&&e.jsx("span",{className:"absolute left-0 top-1 bottom-1 w-0.5 bg-accent rounded-full"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(k,{name:n.name,size:"md"}),e.jsx("p",{className:"flex-1 min-w-0 truncate text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors",children:n.description}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsx(S,{name:n.serverName,serverId:n.serverId}),e.jsx("span",{title:"Try it",children:e.jsx(M,{className:`w-3 h-3 transition-opacity ${c?"text-accent opacity-100":"text-accent opacity-0 group-hover:opacity-100"}`,strokeWidth:1.5})})]})]})]})}export{ae as CapabilitiesPage};
2
- //# sourceMappingURL=CapabilitiesPage-BxadotXn.js.map
@@ -1,2 +0,0 @@
1
- import{a as r,j as n}from"./vendor-query-DvWWuNIB.js";import{ba as c,az as m,bb as i}from"./index-N71QQ3J5.js";const a=[{maxMs:0,color:"text-status-error"},{maxMs:300*1e3,color:"text-status-error"},{maxMs:900*1e3,color:"text-status-warning"},{maxMs:1/0,color:"text-text-secondary"}];function x(t){if(t<=0)return a[0].color;for(const e of a)if(t<e.maxMs)return e.color;return a[a.length-1].color}function M({until:t}){const[e,s]=r.useState(()=>new Date(t).getTime()-Date.now());r.useEffect(()=>{const o=setInterval(()=>{s(new Date(t).getTime()-Date.now())},1e3);return()=>clearInterval(o)},[t]);const l=r.useMemo(()=>{const o=new Date(t);return[{label:"ms",value:String(Math.max(0,e))},{label:"until",value:o.toISOString()},{label:"local",value:c(o,"MMM d, yyyy h:mm:ss a")}]},[t,e]);return n.jsx(m,{options:l,children:n.jsx("span",{className:`text-xs font-mono ${x(e)}`,children:i(e)})})}export{M as C};
2
- //# sourceMappingURL=CountdownTimer-CI_JOAvk.js.map
@@ -1,8 +0,0 @@
1
- import{j as s,a as g}from"./vendor-query-DvWWuNIB.js";import{ai as it,aj as zt,ab as Kt,aR as ke,aS as Zt,aA as dt,aT as we,Z as Ee,aw as Ae,aU as Ie,aV as Ce,m as Oe,p as Te,U as _e,aW as Re,aX as Le,z as Se,aY as Me,aZ as Fe,aM as $e,a_ as Pe,a$ as De,b0 as We,S as Ue,b1 as Je,b2 as Ge,az as qe,K as He,A as Ve,b as Be,b3 as Ye,a as Xe,b4 as ze,b5 as Ke,b6 as Ze,af as Qe,am as ts,b7 as es,b8 as ss,b9 as ns,ba as rs,bb as is,bc as os,bd as as,be as ls,a2 as cs,M as ds,bf as us,bg as xs,k as ps,bh as fs,bi as ms,a1 as gs,aL as bs,bj as hs,bk as ys,bl as js,G as Ns,bm as vs,bn as ks,bo as ws,bp as Es,bq as As,br as Is,q as Cs,a6 as Os,bs as Ts,ax as _s,bt as Rs,bu as Ls,bv as Ss,bw as Ms,bx as Fs,aq as $s,by as Ps,f as Ds,aC as Ws,bz as Us,bA as Js,bB as Gs,an as Qt,_ as qs,W as Hs,bC as Vs,a5 as te}from"./vendor-icons-CeVtUKyP.js";import{m as ee,g as xt,H as Bs,e as Ys,a as H,r as pt,s as Xs,b as zs,c as se}from"./EscalationListView-CAHbdxKR.js";import{af as z,al as Ks,aW as ft,$ as Zs,a9 as Qs,s as tn,aX as en,J as sn,aY as nn,O as rn,aZ as on,ar as an,a_ as ln,aU as cn,i as dn,M as ne,au as un,av as xn,aw as pn}from"./index-N71QQ3J5.js";import{L as ot}from"./vendor-react-_9U4mKFr.js";import{S as fn}from"./StatusBadge-DHVwxre2.js";import{E as mn}from"./constants-CeBBTzf5.js";import{V as gn}from"./WorkflowPill-Dg7BDTyM.js";const bn={SCHEMA_VALIDATION:"schema_validation"};function hn(t){return typeof t=="object"&&t!==null&&t.code===bn.SCHEMA_VALIDATION&&Array.isArray(t.violations)}function Ot(t,e={}){const r=ee(e,t),n={_form_schema:t};for(const[i,o]of Object.entries(t.properties??{})){const a=o.type==="object"?{}:"";n[i]=r[i]??o.default??a}return JSON.stringify(n,null,2)}function U(t,e){const r=e==null?void 0:e.title;if(typeof r=="string"&&r.trim().length>0)return r.trim();const n=t.split(/[_-]+/).filter(Boolean);return n.length<=1?t:n.map(i=>yn(i)?i:i.charAt(0).toUpperCase()+i.slice(1)).join(" ")}function yn(t){return t.length>1&&t===t.toUpperCase()&&/[A-Z]/.test(t)}function re({errors:t,schema:e}){const r=n=>{const i=document.querySelector(`[data-field-key="${n}"]`);i&&(i.scrollIntoView({behavior:"smooth",block:"center"}),i.focus({preventScroll:!0}))};return t.length===0?s.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No errors to display."}):s.jsxs("div",{className:"space-y-1",role:"alert","aria-live":"polite",children:[s.jsxs("p",{className:"text-2xs font-semibold uppercase tracking-wider text-status-error mb-4",children:[t.length," ",t.length===1?"issue":"issues"," to resolve"]}),s.jsx("div",{className:"space-y-1.5",children:t.map(({field:n,message:i})=>{var o;return s.jsxs("button",{onClick:()=>r(n),className:"w-full text-left flex items-start gap-3 px-3 py-2.5 rounded hover:bg-status-error/5 transition-colors group",children:[s.jsx(it,{className:"w-3.5 h-3.5 mt-0.5 shrink-0 text-status-error/60 group-hover:text-status-error transition-colors"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-2xs font-semibold text-text-primary leading-snug",children:U(n,(o=e==null?void 0:e.properties)==null?void 0:o[n])}),s.jsx("p",{className:"text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors leading-snug mt-0.5",children:i})]})]},n)})}),s.jsx("p",{className:"text-2xs text-text-quaternary mt-4 px-3",children:"Click an issue to scroll to and focus the field."})]})}const jn=/\{\{\s*([^{}]+?)\s*\}\}/g;function st(t){return typeof t=="string"&&/\{\{[^{}]+\}\}/.test(t)}function Z(t,e){if(!e)return;const r=t.indexOf("."),n=e[r===-1?t:t.slice(0,r)];if(r===-1)return n;if(!(n===null||typeof n!="object"))return xt(n,t.slice(r+1))}function mt(t,e){let r=!1;const n=t.replace(jn,(i,o)=>{const a=Z(o,e);return typeof a=="string"&&a.trim().length>0?a:typeof a=="number"&&Number.isFinite(a)?String(a):(r=!0,"")});return r?null:n}const ie="x-lt-options";function Tt(t){return typeof t=="string"||typeof t=="boolean"||typeof t=="number"&&Number.isFinite(t)}function Nn(t){return Array.isArray(t)&&t.length>0&&!t.some(e=>typeof e=="string")}function _t(t){if(Tt(t))return{value:t,label:String(t)};if(t&&typeof t=="object"&&!Array.isArray(t)){const e=t,r=e.value!==void 0?e.value:e.id;if(Tt(r)&&typeof e.label=="string"&&e.label.length>0)return{value:r,label:e.label}}return null}function gt(t,e){if(!t)return;const r=t.enum;if(Array.isArray(r)&&r.length>0)return r.map(a=>({value:a,label:String(a)}));const n=t[ie];if(Nn(n)){const a=n.map(_t).filter(l=>l!==null);return a.length>0?a:void 0}const i=(typeof n=="string"?[n]:Array.isArray(n)?n:[]).filter(a=>typeof a=="string"&&a.length>0);if(i.length===0)return;const o=i.some(st)?[]:void 0;for(const a of i){let l=a;if(st(a)){const c=mt(a,e);if(c===null)continue;l=c}const d=Z(l,e);if(!Array.isArray(d))continue;const u=d.map(_t).filter(c=>c!==null);if(u.length>0)return u}return o}function bt(t,e){const r=(typeof t=="string"?[t]:Array.isArray(t)?t:[]).filter(n=>typeof n=="string"&&n.length>0);if(r.length===0||!e)return[];for(const n of r){let i=n;if(st(n)){const a=mt(n,e);if(a===null)continue;i=a}const o=Z(i,e);if(Array.isArray(o)&&o.length>0)return o}return[]}const vn="x-lt-default-checked";function kn(t,e,r){if((t==null?void 0:t["x-lt-widget"])!=="checklist"||t[vn]!==!0||e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length>0)return null;const n=bt(t["x-lt-source"],r);return n.length===0?null:Object.fromEntries(n.map(i=>[i.id,!0]))}function wn(t,e,r){if((e==null?void 0:e["x-lt-widget"])!=="checklist"||e["x-lt-require-all"]!==!0)return;const i=bt(e["x-lt-source"],r).filter(l=>l.required!==!1);if(i.length===0)return;const o=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{},a=i.filter(l=>!o[l.id]).length;if(a!==0)return`${a} of ${i.length} checks incomplete`}const Rt="Invalid JSON";function nt(t){return(t==null?void 0:t["x-lt-widget"])==="json"}function oe(t){return nt(t)||(t==null?void 0:t[ie])!==void 0}function Lt(t,e){return`${t} ${e}${t===1?"":"s"}`}function ht(t,e){const r=e==null?void 0:e.type;if(typeof r=="string"&&!(t==null||t===""))switch(r){case"string":return typeof t=="string"?void 0:"Expected text";case"number":return typeof t=="number"&&Number.isFinite(t)?void 0:"Expected a number";case"integer":return typeof t=="number"&&Number.isInteger(t)?void 0:"Expected a whole number";case"boolean":return typeof t=="boolean"?void 0:"Expected true or false";case"array":return Array.isArray(t)?void 0:nt(e)&&typeof t=="string"?Rt:"Expected a list";case"object":return typeof t=="object"&&!Array.isArray(t)?void 0:nt(e)&&typeof t=="string"?Rt:"Expected an object";default:return}}function yt(t,e,r){if(!e)return;const n=gt(e,r);if(n!==void 0&&t!==void 0&&t!==null&&t!==""&&!Array.isArray(t)){if(n.length===0)return"No valid options for this selection";if(!n.some(i=>i.value===t))return`Must be one of: ${n.map(i=>String(i.value)).join(", ")}`}if(Array.isArray(t))return oe(e)?En(t,e,n,r):void 0;if(t!==null&&typeof t=="object")return An(t,e,r);if(typeof t=="string"){const i=t.trim();if(i==="")return;const o=q(e.minLength,e["x-lt-min-length"],r);if(o!==void 0&&i.length<o)return`Minimum ${o} character${o===1?"":"s"}`;const a=q(e.maxLength,e["x-lt-max-length"],r);if(a!==void 0&&i.length>a)return`Maximum ${a} characters (${i.length} entered)`;const l=e.pattern;if(l)try{if(!new RegExp(l).test(i))return e["x-lt-pattern-error"]??"Invalid format"}catch{}const d=e.format;if(d==="email"&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i))return"Enter a valid email address";if(d==="uri"&&!/^https?:\/\/.+/.test(i))return"Enter a valid URL"}if(typeof t=="number"){const i=q(e.minimum,e["x-lt-minimum"],r),o=q(e.exclusiveMinimum,void 0,r),a=q(e.maximum,e["x-lt-maximum"],r),l=q(e.exclusiveMaximum,void 0,r);if(i!==void 0&&t<i)return`Minimum value is ${i}`;if(o!==void 0&&t<=o)return`Must be greater than ${o}`;if(a!==void 0&&t>a)return`Maximum value is ${a}`;if(l!==void 0&&t>=l)return`Must be less than ${l}`}}function En(t,e,r,n){if(t.length===0)return;if(r!==void 0){if(r.length===0)return"No valid options for this selection";if(t.some(l=>!r.some(d=>d.value===l)))return`Must be one of: ${r.map(l=>String(l.value)).join(", ")}`}const i=q(e.minItems,void 0,n);if(i!==void 0&&t.length<i)return`At least ${Lt(i,"item")}`;const o=q(e.maxItems,void 0,n);if(o!==void 0&&t.length>o)return`At most ${Lt(o,"item")}`;const a=e.items;if(a&&typeof a=="object"&&!Array.isArray(a)){const l=a;for(let d=0;d<t.length;d++){const u=ht(t[d],l)??yt(t[d],l,n);if(u)return`Item ${d+1}: ${u}`}}}function An(t,e,r){const n=Object.entries(t);if(n.length===0)return;const i=e.propertyNames,o=Array.isArray(i==null?void 0:i.enum)?i.enum.map(String):void 0;if(o){const l=n.find(([d])=>!o.includes(d));if(l)return`Unknown key "${l[0]}". Allowed: ${o.join(", ")}`}const a=e.additionalProperties;if(a&&typeof a=="object"&&!Array.isArray(a)){const l=a;for(const[d,u]of n){const c=ht(u,l)??yt(u,l,r);if(c)return`"${d}": ${c}`}}}function q(t,e,r){if(typeof t=="number")return t;if(typeof e=="string"&&r){const n=e.indexOf(".");if(n!==-1){const i=e.slice(0,n),o=e.slice(n+1),a=r[i];if(a&&typeof a=="object"){const l=o.split(".");let d=a;for(const u of l)if(d=d[u],d===void 0)break;if(typeof d=="number")return d;if(typeof d=="string"){const u=Number(d);if(!Number.isNaN(u))return u}}}}}function ae(t,e,r,n,i){if(!n)return;if(r){if(t==null||typeof t=="boolean"&&!t&&gt(e,i)===void 0||typeof t=="string"&&t.trim()===""||Array.isArray(t)&&t.length===0&&oe(e))return"Required";if(typeof t=="object"&&!Array.isArray(t)&&t!==null){const l=Object.values(t);if(l.length===0||!nt(e)&&l.every(d=>!d))return"Required"}}const o=ht(t,e);if(o)return o;const a=wn(t,e,i);return a||yt(t,e,i)}function St(t){return t!=null&&t!==""&&t!==!1&&t!==0}function In(t){return t==null?"":typeof t=="object"?JSON.stringify(t):String(t)}function Mt(t,e){const r=t.indexOf("."),n=r===-1?t:t.slice(0,r);if(!Bs.includes(n))return{known:!1,value:void 0};const i=e[n];if(r===-1)return{known:!0,value:i};try{return{known:!0,value:xt(i,t.slice(r+1))}}catch{return{known:!0,value:void 0}}}function X(t,e){if(Array.isArray(t))return t.every(d=>X(d,e));if(typeof t!="string"||t.length===0||!e)return!0;const r=t.startsWith("!"),n=r?t.slice(1):t,i=n.indexOf("!="),o=n.indexOf("=");if(i!==-1||o!==-1&&o!==i+1){const d=i!==-1&&(o===-1||i<o),u=d?i:o,c=n.slice(0,u).trim(),x=n.slice(u+(d?2:1)).trim(),{known:p,value:m}=Mt(c,e);if(!p)return!0;const b=In(m)===x,f=d?!b:b;return r?!f:f}const{known:a,value:l}=Mt(n,e);return a?r?!St(l):St(l):!0}function Cn(t,e){return(t==null?void 0:t["x-lt-hide-if-empty"])!==!0?!1:e==null||e===""||e===!1||e===0}const On="x-lt-require-any";function Tn(t){const e=t==null?void 0:t[On];return Array.isArray(e)?e.filter(r=>Array.isArray(r)).map(r=>r.filter(n=>typeof n=="string"&&n.length>0)).filter(r=>r.length>0):[]}function _n(t){return t==null?!1:typeof t=="string"?t.trim().length>0:!0}const Rn="x-lt-require-sum";function Ln(t){const e=t==null?void 0:t[Rn];if(!Array.isArray(e))return[];const r=[];for(const n of e){if(!n||typeof n!="object"||Array.isArray(n))continue;const{fields:i,minimum:o}=n;if(!Array.isArray(i))continue;const a=i.filter(l=>typeof l=="string"&&l.length>0);a.length!==0&&(o!==void 0&&typeof o!="number"||r.push({fields:a,minimum:typeof o=="number"?o:1}))}return r}function Sn(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()!==""){const e=Number(t);if(!Number.isNaN(e))return e}return 0}function le(t,e,r){if(!t)return[];const n=t.properties??{},i=new Set(t.required??[]),o={...r??{},resolver:e,input:e},a=[];for(const[l,d]of Object.entries(n)){if(!X(d["x-lt-showIf"],o))continue;const u=ae(e[l],d,i.has(l),!0,o);u&&a.push({field:l,message:u})}for(const l of Tn(t)){const d=l.filter(c=>n[c]&&X(n[c]["x-lt-showIf"],o));if(d.length===0||d.some(c=>_n(e[c])))continue;const u=d.map(c=>n[c].title??c);a.push({field:d[0],message:`Enter a value for at least one of: ${u.join(", ")}`})}for(const l of Ln(t)){const d=l.fields.filter(x=>n[x]&&X(n[x]["x-lt-showIf"],o));if(d.length===0||d.reduce((x,p)=>x+Sn(e[p]),0)>=l.minimum)continue;const c=d.map(x=>n[x].title??x);a.push({field:d[0],message:`Combined value of ${c.join(", ")} must be at least ${l.minimum}`})}return a}function Mn(t,e,r){if(!t)return[];const n=ee(e,t);return le(t,n,r)}function Ft(t,e){let r;try{r=JSON.parse(t)}catch{return{payload:null,errors:[],parseError:"Invalid JSON"}}const n=r._form_schema;if(n){const a=le(n,r,e);if(a.length>0)return{payload:null,errors:a,parseError:null}}const{_form_schema:i,...o}=r;return{payload:Ys(o,n),errors:[],parseError:null}}const Fn=2600;function $n({hint:t,onLockedClick:e,children:r}){const[n,i]=g.useState(null);g.useEffect(()=>{if(!n)return;const a=setTimeout(()=>i(null),Fn);return()=>clearTimeout(a)},[n]);const o=a=>{if(e==null||e(),t){const l=Math.min(Math.max(a.clientX,96),window.innerWidth-96);i(d=>({x:l,y:a.clientY,n:((d==null?void 0:d.n)??0)+1}))}};return s.jsxs("div",{className:"pb-8 max-w-form",onClick:o,"data-testid":"locked-form-frame",children:[r,t&&n&&s.jsxs("div",{role:"status",className:"fixed z-[60] pointer-events-none flex items-center gap-2 px-3 py-1.5 rounded-md bg-surface-raised border border-surface-border shadow-lg text-xs font-medium text-text-primary whitespace-nowrap animate-[click-hint_2.6s_ease-in-out_both]",style:{left:n.x,top:n.y-12},onAnimationEnd:()=>i(null),"data-testid":"locked-form-hint",children:[s.jsx(zt,{className:"w-3.5 h-3.5 text-accent shrink-0",strokeWidth:1.5}),t]},n.n)]})}function _({children:t,isRequired:e,htmlFor:r}){return s.jsxs("label",{htmlFor:r,className:"block text-2xs font-semibold uppercase tracking-wider text-text-secondary",children:[t,e&&s.jsx("span",{className:"text-status-error ml-0.5",children:"*"})]})}function $({id:t,children:e}){return s.jsx("p",{id:t,className:"text-2xs text-text-tertiary mt-0.5 leading-snug",children:e})}function D({error:t,id:e}){return t?s.jsx("p",{id:e,role:"alert",className:"text-2xs text-status-error mt-1 animate-[field-error-in_0.3s_ease-out]",children:t}):null}function Y(t){return t?"input text-sm w-full mt-1 border-status-error/50 focus:border-status-error animate-[field-shake_0.4s_ease-in-out]":"input text-sm w-full mt-1"}function Pn(t){return t?"select text-sm mt-1 min-w-[min(16rem,100%)] max-w-full border-status-error/50 focus:border-status-error animate-[field-shake_0.4s_ease-in-out]":"select text-sm mt-1 min-w-[min(16rem,100%)] max-w-full"}function Dn({fieldKey:t,value:e,onChange:r,schema:n,isRequired:i}){const o=g.useRef(null),a=(n==null?void 0:n.accept)??void 0,l=U(t,n),d=n==null?void 0:n.description,u=g.useCallback(x=>{var b;const p=(b=x.target.files)==null?void 0:b[0];if(!p)return;const m=new FileReader;m.onload=()=>{typeof m.result=="string"&&r(m.result)},m.readAsDataURL(p)},[r]),c=e.startsWith("data:");return s.jsxs("div",{children:[s.jsx(_,{isRequired:i,children:l}),d&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:d}),s.jsxs("div",{className:"mt-1",children:[s.jsx("input",{ref:o,type:"file",accept:a,onChange:u,className:"hidden"}),s.jsx("button",{type:"button",onClick:()=>{var x;return(x=o.current)==null?void 0:x.click()},className:"btn-secondary text-xs px-3 py-1.5",children:c?"Replace file":"Choose file"}),c&&s.jsx("span",{className:"ml-2 text-xs text-status-success",children:"File attached"})]})]})}function Wn({fieldKey:t,value:e,onChange:r,schema:n,isRequired:i}){const o=U(t,n),a=n==null?void 0:n.description,l=(n==null?void 0:n["x-lt-language"])??"",d=g.useCallback(u=>{if(u.key==="Tab"){u.preventDefault();const c=u.currentTarget,x=c.selectionStart,p=c.selectionEnd,m=e.substring(0,x)+" "+e.substring(p);r(m),requestAnimationFrame(()=>{c.selectionStart=c.selectionEnd=x+2})}},[e,r]);return s.jsxs("div",{children:[s.jsxs(_,{isRequired:i,children:[o,l&&s.jsx("span",{className:"ml-2 text-text-tertiary/60 normal-case font-normal",children:l})]}),a&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:a}),s.jsx("textarea",{value:e,onChange:u=>r(u.target.value),onKeyDown:d,className:"input w-full mt-1 font-mono text-xs leading-relaxed",rows:10,spellCheck:!1})]})}function Un({fieldKey:t,value:e,onChange:r,schema:n,isRequired:i}){const o=g.useRef(null),[a,l]=g.useState(!1),d=U(t,n),u=n==null?void 0:n.description;g.useEffect(()=>{const f=o.current;if(!f)return;const h=f.getContext("2d");if(h&&(h.lineWidth=2,h.lineCap="round",h.strokeStyle="#1E1535",e&&e.startsWith("data:"))){const j=new Image;j.onload=()=>h.drawImage(j,0,0),j.src=e}},[]);const c=g.useCallback(f=>{const h=o.current,j=h.getBoundingClientRect(),A=j.width>0?h.width/j.width:1,y=j.height>0?h.height/j.height:1;return"touches"in f?{x:(f.touches[0].clientX-j.left)*A,y:(f.touches[0].clientY-j.top)*y}:{x:(f.clientX-j.left)*A,y:(f.clientY-j.top)*y}},[]),x=g.useCallback(f=>{var A;l(!0);const h=(A=o.current)==null?void 0:A.getContext("2d");if(!h)return;const j=c(f);h.beginPath(),h.moveTo(j.x,j.y)},[c]),p=g.useCallback(f=>{var A;if(!a)return;const h=(A=o.current)==null?void 0:A.getContext("2d");if(!h)return;const j=c(f);h.lineTo(j.x,j.y),h.stroke()},[a,c]),m=g.useCallback(()=>{l(!1);const f=o.current;f&&r(f.toDataURL("image/png"))},[r]),b=g.useCallback(()=>{const f=o.current;if(!f)return;const h=f.getContext("2d");h&&(h.clearRect(0,0,f.width,f.height),r(""))},[r]);return s.jsxs("div",{children:[s.jsx(_,{isRequired:i,children:d}),u&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:u}),s.jsx("div",{className:"mt-1 max-w-[25rem] border border-surface-border rounded-md overflow-hidden bg-white",children:s.jsx("canvas",{ref:o,width:400,height:150,className:"w-full cursor-crosshair touch-none",onMouseDown:x,onMouseMove:p,onMouseUp:m,onMouseLeave:m,onTouchStart:x,onTouchMove:p,onTouchEnd:m})}),s.jsx("button",{type:"button",onClick:b,className:"mt-1 text-2xs text-text-tertiary hover:text-accent transition-colors",children:"Clear"})]})}function Jn({fieldKey:t,value:e,onChange:r,schema:n,isRequired:i}){const o=U(t,n),a=n==null?void 0:n.description;return s.jsxs("div",{children:[s.jsx(_,{isRequired:i,children:o}),a&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:a}),s.jsx("textarea",{value:e,onChange:l=>r(l.target.value),className:"input w-full mt-1 text-sm leading-relaxed",rows:8,placeholder:"Supports plain text. Markdown formatting is preserved."})]})}function Gn({fieldKey:t,value:e,onChange:r,schema:n,isRequired:i}){const[o,a]=g.useState("write"),l=U(t,n),d=n==null?void 0:n.description;return(n==null?void 0:n.readOnly)===!0?s.jsx(z,{content:e,className:"my-1"}):s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(_,{isRequired:i,children:l}),s.jsx("div",{className:"flex items-center gap-0.5",children:["write","preview"].map(c=>s.jsx("button",{type:"button",onClick:()=>a(c),className:`px-2 py-0.5 text-2xs rounded transition-colors ${o===c?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:c==="write"?"Write":"Preview"},c))})]}),d&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:d}),o==="write"?s.jsx("textarea",{value:e,onChange:c=>r(c.target.value),className:"input w-full mt-1 text-sm font-mono leading-relaxed",rows:10,placeholder:"Write markdown — headings, lists, tables, code blocks, and links all render."}):s.jsx("div",{className:"mt-1 px-3 py-2 border border-surface-border rounded min-h-[120px]",children:e.trim()?s.jsx(z,{content:e}):s.jsx("p",{className:"text-xs text-text-quaternary italic",children:"Nothing to preview."})})]})}const qn=28;function Hn({fieldKey:t,value:e,onChange:r,schema:n,escalationContext:i,isRequired:o,submitAttempted:a,error:l}){const d=(n==null?void 0:n["x-lt-require-all"])===!0,u=bt(n==null?void 0:n["x-lt-source"],i);let c={};try{e&&(c=JSON.parse(e))}catch{}const x=(()=>{const y=kn(n,c,i);return y?JSON.stringify(y):null})();g.useEffect(()=>{x&&r(x)},[x]);const p=y=>r(JSON.stringify({...c,[y]:!c[y]})),m=U(t,n),b=n==null?void 0:n.description;if(u.length===0)return s.jsxs(s.Fragment,{children:[s.jsx("p",{className:"text-xs text-text-tertiary italic mt-1",children:"No checklist items. None of the field's x-lt-source paths resolved on this escalation."}),l&&s.jsx("p",{className:"text-2xs text-status-error mt-1 animate-[field-error-in_0.3s_ease-out]",children:l})]});const f=n==null?void 0:n["x-lt-variant"],h=f==="chips"||f==="rows"?f:d||u.some(y=>y.label.length>qn)?"rows":"chips",j=u.filter(y=>c[y.id]).length,A=(u.find(y=>!c[y.id]&&y.required!==!1)??u[0]).id;return s.jsxs("div",{role:"group","aria-label":m,"aria-required":o||void 0,"aria-invalid":l?!0:void 0,children:[s.jsx(_,{isRequired:o,children:m}),b&&s.jsx($,{children:b}),h==="chips"?s.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:u.map(y=>{const N=c[y.id]??!1,v=!N&&!!a&&j===0&&(y.required||o);return s.jsxs("label",{className:`inline-flex items-center gap-1.5 cursor-pointer select-none px-3.5 py-2 text-sm border transition-colors rounded-[var(--lt-radius-field)] ${N?"bg-accent border-accent text-text-inverse":v?"bg-surface-field border-status-error/60 text-status-error":"bg-surface-field border-surface-field-border text-text-secondary hover:border-accent hover:text-text-primary"}`,children:[s.jsx("input",{type:"checkbox",checked:N,onChange:()=>p(y.id),className:"sr-only","data-testid":`checklist-item-${y.id}`,...y.id===A?{"data-field-key":t}:{}}),N&&s.jsx(Kt,{className:"w-3.5 h-3.5 shrink-0",strokeWidth:2.5}),y.label]},y.id)})}):s.jsx("div",{className:"space-y-2.5 mt-2",children:u.map(y=>{const N=c[y.id]??!1,v=!N&&!!a&&(d?y.required!==!1:j===0&&(y.required||o));return s.jsxs("label",{className:`flex items-start gap-3 cursor-pointer group select-none rounded px-2 py-1 -mx-2 transition-colors ${v?"bg-status-error/5":"hover:bg-surface-hover"}`,children:[s.jsx("input",{type:"checkbox",checked:N,onChange:()=>p(y.id),className:`mt-0.5 w-3.5 h-3.5 shrink-0 rounded ${v?"accent-status-error":"accent-accent"}`,"data-testid":`checklist-item-${y.id}`,...y.id===A?{"data-field-key":t}:{}}),s.jsxs("span",{className:`text-sm leading-snug transition-colors ${v?"text-status-error":"text-text-secondary group-hover:text-text-primary"}`,children:[y.label,y.required&&s.jsx("span",{className:`ml-0.5 text-2xs ${v?"text-status-error":"text-text-quaternary"}`,children:"*"})]})]},y.id)})}),s.jsx("p",{className:"text-2xs text-text-quaternary mt-3 tabular-nums",children:h==="chips"?s.jsxs(s.Fragment,{children:[j," selected",o&&j===0&&!!a&&s.jsx("span",{className:"ml-1 text-text-quaternary/60",children:"(check at least one)"})]}):s.jsxs(s.Fragment,{children:[j," / ",u.length," confirmed",d?s.jsxs("span",{className:"ml-1 text-text-quaternary/60",children:["(all required",u.some(y=>y.required===!1)?" except optional":"",")"]}):o&&j===0&&!!a&&s.jsx("span",{className:"ml-1 text-text-quaternary/60",children:"(at least one required)"})]})}),l&&s.jsx("p",{role:"alert",className:"text-2xs text-status-error mt-1 animate-[field-error-in_0.3s_ease-out]",children:l})]})}const Vn=/\.(png|jpe?g|gif|webp|avif|bmp|svg)(\?.*)?$/i;function Bn(t){var n,i,o,a;const e=t.trim();if(!e)return{kind:"none"};const r=(i=(n=/^data:([^;,]+)[;,]/.exec(e))==null?void 0:n[1])==null?void 0:i.toLowerCase();if(r)return r.startsWith("image/")?{kind:"image",src:e}:{kind:"file",href:e,label:r==="application/pdf"?"PDF":r,isData:!0};if(/^https?:\/\//i.test(e)){if(Vn.test(e))return{kind:"image",src:e};const l=(a=(o=/\.([a-z0-9]{2,5})(\?.*)?$/i.exec(e))==null?void 0:o[1])==null?void 0:a.toUpperCase();return{kind:"file",href:e,label:l??"attachment",isData:!1}}return{kind:"none"}}function $t({fieldKey:t,value:e,schema:r}){const[n,i]=g.useState(!1),o=Bn(e??""),a=t.replace(/[_-]/g," "),l=r==null?void 0:r.description,d=s.jsxs(s.Fragment,{children:[s.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:a}),l&&s.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:l})]});return o.kind==="none"?s.jsxs("div",{children:[d,s.jsx("p",{className:"text-xs text-text-quaternary italic mt-1",children:"No attachment"})]}):o.kind==="image"?s.jsxs("div",{children:[d,s.jsxs("div",{className:"mt-1",children:[s.jsx("button",{type:"button",onClick:()=>i(!0),className:"block rounded-[0.125em] border border-surface-border overflow-hidden hover:border-accent transition-colors",title:"View full size",children:s.jsx("img",{src:o.src,alt:t.replace(/[_-]/g," "),className:"max-h-48 max-w-full object-contain","data-testid":`attachment-image-${t}`})}),n&&s.jsx("div",{className:"fixed inset-0 z-[100] bg-text-primary/60 backdrop-blur-sm flex items-center justify-center p-8 cursor-zoom-out",onClick:()=>i(!1),role:"dialog","aria-modal":"true","aria-label":`${a} — full size`,children:s.jsx("img",{src:o.src,alt:a,className:"max-h-[90vh] max-w-[90vw] object-contain"})})]})]}):s.jsxs("div",{children:[d,s.jsx("div",{className:"mt-1",children:s.jsxs("a",{href:o.href,...o.isData?{download:`${t}.${o.label==="PDF"?"pdf":"bin"}`}:{target:"_blank",rel:"noopener noreferrer"},className:"inline-flex items-center gap-1.5 text-xs text-accent hover:text-accent-hover transition-colors","data-testid":`attachment-link-${t}`,children:[s.jsx(ke,{className:"w-3.5 h-3.5",strokeWidth:1.5}),o.isData?`Download ${o.label}`:`Open ${o.label}`,o.isData?s.jsx(Zt,{className:"w-3 h-3",strokeWidth:1.5}):s.jsx(dt,{className:"w-3 h-3",strokeWidth:1.5})]})})]})}function Yn({fieldKey:t,schema:e,escalationContext:r}){const n=(e==null?void 0:e["x-lt-href"])??"",i=n&&r?H(n,r):n,o=(e==null?void 0:e.title)??(e==null?void 0:e.description)??"Open",a=e==null?void 0:e.description,l=i.startsWith("/"),d=!i.trim();return s.jsxs("div",{"data-field-key":t,children:[s.jsx(_,{children:o}),a&&s.jsx($,{children:a}),s.jsx("div",{className:"mt-1",children:d?s.jsx("span",{className:"text-xs text-text-quaternary italic",children:"No link configured"}):l?s.jsxs(ot,{to:i,className:"inline-flex items-center gap-1 text-xs text-accent hover:text-accent-hover transition-colors","data-testid":`link-widget-${t}`,children:[o,s.jsx(dt,{className:"w-3 h-3 shrink-0",strokeWidth:1.5})]}):s.jsxs("a",{href:i,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 text-xs text-accent hover:text-accent-hover transition-colors","data-testid":`link-widget-${t}`,children:[o,s.jsx(dt,{className:"w-3 h-3 shrink-0",strokeWidth:1.5})]})})]})}function ce({to:t,className:e=""}){return s.jsxs(ot,{to:t,title:"View details",tabIndex:-1,className:`inline-flex items-center justify-center w-6 h-6 shrink-0 rounded border border-surface-border text-accent/70 hover:text-accent hover:border-accent/60 hover:bg-accent/5 transition-colors ${e}`,children:[s.jsx(we,{className:"w-3.5 h-3.5",strokeWidth:2}),s.jsx("span",{className:"sr-only",children:"View details"})]})}const Pt="—";function Xn(t,e){if(!t||!e)return"";const r=t.indexOf(".");if(r===-1)return"";const n=t.slice(0,r),i=t.slice(r+1);try{const o=xt(e[n],i);return typeof o=="string"?o:""}catch{return""}}function zn(t,e){if(!t||t===Pt)return Pt;if(e==="age"){const r=new Date(t);return Number.isNaN(r.getTime())?t:ft(t)}return t}function Kn({fieldKey:t,schema:e,escalationContext:r}){const n=e==null?void 0:e["x-lt-source"],i=(e==null?void 0:e["x-lt-fields"])??[],o=(e==null?void 0:e.title)??"Linked escalation",a=e==null?void 0:e.description,l=Xn(n,r),{data:d,isLoading:u,isError:c}=Ks(l);return s.jsxs("div",{"data-field-key":t,children:[s.jsx(_,{children:o}),a&&s.jsx($,{children:a}),s.jsx("div",{className:"mt-1",children:!l||c?s.jsx("p",{className:"text-xs text-text-quaternary italic","data-testid":`escalation-widget-empty-${t}`,children:"No linked record"}):u?s.jsx(Qn,{}):d?s.jsx(Zn,{esc:d,fields:i,fieldKey:t}):s.jsx("p",{className:"text-xs text-text-quaternary italic",children:"No linked record"})})]})}function Zn({esc:t,fields:e,fieldKey:r}){if(!t)return null;const n=pt(t);return s.jsxs("div",{className:"border-l-2 border-accent-faint pl-3 py-2 space-y-2","data-testid":`escalation-widget-card-${r}`,children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsxs("span",{className:"text-2xs font-semibold uppercase tracking-wider text-text-secondary",children:[t.type,t.subtype&&t.subtype!==t.type?` · ${t.subtype}`:""]}),s.jsx(fn,{status:t.status})]}),t.description&&s.jsx("p",{className:"text-xs text-text-primary leading-snug",children:t.description}),e.length>0&&s.jsx("dl",{className:"grid grid-cols-[auto_1fr] gap-x-4 gap-y-0.5",children:e.map(i=>{const o=H(i.value,n),a=zn(o,i.format);return s.jsxs("div",{className:"contents",children:[s.jsx("dt",{className:"text-2xs text-text-tertiary whitespace-nowrap",children:i.label}),s.jsx("dd",{className:"text-2xs text-text-primary",children:a})]},i.label)})}),s.jsxs("div",{className:"flex items-center justify-between gap-2",children:[s.jsxs("span",{className:"text-2xs text-text-quaternary",children:[t.role," · ",ft(t.created_at)]}),s.jsx(ce,{to:`/escalations/detail/${t.id}`})]})]})}function Qn(){return s.jsxs("div",{className:"border-l-2 border-accent-faint pl-3 py-2 space-y-2 animate-pulse",children:[s.jsx("div",{className:"h-3 w-32 bg-surface-sunken rounded"}),s.jsx("div",{className:"h-3 w-48 bg-surface-sunken rounded"}),s.jsx("div",{className:"h-3 w-24 bg-surface-sunken rounded"})]})}function tr(t,e){if(!t)return{};const r={};for(const[n,i]of Object.entries(t))r[n]=typeof i=="string"?H(i,e):i;return r}function er(t,e,r){const n=tr(t.facets,e),i={role:t.role,status:t.status??"pending",facets:n,limit:t.limit,enabled:!!(t.role||Object.keys(n).length)};return t.assigned==="me"?{...i,assigned_to:r,available:!1,enabled:i.enabled&&!!r}:t.assigned==="any"?i:{...i,available:t.available??!0}}const sr=[{label:"Description",value:"{{escalation.description}}"},{label:"Role",value:"{{escalation.role}}"},{label:"Age",value:"{{escalation.created_at}}",format:"age"}],Dt="—";function nr(t,e){if(!t||t===Dt)return Dt;if(e==="age"){const r=new Date(t);return Number.isNaN(r.getTime())?t:ft(t)}return t}function ut(t,e){return typeof t=="string"?H(t,e):Array.isArray(t)?t.map(r=>ut(r,e)):t&&typeof t=="object"?Object.fromEntries(Object.entries(t).map(([r,n])=>[r,ut(n,e)])):t}function rr({fieldKey:t,schema:e,escalationContext:r}){const n=(e==null?void 0:e["x-lt-query"])??{},i=(e==null?void 0:e["x-lt-columns"])??sr,o=(e==null?void 0:e["x-lt-actions"])??[],a=(e==null?void 0:e.title)??"Related items",l=e==null?void 0:e.description,d=r??{},{user:u}=Zs(),c=er(n,d,u==null?void 0:u.userId),{data:x,isLoading:p}=Qs({role:c.role,status:c.status,facets:c.facets,assigned_to:c.assigned_to,available:c.available,limit:c.limit??5,enabled:c.enabled,include:Xs({columns:i,actions:o})?"envelope":void 0}),m=(x==null?void 0:x.escalations)??[],b=tn(),[f,h]=g.useState({}),[j,A]=g.useState(null),y=async(N,v)=>{const k=pt(N);if(!(v.confirm&&!window.confirm(H(v.confirm,k)))){A(N.id),h(C=>({...C,[N.id]:""}));try{await b.mutateAsync({id:N.id,resolverPayload:ut(v.resolverPayload,k)})}catch(C){h(M=>({...M,[N.id]:C.message}))}finally{A(null)}}};return s.jsxs("div",{"data-field-key":t,children:[s.jsx(_,{children:a}),l&&s.jsx($,{children:l}),s.jsx("div",{className:"mt-1","data-testid":`escalation-list-widget-${t}`,children:p?s.jsx(or,{columns:i.length}):s.jsx(ir,{escalations:m,columns:i,fieldKey:t,actions:o,onAction:y,pendingRow:j,rowErrors:f})})]})}function ir({escalations:t,columns:e,fieldKey:r,actions:n,onAction:i,pendingRow:o,rowErrors:a}){return t.length===0?s.jsx("p",{className:"text-xs text-text-quaternary italic py-1","data-testid":`escalation-list-empty-${r}`,children:"No items found"}):s.jsxs("table",{className:"w-full text-xs border-collapse","data-testid":`escalation-list-table-${r}`,children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-surface-border",children:[e.map(l=>s.jsx("th",{className:"text-left text-2xs font-semibold uppercase tracking-wider text-text-tertiary pb-1 pr-3 last:pr-0",children:l.label},l.label)),n.length>0&&s.jsx("th",{className:"w-px"}),s.jsx("th",{className:"w-8"})]})}),s.jsx("tbody",{children:t.map(l=>{const d=pt(l),u=a[l.id];return s.jsxs("tr",{className:"border-b border-surface-border/50 last:border-0 hover:bg-surface-sunken/50 transition-colors",children:[e.map(c=>{const x=H(c.value,d),p=nr(x,c.format);return s.jsx("td",{className:"py-1 pr-3 last:pr-0 text-text-primary align-top",children:p},c.label)}),n.length>0&&s.jsxs("td",{className:"py-1 pr-2 align-top whitespace-nowrap",children:[n.map(c=>s.jsx("button",{type:"button",onClick:()=>i(l,c),disabled:o===l.id,className:"px-2 py-0.5 text-2xs font-medium text-accent border border-accent/40 rounded hover:bg-accent/10 disabled:opacity-40 disabled:cursor-default transition-colors ml-1 first:ml-0","data-testid":`escalation-list-action-${l.id}`,children:c.label},c.label)),u&&s.jsx("p",{className:"text-2xs text-status-error mt-0.5 whitespace-normal max-w-[16rem]","data-testid":`escalation-list-action-error-${l.id}`,children:u})]}),s.jsx("td",{className:"py-1 pl-2 align-top",children:s.jsx(ce,{to:`/escalations/detail/${l.id}`})})]},l.id)})})]})}function or({columns:t}){return s.jsx("div",{className:"space-y-1.5 animate-pulse",children:[0,1,2].map(e=>s.jsx("div",{className:"flex gap-4",children:Array.from({length:t},(r,n)=>s.jsx("div",{className:"h-3 bg-surface-sunken rounded flex-1"},n))},e))})}function de(t,e){return{metadata:t??{},...e?{lookup:e}:{}}}const ar="x-lt-invoke",K={LINK:"link",BUTTON:"button"},lr=/^\{\{\s*([^{}]+?)\s*\}\}$/;function tt(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function cr(t){return t===K.LINK||t===K.BUTTON}function dr(t){const e=t==null?void 0:t[ar];if(!tt(e))return null;const r=e.workflow;if(typeof r!="string"||r.trim().length===0)return null;const n=e.confirm;return{workflow:r.trim(),data:tt(e.data)?e.data:{},metadata:tt(e.metadata)?e.metadata:{},modal:e.modal===!0,confirm:typeof n=="string"&&n.trim().length>0?n:null,variant:cr(e.variant)?e.variant:K.LINK,icon:e.icon!==!1}}function rt(t,e){if(typeof t=="string"){const r=lr.exec(t);if(r){const n=Z(r[1],e??void 0);return n===null?void 0:n}return st(t)?mt(t,e??void 0)??void 0:t}if(Array.isArray(t))return t.map(r=>rt(r,e)).filter(r=>r!==void 0);if(tt(t)){const r={};for(const[n,i]of Object.entries(t)){const o=rt(i,e);o!==void 0&&(r[n]=o)}return r}return t}function ur(t,e){return{data:rt(t.data,e),metadata:rt(t.metadata,e)}}const jt={ACTIVITY:"Activity",ALERT:"AlertTriangle",ARCHIVE:"Archive",AWARD:"Award",BARCODE:"Barcode",BELL:"Bell",BOT:"Bot",BOX:"Box",BOXES:"Boxes",BUILDING:"Building2",CALENDAR:"Calendar",CAMERA:"Camera",CHECKLIST:"ListChecks",CLIPBOARD:"ClipboardList",CLIPBOARD_CHECK:"ClipboardCheck",CLOCK:"Clock",COG:"Cog",CPU:"Cpu",DATABASE:"Database",DOWNLOAD:"Download",DROPLETS:"Droplets",FACTORY:"Factory",FAN:"Fan",FILE:"FileText",FLAG:"Flag",FLAME:"Flame",GAUGE:"Gauge",HAMMER:"Hammer",HEART:"Heart",IMAGE:"Image",KEY:"Key",LAYERS:"Layers",LEAF:"Leaf",LIFEBUOY:"LifeBuoy",LOCK:"Lock",MAIL:"Mail",MAP:"Map",MEGAPHONE:"Megaphone",MESSAGE:"MessageSquare",PACKAGE:"Package",PALETTE:"Palette",PEN:"PenTool",PILL:"Pill",POWER:"Power",PRINTER:"Printer",RECEIPT:"Receipt",RECYCLE:"Recycle",REFRESH:"RefreshCw",ROCKET:"Rocket",ROUTE:"Route",RULER:"Ruler",SCALE:"Scale",SCAN:"ScanBarcode",SCISSORS:"Scissors",SEARCH:"Search",SEND:"Send",SERVER:"Server",SHIELD:"ShieldCheck",SHOPPING_CART:"ShoppingCart",SNOWFLAKE:"Snowflake",SPARKLES:"Sparkles",STAR:"Star",STORE:"Store",SUN:"Sun",TAG:"Tag",TEST_TUBE:"TestTube",THERMOMETER:"Thermometer",TRASH:"Trash2",TRUCK:"Truck",UPLOAD:"Upload",USER:"User",USERS:"Users",WAND:"Wand2",WAREHOUSE:"Warehouse",WIFI:"Wifi",WRENCH:"Wrench",ZAP:"Zap"},xr=new Set(Object.values(jt));function pr(t){return typeof t=="string"&&xr.has(t)}const fr={Activity:qs,AlertTriangle:Qt,Archive:Gs,Award:Js,Barcode:Us,Bell:Ws,Bot:Ds,Box:Ps,Boxes:$s,Building2:Fs,Calendar:Ms,Camera:Ss,ClipboardCheck:Ls,ClipboardList:Rs,Clock:_s,Cog:Ts,Cpu:Os,Database:Cs,Download:Zt,Droplets:Is,Factory:As,Fan:Es,FileText:ws,Flag:ks,Flame:vs,Gauge:Ns,Hammer:js,Heart:ys,Image:hs,Key:bs,Layers:gs,Leaf:ms,LifeBuoy:fs,ListChecks:ps,Lock:zt,Mail:xs,Map:us,Megaphone:ds,MessageSquare:cs,Package:ls,Palette:as,PenTool:os,Pill:is,Power:rs,Printer:ns,Receipt:ss,Recycle:es,RefreshCw:ts,Rocket:Qe,Route:Ze,Ruler:Ke,Scale:ze,ScanBarcode:Xe,Scissors:Ye,Search:Be,Send:Ve,Server:He,ShieldCheck:qe,ShoppingCart:Ge,Snowflake:Je,Sparkles:Ue,Star:We,Store:De,Sun:Pe,Tag:$e,TestTube:Fe,Thermometer:Me,Trash2:Se,Truck:Le,Upload:Re,User:_e,Users:Te,Wand2:Oe,Warehouse:Ce,Wifi:Ie,Wrench:Ae,Zap:Ee},Wt=Object.values(jt),mr=Object.fromEntries(Object.entries(jt).map(([t,e])=>[e,t]));function gr(t){return pr(t)?fr[t]:null}function ni(t){const e=t.trim().toLowerCase().replace(/[\s_-]+/g,"");return e?Wt.filter(r=>r.toLowerCase().includes(e)||mr[r].toLowerCase().replace(/_/g,"").includes(e)):[...Wt]}function Nt({icon:t,tier:e,className:r,strokeWidth:n=1.5}){const i=gr(t)??gn[e]??Hs;return s.jsx(i,{className:r,strokeWidth:n,"aria-hidden":!0})}const S={RUNNING:"running",COMPLETED:"completed",FAILED:"failed"};function Ut(t,e){return`lt.events.system.workflow.${t}.${e}`}function vt(t){const[e,r]=g.useState(S.RUNNING),[n,i]=g.useState(void 0);return g.useEffect(()=>{r(S.RUNNING),i(void 0)},[t]),en(t?[Ut(t,"completed"),Ut(t,"failed")]:[],o=>{o.workflowId===t&&(r(o.type.endsWith(".failed")?S.FAILED:S.COMPLETED),i(o.data))}),{outcome:e,payload:n}}const br={[S.RUNNING]:"Working…",[S.COMPLETED]:"Completed",[S.FAILED]:"Failed"};function ue({outcome:t,className:e=""}){const r=t===S.FAILED?"text-status-error":t===S.COMPLETED?"text-status-success":"text-text-secondary";return s.jsxs("p",{className:`flex items-center gap-1.5 text-xs ${r} ${e}`,role:"status","data-testid":"run-outcome",children:[br[t],t===S.RUNNING&&s.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-accent animate-pulse","aria-hidden":!0})]})}function xe({payload:t}){return!t||Object.keys(t).length===0?null:s.jsx("div",{className:"max-h-72 overflow-y-auto px-3 py-2 bg-surface-sunken","data-testid":"run-outline",children:s.jsx(nn,{data:t})})}function hr({workflowId:t,outcome:e,executionPath:r}){const n=e===S.FAILED?"text-status-error":"text-status-success",i=e===S.RUNNING?"Started":e===S.COMPLETED?"Completed":"Failed";return s.jsxs("p",{className:"flex items-center gap-1.5 text-xs min-w-0",role:"status","data-testid":"started-run",children:[s.jsx("span",{className:n,children:i}),e===S.RUNNING&&s.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-accent animate-pulse","aria-hidden":!0}),s.jsx("span",{className:"text-text-quaternary",children:"·"}),s.jsx("span",{className:"font-mono text-text-secondary truncate",children:t}),r&&s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"text-text-quaternary",children:"·"}),s.jsx(ot,{to:r,className:"text-accent hover:underline shrink-0",children:"View workflow →"})]})]})}function yr({payload:t}){return!t||Object.keys(t).length===0?null:s.jsx("div",{className:"mt-3 h-48 overflow-y-auto rounded-md border border-surface-border bg-surface-raised px-3 py-2","data-testid":"started-run-result",children:s.jsx(sn,{data:t,label:"Result"})})}const jr="/workflows/executions",P={PAGE:"page",MODAL:"modal"};function pe(t,e){const{realIsBuilder:r}=rn(),n=on(),[i,o]=g.useState(null),[a,l]=g.useState([]),[d,u]=g.useState(null),c=g.useCallback(()=>{o(null),l([]),u(null),n.reset()},[n]);return{submit:g.useCallback(async(p,m)=>{o(null),l([]),u(null);const b={...m};e.certified&&(b.certified=!0);try{const f=await n.mutateAsync({workflowType:t.workflow_type,data:p,metadata:b,...e.overrideBot?{execute_as:e.overrideBot}:{}});u(f.workflowId)}catch(f){f instanceof an&&hn(f.body)?(l(f.body.violations),o(f.body.error)):o(f instanceof Error?f.message:"Invocation failed")}},[n,e.certified,e.overrideBot,t.workflow_type]),reset:c,pending:n.isPending,error:i,violations:a,startedId:d,executionPath:d&&r?`${jr}/${encodeURIComponent(d)}`:null}}function kt(){const{connected:t}=ln();return t?null:s.jsxs("p",{className:"flex items-center gap-1.5 text-2xs text-status-warning","data-testid":"events-warning",children:[s.jsx(Vs,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),"Live events are off, so the result will not appear here.",s.jsx("button",{type:"button",onClick:()=>window.location.reload(),className:"text-accent hover:underline",children:"Reconnect events"})]})}const Nr={[P.PAGE]:"sticky bottom-0 z-10 bg-surface border-t border-surface-border/40 pt-3 pb-16 -mb-16",[P.MODAL]:"border-t border-surface-border/40 pt-3"};function fe({onSubmit:t,onSubmitAgain:e,pending:r,error:n,issueCount:i=0,onShowIssues:o,startedId:a,executionPath:l,host:d=P.PAGE}){const u=d===P.PAGE,c=vt(u?a??"":""),x=u&&a!==null;return s.jsxs("div",{className:Nr[d],children:[s.jsxs("div",{className:"flex items-center justify-between gap-6 min-h-9",children:[s.jsxs("div",{className:"flex-1 min-w-0 flex flex-col gap-1",children:[s.jsx(kt,{}),i>0&&o?s.jsxs("button",{type:"button",onClick:o,className:"flex items-center gap-1.5 text-xs text-status-error hover:underline","data-testid":"invoke-issues",children:[s.jsx(it,{className:"w-3.5 h-3.5",strokeWidth:1.5}),i," ",i===1?"issue":"issues"," to resolve"]}):n?s.jsx("p",{className:"text-xs text-status-error",role:"alert",children:n}):null,x&&s.jsx(hr,{workflowId:a,outcome:c.outcome,executionPath:l})]}),s.jsx("div",{className:"shrink-0",children:x?s.jsx("button",{type:"button",onClick:e,className:"text-xs text-accent hover:underline","data-testid":"invoke-again",children:"Submit again"}):s.jsx("button",{type:"button",onClick:t,disabled:r,className:"btn-primary px-8 py-2","data-testid":"invoke-start",children:r?"Submitting…":"Submit"})})]}),x&&c.outcome!==S.RUNNING&&s.jsx(yr,{payload:c.payload})]})}const Q="invoke-help",vr=380,W={INSTRUCTIONS:"instructions",ISSUES:"issues"};function kr({view:t,onViewChange:e,onClose:r,helpMarkdown:n,errors:i,schema:o}){const a=[];n&&a.push({id:W.INSTRUCTIONS,icon:te,label:"Instructions",content:s.jsx(z,{content:n})}),a.push({id:W.ISSUES,icon:it,label:"Issues",content:s.jsx(re,{errors:i,schema:o})});const l=a.some(d=>d.id===t)?t:a[0].id;return s.jsx(dn,{views:a,activeId:l,onViewChange:d=>e(d),onClose:r,stickyClassName:"h-full min-h-0",labelInline:!0})}function wr({schema:t,context:e,errors:r,enabled:n=!0}){const i=cn(),o=n?i==null?void 0:i.setPanel:void 0,a=n?i==null?void 0:i.closePanel:void 0,l=(i==null?void 0:i.ownerKey)??null,d=(i==null?void 0:i.open)??!1,[u,c]=g.useState(null),x=g.useMemo(()=>zs(t,e),[t,e]),p=g.useCallback(()=>{c(null),a==null||a(Q)},[a]);g.useEffect(()=>{!o||!u||o(s.jsx(kr,{view:u,onViewChange:c,onClose:p,helpMarkdown:x,errors:r,schema:t}),{key:Q,width:vr})},[o,u,x,r,t,p]),g.useEffect(()=>{u&&d&&l&&l!==Q&&c(null)},[u,d,l]);const m=g.useRef(a);return m.current=a,g.useEffect(()=>()=>{var b;(b=m.current)==null||b.call(m,Q)},[]),{helpMarkdown:x,hasInstructions:!!x,open:u!==null,showInstructions:()=>c(W.INSTRUCTIONS),showIssues:()=>c(W.ISSUES),close:p}}function Er({selected:t,schema:e,metadata:r,lookup:n,submission:i,lead:o,prefill:a,host:l=P.PAGE}){const d=l===P.MODAL,[u,c]=g.useState(()=>Ot(e,a)),[x,p]=g.useState(!1),[m,b]=g.useState([]),[f,h]=g.useState(null),[j,A]=g.useState(null);g.useEffect(()=>{c(Ot(e,a)),p(!1),b([]),h(null),A(null),i.reset()},[t.workflow_type]);const y=g.useMemo(()=>({...de(r,n),resolver:null}),[r,n]),N=g.useMemo(()=>{try{const T=JSON.parse(u);return{...y,resolver:T,input:T}}catch{return y}},[u,y]);g.useEffect(()=>{x&&b(Ft(u,y).errors)},[u,x,y]);const v=m.length>0?m:i.violations,k=wr({schema:e,context:N,errors:v,enabled:!d}),C=d?()=>A(W.ISSUES):k.showIssues,M=d?()=>A(T=>T===W.INSTRUCTIONS?null:W.INSTRUCTIONS):k.showInstructions;g.useEffect(()=>{i.violations.length>0&&C()},[i.violations]);const E=()=>{p(!0);const T=Ft(u,y);if(T.parseError){h(T.parseError);return}if(h(null),T.errors.length>0){b(T.errors),C();return}b([]),i.submit(T.payload,r)},R=d&&j===W.ISSUES&&v.length>0,O=d&&j===W.INSTRUCTIONS&&k.helpMarkdown;return s.jsxs("div",{"data-testid":"rich-invoke-form",children:[s.jsxs("div",{className:"space-y-6 pb-6",children:[o,O&&s.jsx("div",{className:"px-4 py-3 bg-surface-hover","data-testid":"invoke-inline-help",children:s.jsx(z,{content:k.helpMarkdown})}),s.jsx(Yr,{value:u,onChange:c,submitAttempted:x,escalationContext:y,onOpenHelp:k.hasInstructions?M:void 0}),R&&s.jsx("div",{"data-testid":"invoke-inline-issues",children:s.jsx(re,{errors:v,schema:e})})]}),s.jsx(fe,{onSubmitAgain:i.reset,onSubmit:E,pending:i.pending,error:f??i.error,issueCount:v.length,onShowIssues:C,startedId:i.startedId,executionPath:i.executionPath,host:l})]})}const Jt=`{
2
- "data": {},
3
- "metadata": {}
4
- }`;function Ar(t){return typeof t=="boolean"?"boolean":typeof t=="number"?"number":Array.isArray(t)?"array":t!==null&&typeof t=="object"?"object":"string"}function Gt(t){if(!t)return[];const e=t.data;return!e||typeof e!="object"?[]:Object.entries(e).map(([r,n])=>({key:r,type:Ar(n),defaultValue:n}))}function lt(t){return{...t}}function qt(t,e){return JSON.stringify({data:t,metadata:e},null,2)}function Ir({selectedConfig:t,isJsonMode:e,hasFormView:r,jsonInput:n,formFields:i,dataFields:o,onJsonChange:a,onToggleMode:l,onUpdateFormField:d,onSetFormFields:u}){return s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-baseline justify-between mb-2",children:[s.jsx("label",{className:"block text-xs text-text-secondary",children:"Envelope"}),s.jsxs("div",{className:"flex items-center gap-3",children:[r&&s.jsx("button",{type:"button",onClick:l,className:"text-2xs text-accent hover:underline",children:e?"Form view":"JSON view"}),t.envelope_schema?s.jsx("span",{className:"text-2xs text-accent",children:"Pre-filled from workflow config"}):s.jsx("span",{className:"text-2xs text-status-warning",children:"No template"})]})]}),!t.envelope_schema&&s.jsx("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:s.jsxs("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or ",s.jsx(ot,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"register it"})," in the Workflow Registry with an envelope schema for pre-filled fields and form-based input."]})}),e||!r?s.jsx("textarea",{value:n,onChange:c=>a(c.target.value),className:"input-json",rows:12,spellCheck:!1}):s.jsx("div",{className:"space-y-3",children:o.map(({key:c,type:x})=>{var f,h;const p=i[c],m=typeof p=="string"?p:JSON.stringify(p??(x==="array"?[]:{}),null,2),b=Math.min(20,Math.max(4,((h=(f=m==null?void 0:m.split)==null?void 0:f.call(m,`
5
- `))==null?void 0:h.length)??4));return s.jsxs("div",{children:[s.jsxs("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[c,s.jsx("span",{className:"ml-2 font-normal normal-case",children:x})]}),x==="boolean"?s.jsxs("select",{value:String(p??!1),onChange:j=>d(c,j.target.value,x),className:"select text-xs w-full",children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]}):x==="object"||x==="array"?s.jsx("textarea",{value:m,onChange:j=>{try{d(c,JSON.parse(j.target.value),x)}catch{u({...i,[c]:j.target.value})}},className:"input-json w-full",rows:b,spellCheck:!1}):s.jsx("input",{type:x==="number"?"number":"text",value:String(p??""),onChange:j=>d(c,j.target.value,x),className:"input text-xs w-full"})]},c)})}),s.jsxs("p",{className:"text-2xs text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",s.jsx("code",{className:"text-accent/80",children:"data"})," holds workflow-specific fields; ",s.jsx("code",{className:"text-accent/80",children:"metadata"})," is optional context."]})]})}const Ht="lt:invoke:prefill";function Cr({selected:t,metadata:e,submission:r,lead:n,prefill:i,host:o=P.PAGE}){const[a,l]=g.useState(Jt),[d,u]=g.useState(""),[c,x]=g.useState({}),[p,m]=g.useState(!1),b=g.useMemo(()=>{const N=t.envelope_schema??null;if(!i||Object.keys(i).length===0)return N;const v=N==null?void 0:N.data,k={...v&&typeof v=="object"?v:{},...i};return{...N??{},data:k}},[t.envelope_schema,i]),f=g.useMemo(()=>Gt(b),[b]),h=f.length>0;g.useEffect(()=>{u(""),r.reset();const N=o===P.PAGE?sessionStorage.getItem(Ht):null;if(N){sessionStorage.removeItem(Ht),l(N);try{const k=JSON.parse(N),C=(k==null?void 0:k.data)??k;C&&typeof C=="object"&&x(lt(C))}catch{}m(!0);return}l(b?JSON.stringify(b,null,2):Jt);const v=b==null?void 0:b.data;x(v&&typeof v=="object"?lt(v):{}),m(!Gt(b).length)},[t.workflow_type]);const j=()=>{if(p)try{const N=JSON.parse(a);N.data&&typeof N.data=="object"&&x(lt(N.data))}catch{}else l(qt(c,e));m(!p)},A=(N,v,k)=>{let C=v;k==="number"?C=v===""?0:Number(v):k==="boolean"&&(C=v==="true"||v===!0);const M={...c,[N]:C};x(M),l(qt(M,e))},y=()=>{u("");let N;try{N=JSON.parse(a)}catch{u("Invalid JSON");return}const{data:v,metadata:k}=N;if(!v||typeof v!="object"){u('Envelope must include a "data" object');return}r.submit(v,k??{})};return s.jsxs("div",{children:[s.jsxs("div",{className:"space-y-6 pb-6",children:[n,s.jsx(Ir,{selectedConfig:t,isJsonMode:p,hasFormView:h,jsonInput:a,formFields:c,dataFields:f,onJsonChange:N=>{l(N),u("")},onToggleMode:j,onUpdateFormField:A,onSetFormFields:x})]}),s.jsx(fe,{onSubmitAgain:r.reset,onSubmit:y,pending:r.pending,error:d||r.error,startedId:r.startedId,executionPath:r.executionPath,host:o})]})}function Or({workflow:t,workflowId:e,onDone:r,onRetry:n}){var d;const i=vt(e),o=i.outcome===S.FAILED,a=i.outcome===S.RUNNING,l=o&&typeof((d=i.payload)==null?void 0:d.error)=="string"?i.payload.error:null;return s.jsxs("div",{className:"flex flex-col gap-4","data-testid":"run-receipt","data-outcome":i.outcome,children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(Nt,{icon:t.icon,tier:t.tier,className:"w-6 h-6 shrink-0 text-accent"}),s.jsx(ue,{outcome:i.outcome,className:"text-sm"})]}),a&&s.jsx(kt,{}),l&&s.jsx("p",{className:"text-xs text-status-error",role:"alert",children:l}),!a&&s.jsx(xe,{payload:l?void 0:i.payload}),s.jsxs("div",{className:"flex justify-end gap-2 pt-2 border-t border-surface-border/40",children:[o&&s.jsx("button",{type:"button",onClick:n,className:"btn-secondary text-xs","data-testid":"run-retry",children:"Try again"}),s.jsx("button",{type:"button",onClick:r,className:"btn-primary text-xs px-6","data-testid":"run-done",children:a||o?"Close":"Done"})]})]})}function me(t,e){var n;const r=(n=t.envelope_schema)==null?void 0:n.metadata;return{...r&&typeof r=="object"?r:{},...e}}function Tr({workflow:t,prefill:e,onClose:r}){const n=g.useMemo(()=>me(t,e.metadata),[t,e.metadata]),i=Array.isArray(t.input_lookups)&&t.input_lookups.length>0,{data:o}=un(t.workflow_type,i),a=g.useMemo(()=>o?xn(o.lookups):void 0,[o]),l=(o==null?void 0:o.lookups.filter(x=>x.missing))??[],d=pe(t,{certified:t.certified,overrideBot:""}),u=t.description?s.jsx(z,{content:t.description,className:"text-xs text-text-secondary leading-relaxed"}):void 0,c=d.startedId!==null;return s.jsxs("div",{"data-testid":"invoke-modal",children:[c&&s.jsx(Or,{workflow:t,workflowId:d.startedId,onDone:r,onRetry:d.reset}),s.jsxs("div",{hidden:c,children:[l.length>0&&s.jsxs("p",{className:"flex items-center gap-1.5 text-2xs text-status-warning mb-4","data-testid":"lookup-missing",children:[s.jsx(Qt,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),l.map(x=>`${x.domain}/${x.key} v${x.version}`).join(", ")," ",l.length===1?"is":"are"," not available; the fields that read ",l.length===1?"it":"them"," fall back to plain inputs."]}),t.input_schema?s.jsx(Er,{selected:t,schema:t.input_schema,metadata:n,lookup:a,submission:d,lead:u,prefill:e.data,host:P.MODAL}):s.jsx(Cr,{selected:t,metadata:n,submission:d,lead:u,prefill:e.data,host:P.MODAL})]})]})}function _r({open:t,onClose:e,workflow:r,prefill:n}){const i=s.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[s.jsx(Nt,{icon:r.icon,tier:r.tier,className:"w-4 h-4 shrink-0 text-accent"}),s.jsx("span",{className:"truncate",title:r.workflow_type,children:se(r.workflow_type)})]});return s.jsx(ne,{open:t,onClose:e,title:i,maxWidth:"max-w-2xl",closeOnBackdrop:!1,children:s.jsx(Tr,{workflow:r,prefill:n,onClose:e})})}const Rr={[K.LINK]:"inline-flex items-center gap-1.5 text-xs text-accent hover:text-accent-hover transition-colors",[K.BUTTON]:"btn-secondary inline-flex items-center gap-1.5 text-xs px-3 py-1.5"};function Lr({fieldKey:t,schema:e,escalationContext:r}){var u;const n=g.useMemo(()=>dr(e),[e]),{data:i,isPending:o}=pn(),a=i==null?void 0:i.find(c=>c.workflow_type===(n==null?void 0:n.workflow)),l=(u=r==null?void 0:r.escalation)==null?void 0:u.status,d=l!==void 0&&l!==mn.PENDING;return!n||d?null:o?s.jsx("div",{className:"h-4 w-32 rounded bg-surface-hover animate-pulse","data-testid":`invoke-widget-${t}-loading`}):a?s.jsx(Sr,{fieldKey:t,schema:e,config:n,workflow:a,escalationContext:r}):null}function Sr({fieldKey:t,schema:e,config:r,workflow:n,escalationContext:i}){var R;const o=i,a=g.useMemo(()=>ur(r,o),[r,o]),l=g.useMemo(()=>me(n,a.metadata),[n,a.metadata]),d=pe(n,{certified:n.certified,overrideBot:""}),u=vt(d.startedId??""),[c,x]=g.useState([]),[p,m]=g.useState(!1),[b,f]=g.useState(!1),h=(e==null?void 0:e.title)??se(n.workflow_type),j=e==null?void 0:e.description,A=r.icon?s.jsx(Nt,{icon:n.icon,tier:n.tier,className:"w-3.5 h-3.5 shrink-0"}):null,y=()=>{m(!1),d.submit(a.data,l)},N=()=>{if(r.modal){f(!0);return}if(x([]),n.input_schema){const O=Mn(n.input_schema,a.data,de(l));if(O.length>0){x(O);return}}r.confirm?m(!0):y()},v=()=>{x([]),d.reset(),f(!0)},k=c.length>0?c:d.violations,C=d.startedId!==null,M=C&&u.outcome===S.RUNNING,E=C&&u.outcome===S.FAILED&&typeof((R=u.payload)==null?void 0:R.error)=="string"?u.payload.error:null;return s.jsxs("div",{"data-field-key":t,"data-testid":`invoke-widget-${t}`,children:[s.jsx(_,{children:h}),j&&s.jsx($,{children:j}),s.jsxs("div",{className:"mt-1 flex flex-col gap-1.5",children:[C&&s.jsxs(s.Fragment,{children:[s.jsx(ue,{outcome:u.outcome}),M&&s.jsx(kt,{}),E&&s.jsx("p",{className:"text-2xs text-status-error",role:"alert",children:E}),!M&&s.jsx(xe,{payload:E?void 0:u.payload})]}),!M&&s.jsxs("button",{type:"button",onClick:N,disabled:d.pending,className:`self-start ${Rr[r.variant]}`,"data-testid":`invoke-control-${t}`,children:[A,d.pending?"Starting…":h]}),k.length>0&&s.jsxs("div",{className:"text-2xs",role:"alert","data-testid":`invoke-issues-${t}`,children:[s.jsx("ul",{className:"space-y-0.5 text-status-error",children:k.map(O=>s.jsxs("li",{className:"flex items-start gap-1.5",children:[s.jsx(it,{className:"w-3 h-3 mt-px shrink-0",strokeWidth:1.5}),s.jsxs("span",{children:[s.jsx("span",{className:"font-semibold",children:O.field})," · ",O.message]})]},O.field))}),s.jsx("button",{type:"button",onClick:v,className:"mt-1 text-accent hover:underline","data-testid":`invoke-open-form-${t}`,children:"Open form"})]}),k.length===0&&d.error&&s.jsx("p",{className:"text-2xs text-status-error",role:"alert",children:d.error})]}),r.confirm&&s.jsxs(ne,{open:p,onClose:()=>m(!1),title:h,children:[s.jsx("p",{className:"text-sm text-text-secondary mb-5",children:H(r.confirm,i??{})}),s.jsxs("div",{className:"flex justify-end gap-2",children:[s.jsx("button",{type:"button",onClick:()=>m(!1),className:"btn-secondary text-xs",children:"Cancel"}),s.jsx("button",{type:"button",onClick:y,className:"btn-primary text-xs","data-testid":`invoke-confirm-${t}`,children:h})]})]}),s.jsx(_r,{open:b,onClose:()=>f(!1),workflow:n,prefill:a})]})}const et={"file-upload":Dn,"code-editor":Wn,signature:Un,"rich-text":Jn,markdown:Gn,checklist:Hn,attachment:$t,image:$t,link:Yn,escalation:Kn,"escalation-list":rr,invoke:Lr},ge="textarea",be="json";function Mr(t){return t in et||t===ge||t===be}function Vt(t,e=""){if(!t||typeof t!="object"||Array.isArray(t))return[];const r=t,n=[],i=r["x-lt-widget"];typeof i=="string"&&e&&!Mr(i)&&n.push({path:e,widget:i});const o=r.properties;if(o&&typeof o=="object"&&!Array.isArray(o))for(const[a,l]of Object.entries(o))n.push(...Vt(l,e?`${e}.${a}`:a));return r.items&&n.push(...Vt(r.items,e)),n}const Fr=new Set(["string","number","integer","boolean","array","object"]);function $r(t,e){const r=t==null?void 0:t.type;if(typeof r=="string"&&Fr.has(r))return r;if(e==null)return"null";if(Array.isArray(e))return"array";const n=typeof e;return n==="number"||n==="boolean"||n==="string"?n:"object"}const ct="dictionary",Pr=new Set(["markdown","attachment","image"]);function he(t,e){if(!e)return;const r=t==null?void 0:t["x-lt-section-options"],n=r==null?void 0:r[e];return n&&typeof n=="object"?n:void 0}function Dr(t,e,r){var l,d;const n=(l=t==null?void 0:t.properties)==null?void 0:l[r];if((n==null?void 0:n.readOnly)!==!0)return!1;const i=n==null?void 0:n["x-lt-widget"];if(typeof i=="string"&&Pr.has(i))return!1;const o=n==null?void 0:n["x-lt-display"];if(typeof o=="string")return o===ct;const a=(d=he(t,e))==null?void 0:d.display;return typeof a=="string"?a===ct:(t==null?void 0:t["x-lt-display"])===ct}function Wr(t,e,r,n){var o;const i=[];for(const a of t){const[l]=a,d=i[i.length-1];if(Dr(e,r,l)){(d==null?void 0:d.kind)==="dictionary"?d.entries.push(a):i.push({kind:"dictionary",entries:[a]});continue}const u=(o=e==null?void 0:e.properties)==null?void 0:o[l],c=u==null?void 0:u["x-lt-column-group"];if(n==="two-column"&&typeof c=="string"&&c.trim()){(d==null?void 0:d.kind)==="column-group"&&d.name===c?d.entries.push(a):i.push({kind:"column-group",name:c,entries:[a]});continue}i.push({kind:"field",entry:a})}return i}function Ur({value:t,options:e,nullable:r,fieldKey:n,label:i,helperText:o,isRequired:a,error:l,onBlur:d,ids:u,ariaProps:c,onChange:x}){const p=t==null||t===""?"":String(t),m=e.some(b=>String(b.value)===p);return s.jsxs("div",{children:[s.jsx(_,{isRequired:a,htmlFor:u.field,children:i}),o&&s.jsx($,{id:u.help,children:o}),s.jsxs("select",{value:m?p:"",disabled:e.length===0,onChange:b=>{const f=e.find(h=>String(h.value)===b.target.value);x(f?f.value:null),d==null||d()},onBlur:d,"data-field-key":n,className:Pn(!!l),...c,children:[(!m||r)&&s.jsx("option",{value:"",disabled:!r,children:"Choose…"}),e.map(b=>s.jsx("option",{value:String(b.value),children:b.label},String(b.value)))]}),s.jsx(D,{error:l,id:u.error})]})}function Jr({value:t,options:e,fieldKey:r,label:n,helperText:i,isRequired:o,error:a,onBlur:l,ids:d,ariaProps:u,onChange:c}){const x=new Set(Array.isArray(t)?t:[]),p=m=>{const b=new Set(x);b.has(m)?b.delete(m):b.add(m),c(e.filter(f=>b.has(f.value)).map(f=>f.value)),l==null||l()};return s.jsxs("div",{role:"group","aria-label":n,"aria-required":o||void 0,"aria-invalid":a?!0:void 0,"aria-describedby":u["aria-describedby"],children:[s.jsx(_,{isRequired:o,children:n}),i&&s.jsx($,{id:d.help,children:i}),e.length===0?s.jsx("p",{className:"text-xs text-text-tertiary italic mt-1",children:"No options yet"}):s.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:e.map((m,b)=>{const f=x.has(m.value);return s.jsxs("label",{className:`inline-flex items-center gap-1.5 cursor-pointer select-none px-3.5 py-2 text-sm border transition-colors rounded-[var(--lt-radius-field)] ${f?"bg-accent border-accent text-text-inverse":a?"bg-surface-field border-status-error/60 text-status-error":"bg-surface-field border-surface-field-border text-text-secondary hover:border-accent hover:text-text-primary"}`,children:[s.jsx("input",{type:"checkbox",checked:f,onChange:()=>p(m.value),className:"sr-only","data-testid":`multi-select-${r}-${String(m.value)}`,...b===0?{"data-field-key":r,id:d.field}:{}}),f&&s.jsx(Kt,{className:"w-3.5 h-3.5 shrink-0",strokeWidth:2.5}),m.label]},String(m.value))})}),s.jsx(D,{error:a,id:d.error})]})}function Bt(t){return typeof t=="string"?t:t==null?"":JSON.stringify(t,null,2)}function Yt(t){try{return{ok:!0,value:JSON.parse(t)}}catch{return{ok:!1}}}function Gr({value:t,fieldKey:e,label:r,helperText:n,isRequired:i,error:o,onBlur:a,ids:l,ariaProps:d,onChange:u}){const[c,x]=g.useState(()=>Bt(t));g.useEffect(()=>{if(typeof t=="string"){t!==c&&x(t);return}const m=Yt(c);!(m.ok&&JSON.stringify(m.value)===JSON.stringify(t??null))&&!(c.trim()===""&&t===null)&&x(Bt(t))},[t]);const p=c.split(`
6
- `).length;return s.jsxs("div",{children:[s.jsx(_,{isRequired:i,htmlFor:l.field,children:r}),n&&s.jsx($,{id:l.help,children:n}),s.jsx("textarea",{value:c,onChange:m=>{const b=m.target.value;if(x(b),b.trim()===""){u(null);return}const f=Yt(b);u(f.ok?f.value:b)},onBlur:a,spellCheck:!1,"data-field-key":e,rows:Math.min(14,Math.max(4,p)),className:`${Y(!!o)} font-mono text-xs leading-relaxed`,...d}),s.jsx(D,{error:o,id:l.error})]})}const Xt={date:"date","date-time":"datetime-local",email:"email",uri:"url"},qr={date:"max-w-48","date-time":"max-w-64"};function ye({fieldKey:t,value:e,onChange:r,onBlur:n,schema:i,isRequired:o,isReadOnly:a,error:l,escalationContext:d,submitAttempted:u}){var M;const c=(M=i==null?void 0:i.properties)==null?void 0:M[t],x=U(t,c),p=c==null?void 0:c["x-lt-widget"],m=$r(c,e),b=`lt-field-${t}`,f={field:b,help:`${b}-help`,error:`${b}-error`},h=typeof(c==null?void 0:c.description)=="string"&&c.description.length>0?c.description:void 0,j={id:b,"aria-required":o||void 0,"aria-invalid":l?!0:void 0,"aria-describedby":l?f.error:h?f.help:void 0},A={fieldKey:t,label:x,helperText:h,isRequired:o,error:l,onBlur:n,ids:f,ariaProps:j,onChange:r},y=p==="markdown"&&typeof e=="string",N=(p==="attachment"||p==="image")&&typeof e=="string",v=!!(p&&p in et);if(a&&!y&&!N&&!v){const E=e===null?"null":typeof e=="object"?JSON.stringify(e,null,2):String(e);return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,children:x}),s.jsx("p",{className:"text-sm text-text-secondary mt-0.5 whitespace-pre-wrap",children:E})]})}if(p===be&&(m==="array"||m==="object"))return s.jsx(Gr,{...A,value:e});if(p&&p in et){const E=et[p],R=o||(c==null?void 0:c["x-lt-require-all"])===!0,O={fieldKey:t,schema:c,escalationContext:d,isRequired:R,submitAttempted:u,error:l};if((c==null?void 0:c.type)==="object"){const T=typeof e=="string"?e:typeof e=="object"&&e!==null&&!Array.isArray(e)?JSON.stringify(e):"";return s.jsx(E,{...O,value:T,onChange:J=>{try{r(JSON.parse(J))}catch{r(J)}}})}if(typeof e=="string")return s.jsx(E,{...O,value:e,onChange:T=>r(T)});if(typeof e=="object"&&e!==null&&!Array.isArray(e))return s.jsx(E,{...O,value:JSON.stringify(e),onChange:T=>{try{r(JSON.parse(T))}catch{r(T)}}})}const k=gt(c,d);if(m==="array"){if(k!==void 0&&(c==null?void 0:c["x-lt-options"])!==void 0)return s.jsx(Jr,{...A,value:e,options:k})}else if(k!==void 0&&m!=="object")return s.jsx(Ur,{...A,value:e,options:k,nullable:(c==null?void 0:c["x-lt-nullable"])===!0});switch(m){case"boolean":return s.jsxs("div",{children:[s.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:e===!0,onChange:E=>{r(E.target.checked),n==null||n()},className:"w-3.5 h-3.5 rounded accent-accent","data-field-key":t,...j}),s.jsxs("span",{className:"text-2xs font-semibold uppercase tracking-wider text-text-secondary",children:[x,o&&s.jsx("span",{className:"text-status-error ml-0.5",children:"*"})]})]}),h&&s.jsx($,{id:f.help,children:h}),s.jsx(D,{error:l,id:f.error})]});case"number":case"integer":return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,htmlFor:b,children:x}),h&&s.jsx($,{id:f.help,children:h}),s.jsx("input",{type:"number",value:typeof e=="number"||typeof e=="string"?e:"",onChange:E=>r(parseFloat(E.target.value)||0),onBlur:n,step:"any","data-field-key":t,className:`${Y(!!l)} max-w-48`,...j}),s.jsx(D,{error:l,id:f.error})]});case"string":return C(typeof e=="string"?e:e==null?"":String(e));case"array":return Array.isArray(e)?s.jsxs("div",{children:[s.jsx(_,{isRequired:o,children:x}),s.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1",children:e.map((E,R)=>s.jsx("span",{className:"px-2 py-0.5 text-2xs font-mono bg-surface-sunken rounded text-text-secondary",children:String(E)},R))})]}):C(e==null?"":String(e));case"object":{if(typeof e!="object"||e===null||Array.isArray(e))return C(e==null?"":String(e));const E=Object.entries(e);return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,children:x}),s.jsx("div",{className:"ml-4 mt-2 pl-4 border-l border-accent-faint space-y-3",children:E.map(([R,O])=>s.jsx(ye,{fieldKey:R,value:O,onChange:T=>r({...e,[R]:T})},R))})]})}default:return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,children:x}),s.jsx("p",{className:"text-xs text-text-tertiary italic mt-1",children:"null"})]})}function C(E){const R=c==null?void 0:c.format;if(R==="password")return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,htmlFor:b,children:x}),h&&s.jsx($,{id:f.help,children:h}),s.jsx("input",{type:"password",value:E,onChange:O=>r(O.target.value),onBlur:n,"data-field-key":t,className:Y(!!l),autoComplete:"off",...j}),s.jsx(D,{error:l,id:f.error})]});if(R&&R in Xt)return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,htmlFor:b,children:x}),h&&s.jsx($,{id:f.help,children:h}),s.jsx("input",{type:Xt[R],value:E,onChange:O=>r(O.target.value),onBlur:n,"data-field-key":t,className:`${Y(!!l)} ${qr[R]??""}`,...j}),s.jsx(D,{error:l,id:f.error})]});if(R==="textarea"||p===ge||E.includes(`
7
- `)||E.length>80){const O=c==null?void 0:c.maxLength,T=c==null?void 0:c["x-lt-max-length"],J=T?Number(Z(T,d)):NaN,V=O??(Number.isFinite(J)?J:void 0),B=V!==void 0&&E.length>V;return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,htmlFor:b,children:x}),h&&s.jsx($,{id:f.help,children:h}),s.jsx("textarea",{value:E,onChange:at=>{r(at.target.value),n==null||n()},onBlur:n,"data-field-key":t,className:`${Y(!!l)} leading-relaxed`,rows:Math.min(6,Math.max(3,Math.ceil(E.length/60))),...j}),V!==void 0&&s.jsxs("p",{className:`text-2xs mt-0.5 text-right tabular-nums ${B?"text-status-error font-medium":"text-text-quaternary"}`,children:[E.length," / ",V]}),s.jsx(D,{error:l,id:f.error})]})}return s.jsxs("div",{children:[s.jsx(_,{isRequired:o,htmlFor:b,children:x}),h&&s.jsx($,{id:f.help,children:h}),s.jsx("input",{type:"text",value:E,onChange:O=>r(O.target.value),onBlur:n,"data-field-key":t,className:Y(!!l),...j}),s.jsx(D,{error:l,id:f.error})]})}}function Hr({items:t,columns:e=1}){if(t.length===0)return null;const r=e>=2&&t.length>1?"grid-cols-1 @dict-inline:grid-cols-[max-content_1fr] @dict-pairs:grid-cols-[max-content_1fr_max-content_1fr]":"grid-cols-1 @dict-inline:grid-cols-[max-content_1fr]";return s.jsx("div",{className:"@container",children:s.jsx("dl",{className:`grid ${r} items-baseline gap-x-6 @dict-pairs:gap-x-8 gap-y-1.5`,children:t.map(({key:n,label:i,value:o})=>s.jsxs(g.Fragment,{children:[s.jsx("dt",{className:"text-2xs font-semibold uppercase tracking-wide text-text-secondary mt-2 first:mt-0 @dict-inline:mt-0",children:i}),s.jsx("dd",{className:"text-sm text-text-primary break-words whitespace-pre-wrap min-w-0","data-field-key":n,children:Vr(o)})]},n))})})}function Vr(t){return t==null||t===""?"—":typeof t=="boolean"?t?"Yes":"No":typeof t=="object"?JSON.stringify(t):String(t)}function Br({name:t,entries:e,formSchema:r,layout:n,renderField:i}){const o=Wr(e,r,t,n),a=he(r,t),l=(a==null?void 0:a.columns)??(n==="two-column"?2:1),d=c=>c.map(([x,p])=>{var m;return{key:x,label:U(x,(m=r==null?void 0:r.properties)==null?void 0:m[x]),value:p}}),u=()=>o.map((c,x)=>c.kind==="dictionary"?s.jsx("div",{className:n==="two-column"?"col-span-full":"",children:s.jsx(Hr,{items:d(c.entries),columns:l})},`dict-${x}`):c.kind==="column-group"?s.jsx("div",{className:"@container",children:s.jsx("div",{className:"grid grid-cols-1 @grp-cols:grid-cols-2 gap-x-4 gap-y-5",children:c.entries.map(p=>i(p))})},`group-${c.name}-${x}`):i(c.entry));return s.jsxs("div",{className:t?"border border-surface-border bg-surface-sunken rounded-[var(--lt-radius-section)] p-4 animate-[section-enter_0.25s_ease-out]":"",children:[t&&s.jsx("p",{className:"mb-4 text-[1.40625rem] font-semibold tracking-wider text-heading [font-variant-caps:small-caps]",children:t}),n==="two-column"?s.jsx("div",{className:"@container",children:s.jsx("div",{className:"grid grid-cols-1 @form-cols:grid-cols-2 gap-x-col-gap gap-y-5",children:u()})}):s.jsx("div",{className:"space-y-5",children:u()})]})}function Yr({value:t,onChange:e,disabled:r,submitAttempted:n,escalationContext:i,onOpenHelp:o,onDisabledClick:a,disabledHint:l}){var Et,At;const[d,u]=g.useState({}),[c,x]=g.useState({}),[p,m]=g.useState(null),[b,f]=g.useState(!1),[h,j]=g.useState(new Set);g.useEffect(()=>{try{const w=JSON.parse(t);if(typeof w=="object"&&w!==null&&!Array.isArray(w)){const L={},I={};for(const[F,G]of Object.entries(w))F.startsWith("_")||F.startsWith("$")?I[F]=G:L[F]=G;u(L),x(I),m(I._form_schema&&typeof I._form_schema=="object"?I._form_schema:null),f(!1)}}catch{f(!0)}},[t]);const A=g.useCallback(w=>{u(w),e(JSON.stringify({...w,...c},null,2))},[c,e]),y=g.useCallback((w,L)=>{A({...d,[w]:L})},[d,A]),N=g.useCallback(w=>{j(L=>{if(L.has(w))return L;const I=new Set(L);return I.add(w),I})},[]);if(b)return s.jsx("p",{className:"text-xs text-status-error",children:"Unable to parse resolver data as form. Use the JSON editor below."});const v=Object.entries(d);if(v.length===0)return s.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No resolver fields defined."});const k=p==null?void 0:p["x-lt-order"],C=k?[...v].sort((w,L)=>{const I=k.indexOf(w[0]),F=k.indexOf(L[0]);return(I===-1?1/0:I)-(F===-1?1/0:F)}):v,M={...i??{},resolver:d,input:d},E=C.filter(([w,L])=>{var F;const I=(F=p==null?void 0:p.properties)==null?void 0:F[w];return X(I==null?void 0:I["x-lt-showIf"],M)?!Cn(I,L):!1}),R=new Set((p==null?void 0:p.required)??[]),O=p==null?void 0:p["x-lt-layout"],T=p==null?void 0:p.title,J=p==null?void 0:p.description,V=typeof(p==null?void 0:p["x-lt-help"])=="string"||typeof(p==null?void 0:p["x-lt-context"])=="string",B=[];for(const w of E){const[L]=w,I=(Et=p==null?void 0:p.properties)==null?void 0:Et[L],F=((At=I==null?void 0:I["x-lt-section"])==null?void 0:At.trim())||null,G=B[B.length-1];!G||G.name!==F?B.push({name:F,entries:[w]}):G.entries.push(w)}const at=([w,L])=>{var Ct;const I=(Ct=p==null?void 0:p.properties)==null?void 0:Ct[w],F=(I==null?void 0:I.readOnly)===!0,G=(I==null?void 0:I["x-lt-span"])??1,It=R.has(w),je=h.has(w)||!!n,Ne=ae(L,I,It,je,M);return s.jsx("div",{className:`animate-[field-enter_0.2s_ease-out] ${O==="two-column"&&G>=2?"col-span-full":""}`,children:s.jsx(ye,{fieldKey:w,value:L,onChange:ve=>y(w,ve),onBlur:()=>N(w),schema:p,isRequired:It,isReadOnly:F,error:Ne,escalationContext:M,submitAttempted:!!n})},w)},wt=s.jsxs("div",{className:r?"pointer-events-none":void 0,inert:r||void 0,"aria-disabled":r||void 0,children:[T&&s.jsxs("div",{className:"mb-1 flex items-center gap-1.5",children:[s.jsx("h3",{className:"heading-3",children:T}),V&&o&&s.jsx("button",{type:"button",onClick:o,title:"Open instructions","aria-label":"Open instructions",className:"p-1 rounded-md text-text-tertiary hover:text-accent hover:bg-surface-hover transition-colors",children:s.jsx(te,{className:"w-4 h-4",strokeWidth:1.5})})]}),J&&s.jsx("p",{className:"text-sm text-text-secondary leading-relaxed mb-6",children:J}),s.jsx("div",{className:"space-y-8",children:B.map((w,L)=>s.jsx(Br,{name:w.name,entries:w.entries,formSchema:p,layout:O,renderField:at},w.name??`__s${L}`))})]});return r?s.jsx($n,{hint:l,onLockedClick:a,children:wt}):s.jsx("div",{className:"pb-8 max-w-form",children:wt})}export{re as E,Cr as L,Yr as R,Nt as W,Er as a,Ft as b,de as c,U as d,Vt as e,ni as f,hn as i,er as r,Ot as s,pe as u,le as v,gr as w};
8
- //# sourceMappingURL=ResolverForm-BVG8X0sS.js.map