@open-mercato/core 0.5.1-develop.2860.07af3a6a9d → 0.5.1-develop.2874.77704bccbd

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 (349) hide show
  1. package/dist/modules/api_docs/frontend/docs/api/Explorer.js +18 -18
  2. package/dist/modules/api_docs/frontend/docs/api/Explorer.js.map +2 -2
  3. package/dist/modules/api_keys/backend/api-keys/create/page.js +1 -1
  4. package/dist/modules/api_keys/backend/api-keys/create/page.js.map +1 -1
  5. package/dist/modules/attachments/components/AttachmentLibrary.js +2 -2
  6. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  7. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +1 -1
  8. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +1 -1
  9. package/dist/modules/attachments/fields/attachment.js +1 -1
  10. package/dist/modules/attachments/fields/attachment.js.map +1 -1
  11. package/dist/modules/audit_logs/components/ActionLogDetailsDialog.js +1 -1
  12. package/dist/modules/audit_logs/components/ActionLogDetailsDialog.js.map +2 -2
  13. package/dist/modules/audit_logs/lib/display-helpers.js +1 -1
  14. package/dist/modules/audit_logs/lib/display-helpers.js.map +1 -1
  15. package/dist/modules/auth/backend/users/create/page.js +1 -1
  16. package/dist/modules/auth/backend/users/create/page.js.map +1 -1
  17. package/dist/modules/business_rules/backend/rules/page.js +6 -6
  18. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  19. package/dist/modules/business_rules/backend/sets/page.js +2 -2
  20. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  21. package/dist/modules/business_rules/components/ActionBuilder.js +5 -5
  22. package/dist/modules/business_rules/components/ActionBuilder.js.map +2 -2
  23. package/dist/modules/business_rules/components/ActionRow.js +8 -8
  24. package/dist/modules/business_rules/components/ActionRow.js.map +1 -1
  25. package/dist/modules/business_rules/components/ConditionBuilder.js +5 -5
  26. package/dist/modules/business_rules/components/ConditionBuilder.js.map +2 -2
  27. package/dist/modules/business_rules/components/ConditionGroup.js +2 -2
  28. package/dist/modules/business_rules/components/ConditionGroup.js.map +1 -1
  29. package/dist/modules/business_rules/components/ConditionRow.js +3 -3
  30. package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
  31. package/dist/modules/business_rules/components/RuleSetMembers.js +8 -8
  32. package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
  33. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +2 -2
  34. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +1 -1
  35. package/dist/modules/catalog/backend/catalog/products/create/page.js +5 -5
  36. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +1 -1
  37. package/dist/modules/catalog/components/products/MetadataEditor.js +1 -1
  38. package/dist/modules/catalog/components/products/MetadataEditor.js.map +1 -1
  39. package/dist/modules/catalog/components/products/ProductImageCell.js +1 -1
  40. package/dist/modules/catalog/components/products/ProductImageCell.js.map +1 -1
  41. package/dist/modules/catalog/components/products/VariantBuilder.js +1 -1
  42. package/dist/modules/catalog/components/products/VariantBuilder.js.map +1 -1
  43. package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js +1 -1
  44. package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js.map +2 -2
  45. package/dist/modules/currencies/components/CurrencyFetchingConfig.js +1 -1
  46. package/dist/modules/currencies/components/CurrencyFetchingConfig.js.map +1 -1
  47. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +2 -2
  48. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  49. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +9 -9
  50. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  51. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -7
  52. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  53. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +2 -2
  54. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +1 -1
  55. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +3 -3
  56. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +1 -1
  57. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +2 -2
  58. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +1 -1
  59. package/dist/modules/customers/components/AddressTiles.js +1 -1
  60. package/dist/modules/customers/components/AddressTiles.js.map +1 -1
  61. package/dist/modules/customers/components/detail/ActivityForm.js +3 -3
  62. package/dist/modules/customers/components/detail/ActivityForm.js.map +1 -1
  63. package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
  64. package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +1 -1
  65. package/dist/modules/customers/components/detail/CustomFieldValuesList.js +1 -1
  66. package/dist/modules/customers/components/detail/CustomFieldValuesList.js.map +1 -1
  67. package/dist/modules/customers/components/detail/DealForm.js +1 -1
  68. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  69. package/dist/modules/customers/components/detail/DealsSection.js +1 -1
  70. package/dist/modules/customers/components/detail/DealsSection.js.map +1 -1
  71. package/dist/modules/customers/components/detail/DetailFieldsSection.js +1 -1
  72. package/dist/modules/customers/components/detail/DetailFieldsSection.js.map +1 -1
  73. package/dist/modules/customers/components/detail/InlineEditors.js +5 -5
  74. package/dist/modules/customers/components/detail/InlineEditors.js.map +2 -2
  75. package/dist/modules/customers/components/detail/TasksSection.js +1 -1
  76. package/dist/modules/customers/components/detail/TasksSection.js.map +1 -1
  77. package/dist/modules/customers/components/detail/TimelineItemHeader.js +1 -1
  78. package/dist/modules/customers/components/detail/TimelineItemHeader.js.map +1 -1
  79. package/dist/modules/customers/components/formConfig.js +2 -2
  80. package/dist/modules/customers/components/formConfig.js.map +1 -1
  81. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +1 -1
  82. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +1 -1
  83. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +2 -2
  84. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +1 -1
  85. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +1 -1
  86. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +1 -1
  87. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +1 -1
  88. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +1 -1
  89. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +1 -1
  90. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +1 -1
  91. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js +1 -1
  92. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js.map +1 -1
  93. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js +1 -1
  94. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js.map +1 -1
  95. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +1 -1
  96. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +1 -1
  97. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js +1 -1
  98. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js.map +1 -1
  99. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js +1 -1
  100. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js.map +1 -1
  101. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +2 -2
  102. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +1 -1
  103. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +1 -1
  104. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +1 -1
  105. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +1 -1
  106. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +1 -1
  107. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +2 -2
  108. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +1 -1
  109. package/dist/modules/data_sync/backend/data-sync/page.js +4 -4
  110. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  111. package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +2 -2
  112. package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +1 -1
  113. package/dist/modules/dictionaries/components/AppearanceSelector.js +3 -3
  114. package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
  115. package/dist/modules/dictionaries/components/DictionariesManager.js +4 -4
  116. package/dist/modules/dictionaries/components/DictionariesManager.js.map +2 -2
  117. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +2 -2
  118. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
  119. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +3 -3
  120. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +1 -1
  121. package/dist/modules/dictionaries/fields/dictionary.js +4 -4
  122. package/dist/modules/dictionaries/fields/dictionary.js.map +1 -1
  123. package/dist/modules/entities/components/EncryptionManager.js +3 -3
  124. package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
  125. package/dist/modules/entities/components/UserEntitiesTable.js +1 -1
  126. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  127. package/dist/modules/feature_toggles/components/formConfig.js +1 -1
  128. package/dist/modules/feature_toggles/components/formConfig.js.map +1 -1
  129. package/dist/modules/feature_toggles/components/overrideFormConfig.js +2 -2
  130. package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +1 -1
  131. package/dist/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.js +12 -12
  132. package/dist/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.js.map +2 -2
  133. package/dist/modules/inbox_ops/components/messages/InboxEmailPreview.js +1 -1
  134. package/dist/modules/inbox_ops/components/messages/InboxEmailPreview.js.map +1 -1
  135. package/dist/modules/inbox_ops/components/proposals/ActionCard.js +12 -12
  136. package/dist/modules/inbox_ops/components/proposals/ActionCard.js.map +2 -2
  137. package/dist/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.js +3 -3
  138. package/dist/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.js.map +2 -2
  139. package/dist/modules/integrations/backend/integrations/[id]/page.js +6 -6
  140. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  141. package/dist/modules/messages/components/MessagesInboxPageClient.js +1 -1
  142. package/dist/modules/messages/components/MessagesInboxPageClient.js.map +1 -1
  143. package/dist/modules/messages/components/defaults/DefaultMessageListItem.js +1 -1
  144. package/dist/modules/messages/components/defaults/DefaultMessageListItem.js.map +1 -1
  145. package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js +1 -1
  146. package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js.map +1 -1
  147. package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js +1 -1
  148. package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js.map +1 -1
  149. package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js +1 -1
  150. package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js.map +1 -1
  151. package/dist/modules/messages/components/message-detail/panels/attachments-panel.js +1 -1
  152. package/dist/modules/messages/components/message-detail/panels/attachments-panel.js.map +1 -1
  153. package/dist/modules/payment_gateways/backend/payment-gateways/page.js +11 -11
  154. package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
  155. package/dist/modules/planner/components/AvailabilityRulesEditor.js +2 -2
  156. package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
  157. package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +2 -2
  158. package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
  159. package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js +3 -3
  160. package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js.map +2 -2
  161. package/dist/modules/portal/frontend/[orgSlug]/portal/page.js +3 -3
  162. package/dist/modules/portal/frontend/[orgSlug]/portal/page.js.map +2 -2
  163. package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js +4 -4
  164. package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js.map +2 -2
  165. package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js +4 -4
  166. package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js.map +2 -2
  167. package/dist/modules/resources/backend/resources/resources/[id]/page.js +1 -1
  168. package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +1 -1
  169. package/dist/modules/sales/backend/sales/documents/[id]/page.js +4 -4
  170. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +1 -1
  171. package/dist/modules/sales/components/DocumentNumberSettings.js +1 -1
  172. package/dist/modules/sales/components/DocumentNumberSettings.js.map +1 -1
  173. package/dist/modules/sales/components/channels/ChannelOfferForm.js +1 -1
  174. package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +1 -1
  175. package/dist/modules/sales/components/documents/AdjustmentDialog.js +1 -1
  176. package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +1 -1
  177. package/dist/modules/sales/components/documents/DocumentTotals.js +3 -3
  178. package/dist/modules/sales/components/documents/DocumentTotals.js.map +1 -1
  179. package/dist/modules/sales/components/documents/PaymentDialog.js +1 -1
  180. package/dist/modules/sales/components/documents/PaymentDialog.js.map +1 -1
  181. package/dist/modules/sales/components/documents/SalesDocumentForm.js +2 -2
  182. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  183. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +4 -4
  184. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +1 -1
  185. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +4 -4
  186. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +1 -1
  187. package/dist/modules/sales/widgets/injection/document-history/widget.client.js +2 -2
  188. package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +1 -1
  189. package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js +1 -1
  190. package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js.map +1 -1
  191. package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js +1 -1
  192. package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js.map +1 -1
  193. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js +1 -1
  194. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js.map +1 -1
  195. package/dist/modules/staff/backend/staff/team-members/[id]/page.js +1 -1
  196. package/dist/modules/staff/backend/staff/team-members/[id]/page.js.map +1 -1
  197. package/dist/modules/translations/components/TranslationDrawerAction.js +2 -2
  198. package/dist/modules/translations/components/TranslationDrawerAction.js.map +1 -1
  199. package/dist/modules/translations/components/TranslationManager.js +3 -3
  200. package/dist/modules/translations/components/TranslationManager.js.map +1 -1
  201. package/dist/modules/translations/widgets/injection/translation-manager/widget.client.js +2 -2
  202. package/dist/modules/translations/widgets/injection/translation-manager/widget.client.js.map +1 -1
  203. package/dist/modules/workflows/backend/definitions/[id]/page.js +5 -5
  204. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  205. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2 -2
  206. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  207. package/dist/modules/workflows/backend/events/[id]/page.js +4 -4
  208. package/dist/modules/workflows/backend/events/[id]/page.js.map +1 -1
  209. package/dist/modules/workflows/backend/instances/[id]/page.js +2 -2
  210. package/dist/modules/workflows/backend/instances/[id]/page.js.map +1 -1
  211. package/dist/modules/workflows/backend/tasks/[id]/page.js +20 -20
  212. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  213. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +1 -1
  214. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +1 -1
  215. package/dist/modules/workflows/components/EdgeEditDialog.js +12 -12
  216. package/dist/modules/workflows/components/EdgeEditDialog.js.map +1 -1
  217. package/dist/modules/workflows/components/NodeEditDialog.js +26 -26
  218. package/dist/modules/workflows/components/NodeEditDialog.js.map +1 -1
  219. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +1 -1
  220. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +1 -1
  221. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js +2 -2
  222. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  223. package/dist/modules/workflows/components/mobile/MobileInstanceOverview.js +7 -7
  224. package/dist/modules/workflows/components/mobile/MobileInstanceOverview.js.map +2 -2
  225. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +11 -11
  226. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  227. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +1 -1
  228. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +1 -1
  229. package/dist/modules/workflows/components/mobile/MobileWorkflowTimeline.js +23 -23
  230. package/dist/modules/workflows/components/mobile/MobileWorkflowTimeline.js.map +2 -2
  231. package/dist/modules/workflows/frontend/checkout-demo/page.js +6 -6
  232. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +1 -1
  233. package/package.json +3 -3
  234. package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +18 -18
  235. package/src/modules/api_keys/backend/api-keys/create/page.tsx +1 -1
  236. package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -3
  237. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +1 -1
  238. package/src/modules/attachments/fields/attachment.tsx +1 -1
  239. package/src/modules/audit_logs/components/ActionLogDetailsDialog.tsx +1 -1
  240. package/src/modules/audit_logs/lib/display-helpers.tsx +1 -1
  241. package/src/modules/auth/backend/users/create/page.tsx +1 -1
  242. package/src/modules/business_rules/backend/rules/page.tsx +7 -7
  243. package/src/modules/business_rules/backend/sets/page.tsx +3 -3
  244. package/src/modules/business_rules/components/ActionBuilder.tsx +6 -6
  245. package/src/modules/business_rules/components/ActionRow.tsx +8 -8
  246. package/src/modules/business_rules/components/ConditionBuilder.tsx +6 -6
  247. package/src/modules/business_rules/components/ConditionGroup.tsx +2 -2
  248. package/src/modules/business_rules/components/ConditionRow.tsx +3 -3
  249. package/src/modules/business_rules/components/RuleSetMembers.tsx +9 -9
  250. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +2 -2
  251. package/src/modules/catalog/backend/catalog/products/create/page.tsx +5 -5
  252. package/src/modules/catalog/components/products/MetadataEditor.tsx +1 -1
  253. package/src/modules/catalog/components/products/ProductImageCell.tsx +1 -1
  254. package/src/modules/catalog/components/products/VariantBuilder.tsx +1 -1
  255. package/src/modules/catalog/widgets/injection/product-seo/widget.client.tsx +1 -1
  256. package/src/modules/currencies/components/CurrencyFetchingConfig.tsx +1 -1
  257. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +2 -2
  258. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +10 -10
  259. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +9 -9
  260. package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +2 -2
  261. package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +3 -3
  262. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +2 -2
  263. package/src/modules/customers/components/AddressTiles.tsx +1 -1
  264. package/src/modules/customers/components/detail/ActivityForm.tsx +3 -3
  265. package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
  266. package/src/modules/customers/components/detail/CustomFieldValuesList.tsx +1 -1
  267. package/src/modules/customers/components/detail/DealForm.tsx +1 -1
  268. package/src/modules/customers/components/detail/DealsSection.tsx +1 -1
  269. package/src/modules/customers/components/detail/DetailFieldsSection.tsx +1 -1
  270. package/src/modules/customers/components/detail/InlineEditors.tsx +5 -5
  271. package/src/modules/customers/components/detail/TasksSection.tsx +1 -1
  272. package/src/modules/customers/components/detail/TimelineItemHeader.tsx +1 -1
  273. package/src/modules/customers/components/formConfig.tsx +2 -2
  274. package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +1 -1
  275. package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +2 -2
  276. package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +1 -1
  277. package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +1 -1
  278. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +1 -1
  279. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.tsx +1 -1
  280. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.tsx +1 -1
  281. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +1 -1
  282. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.tsx +1 -1
  283. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.tsx +1 -1
  284. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +2 -2
  285. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +1 -1
  286. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +1 -1
  287. package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +2 -2
  288. package/src/modules/data_sync/backend/data-sync/page.tsx +4 -4
  289. package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +2 -2
  290. package/src/modules/dictionaries/components/AppearanceSelector.tsx +3 -3
  291. package/src/modules/dictionaries/components/DictionariesManager.tsx +4 -4
  292. package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +2 -2
  293. package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +3 -3
  294. package/src/modules/dictionaries/fields/dictionary.tsx +4 -4
  295. package/src/modules/entities/components/EncryptionManager.tsx +3 -3
  296. package/src/modules/entities/components/UserEntitiesTable.tsx +1 -1
  297. package/src/modules/feature_toggles/components/formConfig.tsx +1 -1
  298. package/src/modules/feature_toggles/components/overrideFormConfig.tsx +2 -2
  299. package/src/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.tsx +12 -12
  300. package/src/modules/inbox_ops/components/messages/InboxEmailPreview.tsx +1 -1
  301. package/src/modules/inbox_ops/components/proposals/ActionCard.tsx +12 -12
  302. package/src/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.tsx +4 -4
  303. package/src/modules/integrations/backend/integrations/[id]/page.tsx +6 -6
  304. package/src/modules/messages/components/MessagesInboxPageClient.tsx +1 -1
  305. package/src/modules/messages/components/defaults/DefaultMessageListItem.tsx +1 -1
  306. package/src/modules/messages/components/defaults/MessageRecordObjectDetail.tsx +1 -1
  307. package/src/modules/messages/components/defaults/MessageRecordObjectPreview.tsx +1 -1
  308. package/src/modules/messages/components/message-detail/panels/MessageListComponent.tsx +1 -1
  309. package/src/modules/messages/components/message-detail/panels/attachments-panel.tsx +1 -1
  310. package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +11 -11
  311. package/src/modules/planner/components/AvailabilityRulesEditor.tsx +2 -2
  312. package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +2 -2
  313. package/src/modules/portal/frontend/[orgSlug]/portal/login/page.tsx +3 -3
  314. package/src/modules/portal/frontend/[orgSlug]/portal/page.tsx +3 -3
  315. package/src/modules/portal/frontend/[orgSlug]/portal/profile/page.tsx +4 -4
  316. package/src/modules/portal/frontend/[orgSlug]/portal/signup/page.tsx +4 -4
  317. package/src/modules/resources/backend/resources/resources/[id]/page.tsx +1 -1
  318. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +4 -4
  319. package/src/modules/sales/components/DocumentNumberSettings.tsx +1 -1
  320. package/src/modules/sales/components/channels/ChannelOfferForm.tsx +1 -1
  321. package/src/modules/sales/components/documents/AdjustmentDialog.tsx +1 -1
  322. package/src/modules/sales/components/documents/DocumentTotals.tsx +3 -3
  323. package/src/modules/sales/components/documents/PaymentDialog.tsx +1 -1
  324. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +2 -2
  325. package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +4 -4
  326. package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +4 -4
  327. package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +2 -2
  328. package/src/modules/sales/widgets/messages/SalesDocumentMessageDetail.tsx +1 -1
  329. package/src/modules/sales/widgets/messages/SalesDocumentMessagePreview.tsx +1 -1
  330. package/src/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.tsx +1 -1
  331. package/src/modules/staff/backend/staff/team-members/[id]/page.tsx +1 -1
  332. package/src/modules/translations/components/TranslationDrawerAction.tsx +2 -2
  333. package/src/modules/translations/components/TranslationManager.tsx +3 -3
  334. package/src/modules/translations/widgets/injection/translation-manager/widget.client.tsx +2 -2
  335. package/src/modules/workflows/backend/definitions/[id]/page.tsx +5 -5
  336. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +2 -2
  337. package/src/modules/workflows/backend/events/[id]/page.tsx +4 -4
  338. package/src/modules/workflows/backend/instances/[id]/page.tsx +2 -2
  339. package/src/modules/workflows/backend/tasks/[id]/page.tsx +23 -23
  340. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +1 -1
  341. package/src/modules/workflows/components/EdgeEditDialog.tsx +12 -12
  342. package/src/modules/workflows/components/NodeEditDialog.tsx +26 -26
  343. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +1 -1
  344. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +2 -2
  345. package/src/modules/workflows/components/mobile/MobileInstanceOverview.tsx +7 -7
  346. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +14 -14
  347. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +1 -1
  348. package/src/modules/workflows/components/mobile/MobileWorkflowTimeline.tsx +23 -23
  349. package/src/modules/workflows/frontend/checkout-demo/page.tsx +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/components/EdgeEditDialog.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport {Edge} from '@xyflow/react'\nimport {useEffect, useState} from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from '@open-mercato/ui/primitives/dialog'\nimport {Button} from '@open-mercato/ui/primitives/button'\nimport {Input} from '@open-mercato/ui/primitives/input'\nimport {Label} from '@open-mercato/ui/primitives/label'\nimport {Badge} from '@open-mercato/ui/primitives/badge'\nimport {Separator} from '@open-mercato/ui/primitives/separator'\nimport {Plus, Trash2} from 'lucide-react'\nimport {type BusinessRule, BusinessRulesSelector} from './BusinessRulesSelector'\nimport {JsonBuilder} from '@open-mercato/ui/backend/JsonBuilder'\nimport {useT} from '@open-mercato/shared/lib/i18n/context'\nimport {useConfirmDialog} from '@open-mercato/ui/backend/confirm-dialog'\n\nexport interface EdgeEditDialogProps {\n edge: Edge | null\n isOpen: boolean\n onClose: () => void\n onSave: (edgeId: string, updates: Partial<Edge['data']>) => void\n onDelete: (edgeId: string) => void\n}\n\ninterface TransitionCondition {\n ruleId: string\n required: boolean\n}\n\n/**\n * EdgeEditDialog - Modal dialog for editing transition properties\n *\n * Allows editing:\n * - Label\n * - Trigger type (auto, manual, signal, timer)\n * - Pre-conditions (guard rules)\n * - Post-conditions (validation rules)\n * - Activities\n * - Business rules integration\n */\nexport function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }: EdgeEditDialogProps) {\n const t = useT()\n const { confirm: confirmDialog, ConfirmDialogElement } = useConfirmDialog()\n const [transitionName, setTransitionName] = useState('')\n const [trigger, setTrigger] = useState('auto')\n const [priority, setPriority] = useState('100')\n const [continueOnActivityFailure, setContinueOnActivityFailure] = useState(false)\n const [preConditions, setPreConditions] = useState<TransitionCondition[]>([])\n const [postConditions, setPostConditions] = useState<TransitionCondition[]>([])\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [advancedConfig, setAdvancedConfig] = useState<Record<string, any>>({})\n const [activities, setActivities] = useState<any[]>([])\n const [expandedActivities, setExpandedActivities] = useState<Set<number>>(new Set())\n const [expandedPreConditions, setExpandedPreConditions] = useState<Set<number>>(new Set())\n const [expandedPostConditions, setExpandedPostConditions] = useState<Set<number>>(new Set())\n const [showRuleSelector, setShowRuleSelector] = useState(false)\n const [ruleSelectorMode, setRuleSelectorMode] = useState<'pre' | 'post'>('pre')\n const [ruleDetailsCache, setRuleDetailsCache] = useState<Map<string, BusinessRule>>(new Map())\n\n // Generate a readable name from edge ID (e.g., \"start_to_cart\" -> \"Start to Cart\")\n const generateNameFromId = (edgeId: string): string => {\n return edgeId\n .split('_to_')\n .map(part => part.split('_').map(word =>\n word.charAt(0).toUpperCase() + word.slice(1)\n ).join(' '))\n .join(' \u2192 ')\n }\n\n // Load edge data when dialog opens\n useEffect(() => {\n if (edge && isOpen) {\n const edgeData = edge.data as any\n\n // Try to get transition name from various sources\n let loadedTransitionName = ''\n if (edgeData?.transitionName && edgeData.transitionName !== '') {\n loadedTransitionName = edgeData.transitionName\n } else if (edgeData?.label && edgeData.label !== '' && edgeData.label !== undefined) {\n loadedTransitionName = edgeData.label\n } else {\n // Generate a name from the edge ID as fallback\n loadedTransitionName = generateNameFromId(edge.id)\n }\n\n setTransitionName(loadedTransitionName)\n\n setTrigger(edgeData?.trigger || 'auto')\n setPriority((edgeData?.priority || 100).toString())\n setContinueOnActivityFailure(edgeData?.continueOnActivityFailure !== undefined ? edgeData.continueOnActivityFailure : false)\n\n // Handle pre/post conditions - convert from various formats\n const rawPreConditions = edgeData?.preConditions || []\n const rawPostConditions = edgeData?.postConditions || []\n\n // Convert to TransitionCondition format\n setPreConditions(Array.isArray(rawPreConditions)\n ? rawPreConditions.map((c: any) =>\n typeof c === 'string' ? { ruleId: c, required: true } : c\n )\n : []\n )\n setPostConditions(Array.isArray(rawPostConditions)\n ? rawPostConditions.map((c: any) =>\n typeof c === 'string' ? { ruleId: c, required: true } : c\n )\n : []\n )\n\n setActivities(edgeData?.activities || [])\n\n // Load advanced config (activities, etc.)\n const advancedFields: any = {}\n if (edgeData?.activities && edgeData.activities.length > 0) {\n advancedFields.activities = edgeData.activities\n }\n setAdvancedConfig(advancedFields)\n setExpandedActivities(new Set())\n setExpandedPreConditions(new Set())\n setExpandedPostConditions(new Set())\n }\n }, [edge, isOpen])\n\n const toggleActivity = (index: number) => {\n const newExpanded = new Set(expandedActivities)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedActivities(newExpanded)\n }\n\n const addActivity = () => {\n const newActivity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n timeout: '',\n retryPolicy: {\n maxAttempts: 3,\n initialIntervalMs: 1000,\n backoffCoefficient: 2,\n maxIntervalMs: 10000,\n },\n }\n setActivities([...activities, newActivity])\n // Auto-expand the new activity\n const newExpanded = new Set(expandedActivities)\n newExpanded.add(activities.length)\n setExpandedActivities(newExpanded)\n }\n\n const removeActivity = async (index: number) => {\n const confirmed = await confirmDialog({\n title: t('workflows.edgeEditor.confirmRemoveActivity'),\n variant: 'destructive',\n })\n if (confirmed) {\n setActivities(activities.filter((_, i) => i !== index))\n // Remove from expanded set\n const newExpanded = new Set(expandedActivities)\n newExpanded.delete(index)\n setExpandedActivities(newExpanded)\n }\n }\n\n const updateActivity = (index: number, field: string, value: any) => {\n const updated = [...activities]\n updated[index] = { ...updated[index], [field]: value }\n setActivities(updated)\n }\n\n const updateActivityRetryPolicy = (index: number, field: string, value: any) => {\n const updated = [...activities]\n updated[index] = {\n ...updated[index],\n retryPolicy: {\n ...updated[index].retryPolicy,\n [field]: value,\n },\n }\n setActivities(updated)\n }\n\n // Business Rules Management\n const togglePreCondition = (index: number) => {\n const newExpanded = new Set(expandedPreConditions)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedPreConditions(newExpanded)\n }\n\n const togglePostCondition = (index: number) => {\n const newExpanded = new Set(expandedPostConditions)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedPostConditions(newExpanded)\n }\n\n const openRuleSelector = (mode: 'pre' | 'post') => {\n setRuleSelectorMode(mode)\n setShowRuleSelector(true)\n }\n\n const closeRuleSelector = () => {\n setShowRuleSelector(false)\n }\n\n const handleRuleSelected = (ruleId: string, rule: BusinessRule) => {\n // Cache the rule details for display\n setRuleDetailsCache(prev => new Map(prev).set(ruleId, rule))\n\n if (ruleSelectorMode === 'pre') {\n if (!preConditions.find(c => c.ruleId === ruleId)) {\n setPreConditions([...preConditions, { ruleId, required: true }])\n }\n } else {\n if (!postConditions.find(c => c.ruleId === ruleId)) {\n setPostConditions([...postConditions, { ruleId, required: true }])\n }\n }\n closeRuleSelector()\n }\n\n const removePreCondition = (index: number) => {\n setPreConditions(preConditions.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedPreConditions)\n newExpanded.delete(index)\n setExpandedPreConditions(newExpanded)\n }\n\n const removePostCondition = (index: number) => {\n setPostConditions(postConditions.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedPostConditions)\n newExpanded.delete(index)\n setExpandedPostConditions(newExpanded)\n }\n\n const updatePreCondition = (index: number, field: keyof TransitionCondition, value: any) => {\n const updated = [...preConditions]\n updated[index] = { ...updated[index], [field]: value }\n setPreConditions(updated)\n }\n\n const updatePostCondition = (index: number, field: keyof TransitionCondition, value: any) => {\n const updated = [...postConditions]\n updated[index] = { ...updated[index], [field]: value }\n setPostConditions(updated)\n }\n\n const getBusinessRuleDetails = (ruleId: string): BusinessRule | null => {\n return ruleDetailsCache.get(ruleId) || null\n }\n\n const handleSave = () => {\n if (!edge) return\n\n const updates: Partial<Edge['data']> = {\n transitionName,\n label: transitionName, // Keep label for backward compatibility\n trigger,\n priority: parseInt(priority) || 100,\n continueOnActivityFailure,\n preConditions: preConditions.length > 0 ? preConditions : undefined,\n postConditions: postConditions.length > 0 ? postConditions : undefined,\n activities: activities.length > 0 ? activities : undefined,\n }\n\n // Merge advanced config\n if (advancedConfig && Object.keys(advancedConfig).length > 0) {\n Object.assign(updates, advancedConfig)\n }\n\n onSave(edge.id, updates)\n onClose()\n }\n\n const handleDelete = () => {\n if (!edge) return\n onDelete(edge.id)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n handleSave()\n }\n if (e.key === 'Escape') {\n onClose()\n }\n }\n\n if (!isOpen || !edge) return null\n\n const triggerVariant = trigger === 'auto' ? 'default' : trigger === 'manual' ? 'secondary' : 'outline'\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"sm:max-w-4xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <div className=\"flex items-center gap-2 mb-2\">\n <DialogTitle>{t('workflows.edgeEditor.title')}</DialogTitle>\n <Badge variant={triggerVariant} className=\"text-xs\">\n {t(`workflows.transitions.triggers.${trigger}`)}\n </Badge>\n </div>\n <div className=\"space-y-1\">\n <DialogDescription>\n {t('workflows.edgeEditor.description')}\n </DialogDescription>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium\">{t('workflows.edgeEditor.id')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.id}</code>\n </div>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium\">{t('workflows.edgeEditor.flow')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.source}</code>\n <span>\u2192</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.target}</code>\n </div>\n </div>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {/* Transition Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"transitionName\">{t('workflows.edgeEditor.transitionName')}</Label>\n <Input\n id=\"transitionName\"\n type=\"text\"\n value={transitionName}\n onChange={(e) => setTransitionName(e.target.value)}\n placeholder={t('workflows.edgeEditor.transitionNamePlaceholder', { name: generateNameFromId(edge.id) })}\n autoFocus\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.transitionNameHint')}\n </p>\n </div>\n\n {/* Trigger Type */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"trigger\">{t('workflows.edgeEditor.triggerType')}</Label>\n <select\n id=\"trigger\"\n value={trigger}\n onChange={(e) => setTrigger(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <option value=\"auto\">{t('workflows.transitions.triggers.auto')}</option>\n <option value=\"manual\">{t('workflows.transitions.triggers.manual')}</option>\n <option value=\"signal\">{t('workflows.transitions.triggers.signal')}</option>\n <option value=\"timer\">{t('workflows.transitions.triggers.timer')}</option>\n </select>\n <p className=\"text-xs text-muted-foreground\">\n {t(`workflows.edgeEditor.triggerDescriptions.${trigger}`)}\n </p>\n </div>\n\n {/* Priority */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"priority\">{t('workflows.edgeEditor.priority')}</Label>\n <Input\n id=\"priority\"\n type=\"number\"\n value={priority}\n onChange={(e) => setPriority(e.target.value)}\n placeholder=\"100\"\n min=\"0\"\n max=\"9999\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.priorityHint')}\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id=\"continueOnActivityFailure\"\n checked={continueOnActivityFailure}\n onChange={(e) => setContinueOnActivityFailure(e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <Label htmlFor=\"continueOnActivityFailure\" className=\"font-normal cursor-pointer\">\n {t('workflows.edgeEditor.continueOnActivityFailure')}\n </Label>\n </div>\n <p className=\"text-xs text-muted-foreground ml-6\">\n {t('workflows.edgeEditor.continueOnActivityFailureHint')}\n </p>\n </div>\n\n <Separator />\n\n {/* Pre-conditions (Business Rules) */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold\">\n {t('workflows.edgeEditor.preConditions')} ({preConditions.length})\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.preConditionsHint')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => openRuleSelector('pre')}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addRule')}\n </Button>\n </div>\n\n {preConditions.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border\">\n {t('workflows.edgeEditor.noPreConditions')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {preConditions.map((condition, index) => {\n const isExpanded = expandedPreConditions.has(index)\n const rule = getBusinessRuleDetails(condition.ruleId)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => togglePreCondition(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {rule?.ruleName || condition.ruleId}\n </span>\n {condition.required && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800\">\n {t('workflows.edgeEditor.required')}\n </span>\n )}\n {rule && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800\">\n {rule.ruleType}\n </span>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.ruleId')}: <code className=\"bg-white px-1 rounded\">{condition.ruleId}</code>\n </p>\n {rule?.description && (\n <p className=\"text-xs text-gray-500 mt-1 line-clamp-1\">{rule.description}</p>\n )}\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.ruleId')}</label>\n <input\n type=\"text\"\n value={condition.ruleId}\n onChange={(e) => updatePreCondition(index, 'ruleId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-gray-700\">\n <input\n type=\"checkbox\"\n checked={condition.required}\n onChange={(e) => updatePreCondition(index, 'required', e.target.checked)}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n {t('workflows.edgeEditor.requiredCheckbox')}\n </label>\n </div>\n\n {rule && (\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.businessRuleDetails')}</h4>\n <dl className=\"space-y-1 text-xs\">\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Name:</dt>\n <dd className=\"text-gray-900\">{rule.ruleName}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Type:</dt>\n <dd className=\"text-gray-900\">{rule.ruleType}</dd>\n </div>\n {rule.ruleCategory && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Category:</dt>\n <dd className=\"text-gray-900\">{rule.ruleCategory}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Entity Type:</dt>\n <dd className=\"text-gray-900 font-mono text-xs\">{rule.entityType}</dd>\n </div>\n {rule.eventType && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Event Type:</dt>\n <dd className=\"text-gray-900\">{rule.eventType}</dd>\n </div>\n )}\n {rule.description && (\n <div className=\"mt-2 pt-2 border-t border-gray-200\">\n <dt className=\"font-medium text-gray-700 mb-1\">Description:</dt>\n <dd className=\"text-gray-600\">{rule.description}</dd>\n </div>\n )}\n </dl>\n </div>\n )}\n\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removePreCondition(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removePreCondition')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Post-conditions (Business Rules) */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold\">\n {t('workflows.edgeEditor.postConditions')} ({postConditions.length})\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.postConditionsHint')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => openRuleSelector('post')}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addRule')}\n </Button>\n </div>\n\n {postConditions.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border\">\n {t('workflows.edgeEditor.noPostConditions')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {postConditions.map((condition, index) => {\n const isExpanded = expandedPostConditions.has(index)\n const rule = getBusinessRuleDetails(condition.ruleId)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => togglePostCondition(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {rule?.ruleName || condition.ruleId}\n </span>\n {condition.required && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800\">\n {t('workflows.edgeEditor.required')}\n </span>\n )}\n {rule && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800\">\n {rule.ruleType}\n </span>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.ruleId')}: <code className=\"bg-white px-1 rounded\">{condition.ruleId}</code>\n </p>\n {rule?.description && (\n <p className=\"text-xs text-gray-500 mt-1 line-clamp-1\">{rule.description}</p>\n )}\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.ruleId')}</label>\n <input\n type=\"text\"\n value={condition.ruleId}\n onChange={(e) => updatePostCondition(index, 'ruleId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-gray-700\">\n <input\n type=\"checkbox\"\n checked={condition.required}\n onChange={(e) => updatePostCondition(index, 'required', e.target.checked)}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n />\n {t('workflows.edgeEditor.requiredPostCheckbox')}\n </label>\n </div>\n\n {rule && (\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.businessRuleDetails')}</h4>\n <dl className=\"space-y-1 text-xs\">\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Name:</dt>\n <dd className=\"text-gray-900\">{rule.ruleName}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Type:</dt>\n <dd className=\"text-gray-900\">{rule.ruleType}</dd>\n </div>\n {rule.ruleCategory && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Category:</dt>\n <dd className=\"text-gray-900\">{rule.ruleCategory}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Entity Type:</dt>\n <dd className=\"text-gray-900 font-mono text-xs\">{rule.entityType}</dd>\n </div>\n {rule.eventType && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Event Type:</dt>\n <dd className=\"text-gray-900\">{rule.eventType}</dd>\n </div>\n )}\n {rule.description && (\n <div className=\"mt-2 pt-2 border-t border-gray-200\">\n <dt className=\"font-medium text-gray-700 mb-1\">Description:</dt>\n <dd className=\"text-gray-600\">{rule.description}</dd>\n </div>\n )}\n </dl>\n </div>\n )}\n\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removePostCondition(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removePostCondition')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Activities Section */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {t('workflows.edgeEditor.activities')} ({activities.length})\n </h3>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={addActivity}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addActivity')}\n </Button>\n </div>\n\n {activities.length === 0 && (\n <div className=\"p-4 text-center text-sm text-gray-500 bg-gray-50 rounded-lg border border-gray-200\">\n {t('workflows.edgeEditor.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {activities.map((activity, index) => {\n const isExpanded = expandedActivities.has(index)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => toggleActivity(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {activity.activityName || activity.label || activity.activityId || `Activity ${index + 1}`}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activity.activityType}\n </Badge>\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.activityId')}: <code className=\"bg-white px-1 rounded\">{activity.activityId}</code>\n </p>\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n {/* Activity ID */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityId')} *</label>\n <input\n type=\"text\"\n value={activity.activityId}\n onChange={(e) => updateActivity(index, 'activityId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder={t('workflows.edgeEditor.activityIdPlaceholder')}\n />\n </div>\n\n {/* Activity Name */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityName')} *</label>\n <input\n type=\"text\"\n value={activity.activityName || ''}\n onChange={(e) => updateActivity(index, 'activityName', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder={t('workflows.edgeEditor.activityNamePlaceholder')}\n />\n </div>\n\n {/* Activity Type */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityType')} *</label>\n <select\n value={activity.activityType}\n onChange={(e) => updateActivity(index, 'activityType', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n >\n <option value=\"SEND_EMAIL\">{t('workflows.activities.types.SEND_EMAIL')}</option>\n <option value=\"CALL_API\">{t('workflows.activities.types.CALL_API')}</option>\n <option value=\"UPDATE_ENTITY\">{t('workflows.activities.types.UPDATE_ENTITY')}</option>\n <option value=\"EMIT_EVENT\">{t('workflows.activities.types.EMIT_EVENT')}</option>\n <option value=\"CALL_WEBHOOK\">{t('workflows.activities.types.CALL_WEBHOOK')}</option>\n <option value=\"EXECUTE_FUNCTION\">{t('workflows.activities.types.EXECUTE_FUNCTION')}</option>\n <option value=\"WAIT\">{t('workflows.activities.types.WAIT')}</option>\n </select>\n </div>\n\n {/* Timeout */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.timeout')}</label>\n <input\n type=\"text\"\n value={activity.timeout || ''}\n onChange={(e) => updateActivity(index, 'timeout', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder={t('workflows.edgeEditor.timeoutPlaceholder')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.edgeEditor.timeoutHint')}</p>\n </div>\n\n {/* Retry Policy */}\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.retryPolicy')}</h4>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.maxAttempts')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'maxAttempts', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder=\"3\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.initialInterval')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.initialIntervalMs || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'initialIntervalMs', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder=\"1000\"\n min=\"0\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.backoffCoefficient')}</label>\n <input\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffCoefficient || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'backoffCoefficient', parseFloat(e.target.value) || 1)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder=\"2\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.maxInterval')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.maxIntervalMs || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'maxIntervalMs', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n placeholder=\"10000\"\n min=\"0\"\n />\n </div>\n </div>\n </div>\n\n {/* Activity Flags */}\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.activityOptions')}</h4>\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-async-${index}`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, 'async', e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <label htmlFor={`activity-async-${index}`} className=\"text-xs text-gray-700 cursor-pointer\">\n {t('workflows.edgeEditor.asyncOption')}\n </label>\n </div>\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-compensate-${index}`}\n checked={activity.compensate || false}\n onChange={(e) => updateActivity(index, 'compensate', e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <label htmlFor={`activity-compensate-${index}`} className=\"text-xs text-gray-700 cursor-pointer\">\n {t('workflows.edgeEditor.compensateOption')}\n </label>\n </div>\n </div>\n </div>\n\n {/* Configuration */}\n <div className=\"border-t border-gray-200 pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.configurationJson')}</label>\n <JsonBuilder\n value={activity.config || {}}\n onChange={(config) => {\n const updated = [...activities]\n updated[index] = { ...updated[index], config }\n setActivities(updated)\n }}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.edgeEditor.configurationHint')}</p>\n </div>\n\n {/* Delete Button */}\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removeActivity(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removeActivity')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Advanced Configuration */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"flex items-center justify-between w-full text-left\"\n >\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {t('workflows.edgeEditor.advancedConfiguration')}\n </h3>\n <svg\n className={`w-5 h-5 transition-transform ${showAdvanced ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {showAdvanced && (\n <div className=\"mt-3\">\n <JsonBuilder\n value={advancedConfig}\n onChange={setAdvancedConfig}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.edgeEditor.advancedConfigHint')}\n </p>\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter className=\"flex justify-between\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.deleteTransition')}\n </Button>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n >\n {t('workflows.edgeEditor.cancel')}\n </Button>\n <Button\n type=\"button\"\n onClick={handleSave}\n >\n {t('workflows.edgeEditor.saveChanges')}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n\n {/* Business Rule Selector - Using generic component */}\n <BusinessRulesSelector\n isOpen={showRuleSelector}\n onClose={closeRuleSelector}\n onSelect={handleRuleSelected}\n excludeRuleIds={\n ruleSelectorMode === 'pre'\n ? preConditions.map(c => c.ruleId)\n : postConditions.map(c => c.ruleId)\n }\n title={t('workflows.edgeEditor.selectBusinessRule')}\n description={t('workflows.edgeEditor.selectBusinessRuleDescription', {\n mode: ruleSelectorMode === 'pre'\n ? t('workflows.edgeEditor.preConditions').toLowerCase()\n : t('workflows.edgeEditor.postConditions').toLowerCase()\n })}\n />\n {ConfirmDialogElement}\n </Dialog>\n )\n}\n"],
4
+ "sourcesContent": ["'use client'\n\nimport {Edge} from '@xyflow/react'\nimport {useEffect, useState} from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle\n} from '@open-mercato/ui/primitives/dialog'\nimport {Button} from '@open-mercato/ui/primitives/button'\nimport {Input} from '@open-mercato/ui/primitives/input'\nimport {Label} from '@open-mercato/ui/primitives/label'\nimport {Badge} from '@open-mercato/ui/primitives/badge'\nimport {Separator} from '@open-mercato/ui/primitives/separator'\nimport {Plus, Trash2} from 'lucide-react'\nimport {type BusinessRule, BusinessRulesSelector} from './BusinessRulesSelector'\nimport {JsonBuilder} from '@open-mercato/ui/backend/JsonBuilder'\nimport {useT} from '@open-mercato/shared/lib/i18n/context'\nimport {useConfirmDialog} from '@open-mercato/ui/backend/confirm-dialog'\n\nexport interface EdgeEditDialogProps {\n edge: Edge | null\n isOpen: boolean\n onClose: () => void\n onSave: (edgeId: string, updates: Partial<Edge['data']>) => void\n onDelete: (edgeId: string) => void\n}\n\ninterface TransitionCondition {\n ruleId: string\n required: boolean\n}\n\n/**\n * EdgeEditDialog - Modal dialog for editing transition properties\n *\n * Allows editing:\n * - Label\n * - Trigger type (auto, manual, signal, timer)\n * - Pre-conditions (guard rules)\n * - Post-conditions (validation rules)\n * - Activities\n * - Business rules integration\n */\nexport function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }: EdgeEditDialogProps) {\n const t = useT()\n const { confirm: confirmDialog, ConfirmDialogElement } = useConfirmDialog()\n const [transitionName, setTransitionName] = useState('')\n const [trigger, setTrigger] = useState('auto')\n const [priority, setPriority] = useState('100')\n const [continueOnActivityFailure, setContinueOnActivityFailure] = useState(false)\n const [preConditions, setPreConditions] = useState<TransitionCondition[]>([])\n const [postConditions, setPostConditions] = useState<TransitionCondition[]>([])\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [advancedConfig, setAdvancedConfig] = useState<Record<string, any>>({})\n const [activities, setActivities] = useState<any[]>([])\n const [expandedActivities, setExpandedActivities] = useState<Set<number>>(new Set())\n const [expandedPreConditions, setExpandedPreConditions] = useState<Set<number>>(new Set())\n const [expandedPostConditions, setExpandedPostConditions] = useState<Set<number>>(new Set())\n const [showRuleSelector, setShowRuleSelector] = useState(false)\n const [ruleSelectorMode, setRuleSelectorMode] = useState<'pre' | 'post'>('pre')\n const [ruleDetailsCache, setRuleDetailsCache] = useState<Map<string, BusinessRule>>(new Map())\n\n // Generate a readable name from edge ID (e.g., \"start_to_cart\" -> \"Start to Cart\")\n const generateNameFromId = (edgeId: string): string => {\n return edgeId\n .split('_to_')\n .map(part => part.split('_').map(word =>\n word.charAt(0).toUpperCase() + word.slice(1)\n ).join(' '))\n .join(' \u2192 ')\n }\n\n // Load edge data when dialog opens\n useEffect(() => {\n if (edge && isOpen) {\n const edgeData = edge.data as any\n\n // Try to get transition name from various sources\n let loadedTransitionName = ''\n if (edgeData?.transitionName && edgeData.transitionName !== '') {\n loadedTransitionName = edgeData.transitionName\n } else if (edgeData?.label && edgeData.label !== '' && edgeData.label !== undefined) {\n loadedTransitionName = edgeData.label\n } else {\n // Generate a name from the edge ID as fallback\n loadedTransitionName = generateNameFromId(edge.id)\n }\n\n setTransitionName(loadedTransitionName)\n\n setTrigger(edgeData?.trigger || 'auto')\n setPriority((edgeData?.priority || 100).toString())\n setContinueOnActivityFailure(edgeData?.continueOnActivityFailure !== undefined ? edgeData.continueOnActivityFailure : false)\n\n // Handle pre/post conditions - convert from various formats\n const rawPreConditions = edgeData?.preConditions || []\n const rawPostConditions = edgeData?.postConditions || []\n\n // Convert to TransitionCondition format\n setPreConditions(Array.isArray(rawPreConditions)\n ? rawPreConditions.map((c: any) =>\n typeof c === 'string' ? { ruleId: c, required: true } : c\n )\n : []\n )\n setPostConditions(Array.isArray(rawPostConditions)\n ? rawPostConditions.map((c: any) =>\n typeof c === 'string' ? { ruleId: c, required: true } : c\n )\n : []\n )\n\n setActivities(edgeData?.activities || [])\n\n // Load advanced config (activities, etc.)\n const advancedFields: any = {}\n if (edgeData?.activities && edgeData.activities.length > 0) {\n advancedFields.activities = edgeData.activities\n }\n setAdvancedConfig(advancedFields)\n setExpandedActivities(new Set())\n setExpandedPreConditions(new Set())\n setExpandedPostConditions(new Set())\n }\n }, [edge, isOpen])\n\n const toggleActivity = (index: number) => {\n const newExpanded = new Set(expandedActivities)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedActivities(newExpanded)\n }\n\n const addActivity = () => {\n const newActivity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n timeout: '',\n retryPolicy: {\n maxAttempts: 3,\n initialIntervalMs: 1000,\n backoffCoefficient: 2,\n maxIntervalMs: 10000,\n },\n }\n setActivities([...activities, newActivity])\n // Auto-expand the new activity\n const newExpanded = new Set(expandedActivities)\n newExpanded.add(activities.length)\n setExpandedActivities(newExpanded)\n }\n\n const removeActivity = async (index: number) => {\n const confirmed = await confirmDialog({\n title: t('workflows.edgeEditor.confirmRemoveActivity'),\n variant: 'destructive',\n })\n if (confirmed) {\n setActivities(activities.filter((_, i) => i !== index))\n // Remove from expanded set\n const newExpanded = new Set(expandedActivities)\n newExpanded.delete(index)\n setExpandedActivities(newExpanded)\n }\n }\n\n const updateActivity = (index: number, field: string, value: any) => {\n const updated = [...activities]\n updated[index] = { ...updated[index], [field]: value }\n setActivities(updated)\n }\n\n const updateActivityRetryPolicy = (index: number, field: string, value: any) => {\n const updated = [...activities]\n updated[index] = {\n ...updated[index],\n retryPolicy: {\n ...updated[index].retryPolicy,\n [field]: value,\n },\n }\n setActivities(updated)\n }\n\n // Business Rules Management\n const togglePreCondition = (index: number) => {\n const newExpanded = new Set(expandedPreConditions)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedPreConditions(newExpanded)\n }\n\n const togglePostCondition = (index: number) => {\n const newExpanded = new Set(expandedPostConditions)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedPostConditions(newExpanded)\n }\n\n const openRuleSelector = (mode: 'pre' | 'post') => {\n setRuleSelectorMode(mode)\n setShowRuleSelector(true)\n }\n\n const closeRuleSelector = () => {\n setShowRuleSelector(false)\n }\n\n const handleRuleSelected = (ruleId: string, rule: BusinessRule) => {\n // Cache the rule details for display\n setRuleDetailsCache(prev => new Map(prev).set(ruleId, rule))\n\n if (ruleSelectorMode === 'pre') {\n if (!preConditions.find(c => c.ruleId === ruleId)) {\n setPreConditions([...preConditions, { ruleId, required: true }])\n }\n } else {\n if (!postConditions.find(c => c.ruleId === ruleId)) {\n setPostConditions([...postConditions, { ruleId, required: true }])\n }\n }\n closeRuleSelector()\n }\n\n const removePreCondition = (index: number) => {\n setPreConditions(preConditions.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedPreConditions)\n newExpanded.delete(index)\n setExpandedPreConditions(newExpanded)\n }\n\n const removePostCondition = (index: number) => {\n setPostConditions(postConditions.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedPostConditions)\n newExpanded.delete(index)\n setExpandedPostConditions(newExpanded)\n }\n\n const updatePreCondition = (index: number, field: keyof TransitionCondition, value: any) => {\n const updated = [...preConditions]\n updated[index] = { ...updated[index], [field]: value }\n setPreConditions(updated)\n }\n\n const updatePostCondition = (index: number, field: keyof TransitionCondition, value: any) => {\n const updated = [...postConditions]\n updated[index] = { ...updated[index], [field]: value }\n setPostConditions(updated)\n }\n\n const getBusinessRuleDetails = (ruleId: string): BusinessRule | null => {\n return ruleDetailsCache.get(ruleId) || null\n }\n\n const handleSave = () => {\n if (!edge) return\n\n const updates: Partial<Edge['data']> = {\n transitionName,\n label: transitionName, // Keep label for backward compatibility\n trigger,\n priority: parseInt(priority) || 100,\n continueOnActivityFailure,\n preConditions: preConditions.length > 0 ? preConditions : undefined,\n postConditions: postConditions.length > 0 ? postConditions : undefined,\n activities: activities.length > 0 ? activities : undefined,\n }\n\n // Merge advanced config\n if (advancedConfig && Object.keys(advancedConfig).length > 0) {\n Object.assign(updates, advancedConfig)\n }\n\n onSave(edge.id, updates)\n onClose()\n }\n\n const handleDelete = () => {\n if (!edge) return\n onDelete(edge.id)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n handleSave()\n }\n if (e.key === 'Escape') {\n onClose()\n }\n }\n\n if (!isOpen || !edge) return null\n\n const triggerVariant = trigger === 'auto' ? 'default' : trigger === 'manual' ? 'secondary' : 'outline'\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"sm:max-w-4xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <div className=\"flex items-center gap-2 mb-2\">\n <DialogTitle>{t('workflows.edgeEditor.title')}</DialogTitle>\n <Badge variant={triggerVariant} className=\"text-xs\">\n {t(`workflows.transitions.triggers.${trigger}`)}\n </Badge>\n </div>\n <div className=\"space-y-1\">\n <DialogDescription>\n {t('workflows.edgeEditor.description')}\n </DialogDescription>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium\">{t('workflows.edgeEditor.id')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.id}</code>\n </div>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium\">{t('workflows.edgeEditor.flow')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.source}</code>\n <span>\u2192</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{edge.target}</code>\n </div>\n </div>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {/* Transition Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"transitionName\">{t('workflows.edgeEditor.transitionName')}</Label>\n <Input\n id=\"transitionName\"\n type=\"text\"\n value={transitionName}\n onChange={(e) => setTransitionName(e.target.value)}\n placeholder={t('workflows.edgeEditor.transitionNamePlaceholder', { name: generateNameFromId(edge.id) })}\n autoFocus\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.transitionNameHint')}\n </p>\n </div>\n\n {/* Trigger Type */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"trigger\">{t('workflows.edgeEditor.triggerType')}</Label>\n <select\n id=\"trigger\"\n value={trigger}\n onChange={(e) => setTrigger(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <option value=\"auto\">{t('workflows.transitions.triggers.auto')}</option>\n <option value=\"manual\">{t('workflows.transitions.triggers.manual')}</option>\n <option value=\"signal\">{t('workflows.transitions.triggers.signal')}</option>\n <option value=\"timer\">{t('workflows.transitions.triggers.timer')}</option>\n </select>\n <p className=\"text-xs text-muted-foreground\">\n {t(`workflows.edgeEditor.triggerDescriptions.${trigger}`)}\n </p>\n </div>\n\n {/* Priority */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"priority\">{t('workflows.edgeEditor.priority')}</Label>\n <Input\n id=\"priority\"\n type=\"number\"\n value={priority}\n onChange={(e) => setPriority(e.target.value)}\n placeholder=\"100\"\n min=\"0\"\n max=\"9999\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.priorityHint')}\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id=\"continueOnActivityFailure\"\n checked={continueOnActivityFailure}\n onChange={(e) => setContinueOnActivityFailure(e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <Label htmlFor=\"continueOnActivityFailure\" className=\"font-normal cursor-pointer\">\n {t('workflows.edgeEditor.continueOnActivityFailure')}\n </Label>\n </div>\n <p className=\"text-xs text-muted-foreground ml-6\">\n {t('workflows.edgeEditor.continueOnActivityFailureHint')}\n </p>\n </div>\n\n <Separator />\n\n {/* Pre-conditions (Business Rules) */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold\">\n {t('workflows.edgeEditor.preConditions')} ({preConditions.length})\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.preConditionsHint')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => openRuleSelector('pre')}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addRule')}\n </Button>\n </div>\n\n {preConditions.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border\">\n {t('workflows.edgeEditor.noPreConditions')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {preConditions.map((condition, index) => {\n const isExpanded = expandedPreConditions.has(index)\n const rule = getBusinessRuleDetails(condition.ruleId)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => togglePreCondition(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {rule?.ruleName || condition.ruleId}\n </span>\n {condition.required && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800\">\n {t('workflows.edgeEditor.required')}\n </span>\n )}\n {rule && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800\">\n {rule.ruleType}\n </span>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.ruleId')}: <code className=\"bg-white px-1 rounded\">{condition.ruleId}</code>\n </p>\n {rule?.description && (\n <p className=\"text-xs text-gray-500 mt-1 line-clamp-1\">{rule.description}</p>\n )}\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.ruleId')}</label>\n <input\n type=\"text\"\n value={condition.ruleId}\n onChange={(e) => updatePreCondition(index, 'ruleId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n />\n </div>\n\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-gray-700\">\n <input\n type=\"checkbox\"\n checked={condition.required}\n onChange={(e) => updatePreCondition(index, 'required', e.target.checked)}\n className=\"rounded border-gray-300 text-blue-600 focus-visible:ring-ring\"\n />\n {t('workflows.edgeEditor.requiredCheckbox')}\n </label>\n </div>\n\n {rule && (\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.businessRuleDetails')}</h4>\n <dl className=\"space-y-1 text-xs\">\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Name:</dt>\n <dd className=\"text-gray-900\">{rule.ruleName}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Type:</dt>\n <dd className=\"text-gray-900\">{rule.ruleType}</dd>\n </div>\n {rule.ruleCategory && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Category:</dt>\n <dd className=\"text-gray-900\">{rule.ruleCategory}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Entity Type:</dt>\n <dd className=\"text-gray-900 font-mono text-xs\">{rule.entityType}</dd>\n </div>\n {rule.eventType && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Event Type:</dt>\n <dd className=\"text-gray-900\">{rule.eventType}</dd>\n </div>\n )}\n {rule.description && (\n <div className=\"mt-2 pt-2 border-t border-gray-200\">\n <dt className=\"font-medium text-gray-700 mb-1\">Description:</dt>\n <dd className=\"text-gray-600\">{rule.description}</dd>\n </div>\n )}\n </dl>\n </div>\n )}\n\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removePreCondition(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removePreCondition')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Post-conditions (Business Rules) */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold\">\n {t('workflows.edgeEditor.postConditions')} ({postConditions.length})\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.edgeEditor.postConditionsHint')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => openRuleSelector('post')}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addRule')}\n </Button>\n </div>\n\n {postConditions.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border\">\n {t('workflows.edgeEditor.noPostConditions')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {postConditions.map((condition, index) => {\n const isExpanded = expandedPostConditions.has(index)\n const rule = getBusinessRuleDetails(condition.ruleId)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => togglePostCondition(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {rule?.ruleName || condition.ruleId}\n </span>\n {condition.required && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800\">\n {t('workflows.edgeEditor.required')}\n </span>\n )}\n {rule && (\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800\">\n {rule.ruleType}\n </span>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.ruleId')}: <code className=\"bg-white px-1 rounded\">{condition.ruleId}</code>\n </p>\n {rule?.description && (\n <p className=\"text-xs text-gray-500 mt-1 line-clamp-1\">{rule.description}</p>\n )}\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.ruleId')}</label>\n <input\n type=\"text\"\n value={condition.ruleId}\n onChange={(e) => updatePostCondition(index, 'ruleId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n />\n </div>\n\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-gray-700\">\n <input\n type=\"checkbox\"\n checked={condition.required}\n onChange={(e) => updatePostCondition(index, 'required', e.target.checked)}\n className=\"rounded border-gray-300 text-blue-600 focus-visible:ring-ring\"\n />\n {t('workflows.edgeEditor.requiredPostCheckbox')}\n </label>\n </div>\n\n {rule && (\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.businessRuleDetails')}</h4>\n <dl className=\"space-y-1 text-xs\">\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Name:</dt>\n <dd className=\"text-gray-900\">{rule.ruleName}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Type:</dt>\n <dd className=\"text-gray-900\">{rule.ruleType}</dd>\n </div>\n {rule.ruleCategory && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Category:</dt>\n <dd className=\"text-gray-900\">{rule.ruleCategory}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Entity Type:</dt>\n <dd className=\"text-gray-900 font-mono text-xs\">{rule.entityType}</dd>\n </div>\n {rule.eventType && (\n <div className=\"flex justify-between\">\n <dt className=\"font-medium text-gray-700\">Event Type:</dt>\n <dd className=\"text-gray-900\">{rule.eventType}</dd>\n </div>\n )}\n {rule.description && (\n <div className=\"mt-2 pt-2 border-t border-gray-200\">\n <dt className=\"font-medium text-gray-700 mb-1\">Description:</dt>\n <dd className=\"text-gray-600\">{rule.description}</dd>\n </div>\n )}\n </dl>\n </div>\n )}\n\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removePostCondition(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removePostCondition')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Activities Section */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {t('workflows.edgeEditor.activities')} ({activities.length})\n </h3>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={addActivity}\n >\n <Plus className=\"size-3\" />\n {t('workflows.edgeEditor.addActivity')}\n </Button>\n </div>\n\n {activities.length === 0 && (\n <div className=\"p-4 text-center text-sm text-gray-500 bg-gray-50 rounded-lg border border-gray-200\">\n {t('workflows.edgeEditor.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {activities.map((activity, index) => {\n const isExpanded = expandedActivities.has(index)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => toggleActivity(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-gray-900\">\n {activity.activityName || activity.label || activity.activityId || `Activity ${index + 1}`}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activity.activityType}\n </Badge>\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n {t('workflows.edgeEditor.activityId')}: <code className=\"bg-white px-1 rounded\">{activity.activityId}</code>\n </p>\n </div>\n <svg\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n {/* Activity ID */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityId')} *</label>\n <input\n type=\"text\"\n value={activity.activityId}\n onChange={(e) => updateActivity(index, 'activityId', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder={t('workflows.edgeEditor.activityIdPlaceholder')}\n />\n </div>\n\n {/* Activity Name */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityName')} *</label>\n <input\n type=\"text\"\n value={activity.activityName || ''}\n onChange={(e) => updateActivity(index, 'activityName', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder={t('workflows.edgeEditor.activityNamePlaceholder')}\n />\n </div>\n\n {/* Activity Type */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.activityType')} *</label>\n <select\n value={activity.activityType}\n onChange={(e) => updateActivity(index, 'activityType', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n >\n <option value=\"SEND_EMAIL\">{t('workflows.activities.types.SEND_EMAIL')}</option>\n <option value=\"CALL_API\">{t('workflows.activities.types.CALL_API')}</option>\n <option value=\"UPDATE_ENTITY\">{t('workflows.activities.types.UPDATE_ENTITY')}</option>\n <option value=\"EMIT_EVENT\">{t('workflows.activities.types.EMIT_EVENT')}</option>\n <option value=\"CALL_WEBHOOK\">{t('workflows.activities.types.CALL_WEBHOOK')}</option>\n <option value=\"EXECUTE_FUNCTION\">{t('workflows.activities.types.EXECUTE_FUNCTION')}</option>\n <option value=\"WAIT\">{t('workflows.activities.types.WAIT')}</option>\n </select>\n </div>\n\n {/* Timeout */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.timeout')}</label>\n <input\n type=\"text\"\n value={activity.timeout || ''}\n onChange={(e) => updateActivity(index, 'timeout', e.target.value)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder={t('workflows.edgeEditor.timeoutPlaceholder')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.edgeEditor.timeoutHint')}</p>\n </div>\n\n {/* Retry Policy */}\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.retryPolicy')}</h4>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.maxAttempts')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'maxAttempts', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder=\"3\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.initialInterval')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.initialIntervalMs || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'initialIntervalMs', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder=\"1000\"\n min=\"0\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.backoffCoefficient')}</label>\n <input\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffCoefficient || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'backoffCoefficient', parseFloat(e.target.value) || 1)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder=\"2\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.maxInterval')}</label>\n <input\n type=\"number\"\n value={activity.retryPolicy?.maxIntervalMs || ''}\n onChange={(e) => updateActivityRetryPolicy(index, 'maxIntervalMs', parseInt(e.target.value) || 0)}\n className=\"w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring\"\n placeholder=\"10000\"\n min=\"0\"\n />\n </div>\n </div>\n </div>\n\n {/* Activity Flags */}\n <div className=\"border-t border-gray-200 pt-3\">\n <h4 className=\"text-xs font-semibold text-gray-900 mb-2\">{t('workflows.edgeEditor.activityOptions')}</h4>\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-async-${index}`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, 'async', e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <label htmlFor={`activity-async-${index}`} className=\"text-xs text-gray-700 cursor-pointer\">\n {t('workflows.edgeEditor.asyncOption')}\n </label>\n </div>\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-compensate-${index}`}\n checked={activity.compensate || false}\n onChange={(e) => updateActivity(index, 'compensate', e.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <label htmlFor={`activity-compensate-${index}`} className=\"text-xs text-gray-700 cursor-pointer\">\n {t('workflows.edgeEditor.compensateOption')}\n </label>\n </div>\n </div>\n </div>\n\n {/* Configuration */}\n <div className=\"border-t border-gray-200 pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.edgeEditor.configurationJson')}</label>\n <JsonBuilder\n value={activity.config || {}}\n onChange={(config) => {\n const updated = [...activities]\n updated[index] = { ...updated[index], config }\n setActivities(updated)\n }}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.edgeEditor.configurationHint')}</p>\n </div>\n\n {/* Delete Button */}\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removeActivity(index)}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.removeActivity')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Advanced Configuration */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"flex items-center justify-between w-full text-left\"\n >\n <h3 className=\"text-sm font-semibold text-gray-900\">\n {t('workflows.edgeEditor.advancedConfiguration')}\n </h3>\n <svg\n className={`w-5 h-5 transition-transform ${showAdvanced ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {showAdvanced && (\n <div className=\"mt-3\">\n <JsonBuilder\n value={advancedConfig}\n onChange={setAdvancedConfig}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.edgeEditor.advancedConfigHint')}\n </p>\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter className=\"flex justify-between\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.edgeEditor.deleteTransition')}\n </Button>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n >\n {t('workflows.edgeEditor.cancel')}\n </Button>\n <Button\n type=\"button\"\n onClick={handleSave}\n >\n {t('workflows.edgeEditor.saveChanges')}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n\n {/* Business Rule Selector - Using generic component */}\n <BusinessRulesSelector\n isOpen={showRuleSelector}\n onClose={closeRuleSelector}\n onSelect={handleRuleSelected}\n excludeRuleIds={\n ruleSelectorMode === 'pre'\n ? preConditions.map(c => c.ruleId)\n : postConditions.map(c => c.ruleId)\n }\n title={t('workflows.edgeEditor.selectBusinessRule')}\n description={t('workflows.edgeEditor.selectBusinessRuleDescription', {\n mode: ruleSelectorMode === 'pre'\n ? t('workflows.edgeEditor.preConditions').toLowerCase()\n : t('workflows.edgeEditor.postConditions').toLowerCase()\n })}\n />\n {ConfirmDialogElement}\n </Dialog>\n )\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -375,7 +375,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
375
375
  value: stepName,
376
376
  onChange: (e) => setStepName(e.target.value),
377
377
  placeholder: t("workflows.form.placeholders.stepName"),
378
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
378
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring",
379
379
  autoFocus: true
380
380
  }
381
381
  ),
@@ -390,7 +390,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
390
390
  onChange: (e) => setDescription(e.target.value),
391
391
  placeholder: t("workflows.form.placeholders.description"),
392
392
  rows: 3,
393
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
393
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
394
394
  }
395
395
  ),
396
396
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.description") })
@@ -404,7 +404,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
404
404
  value: timeout,
405
405
  onChange: (e) => setTimeout(e.target.value),
406
406
  placeholder: t("workflows.form.placeholders.timeout"),
407
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
407
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
408
408
  }
409
409
  ),
410
410
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.timeout") })
@@ -420,7 +420,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
420
420
  value: assignedTo,
421
421
  onChange: (e) => setAssignedTo(e.target.value),
422
422
  placeholder: t("workflows.form.placeholders.userId"),
423
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
423
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
424
424
  }
425
425
  ),
426
426
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.assignedTo") })
@@ -434,7 +434,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
434
434
  value: assignedToRoles,
435
435
  onChange: (e) => setAssignedToRoles(e.target.value),
436
436
  placeholder: t("workflows.form.placeholders.roles"),
437
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
437
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
438
438
  }
439
439
  ),
440
440
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.assignedToRoles") })
@@ -448,7 +448,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
448
448
  value: formKey,
449
449
  onChange: (e) => setFormKey(e.target.value),
450
450
  placeholder: t("workflows.form.placeholders.formKey"),
451
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
451
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
452
452
  }
453
453
  ),
454
454
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.formKey") })
@@ -519,7 +519,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
519
519
  type: "text",
520
520
  value: field.name,
521
521
  onChange: (e) => updateFormField(index, "name", e.target.value),
522
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
522
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
523
523
  placeholder: t("workflows.form.placeholders.fieldName")
524
524
  }
525
525
  ),
@@ -536,7 +536,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
536
536
  type: "text",
537
537
  value: field.label,
538
538
  onChange: (e) => updateFormField(index, "label", e.target.value),
539
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
539
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
540
540
  placeholder: t("workflows.form.placeholders.fieldLabel")
541
541
  }
542
542
  ),
@@ -552,7 +552,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
552
552
  {
553
553
  value: field.type,
554
554
  onChange: (e) => updateFormField(index, "type", e.target.value),
555
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
555
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
556
556
  children: [
557
557
  /* @__PURE__ */ jsx("option", { value: "text", children: t("workflows.form.fieldTypes.text") }),
558
558
  /* @__PURE__ */ jsx("option", { value: "number", children: t("workflows.form.fieldTypes.number") }),
@@ -578,7 +578,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
578
578
  type: "text",
579
579
  value: field.placeholder || "",
580
580
  onChange: (e) => updateFormField(index, "placeholder", e.target.value),
581
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
581
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
582
582
  placeholder: t("workflows.form.placeholders.placeholder")
583
583
  }
584
584
  )
@@ -591,7 +591,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
591
591
  type: "text",
592
592
  value: field.defaultValue || "",
593
593
  onChange: (e) => updateFormField(index, "defaultValue", e.target.value),
594
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
594
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
595
595
  placeholder: t("workflows.form.placeholders.defaultValue")
596
596
  }
597
597
  )
@@ -604,7 +604,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
604
604
  type: "text",
605
605
  value: field.options?.join(", ") || "",
606
606
  onChange: (e) => updateFormField(index, "options", e.target.value.split(",").map((o) => o.trim()).filter(Boolean)),
607
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500 focus:border-blue-500",
607
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-ring",
608
608
  placeholder: t("workflows.form.placeholders.options")
609
609
  }
610
610
  ),
@@ -617,7 +617,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
617
617
  type: "checkbox",
618
618
  checked: field.required,
619
619
  onChange: (e) => updateFormField(index, "required", e.target.checked),
620
- className: "rounded border-gray-300 text-blue-600 focus:ring-blue-500"
620
+ className: "rounded border-gray-300 text-blue-600 focus-visible:ring-ring"
621
621
  }
622
622
  ),
623
623
  t("workflows.form.requiredField")
@@ -725,7 +725,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
725
725
  updated[index].activityId = e.target.value;
726
726
  setStepActivities(updated);
727
727
  },
728
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500",
728
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring",
729
729
  placeholder: t("workflows.form.placeholders.activityId")
730
730
  }
731
731
  )
@@ -745,7 +745,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
745
745
  updated[index].activityName = e.target.value;
746
746
  setStepActivities(updated);
747
747
  },
748
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500",
748
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring",
749
749
  placeholder: t("workflows.form.placeholders.activityName")
750
750
  }
751
751
  )
@@ -764,7 +764,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
764
764
  updated[index].activityType = e.target.value;
765
765
  setStepActivities(updated);
766
766
  },
767
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500",
767
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring",
768
768
  children: [
769
769
  /* @__PURE__ */ jsx("option", { value: "SEND_EMAIL", children: t("workflows.activities.types.SEND_EMAIL") }),
770
770
  /* @__PURE__ */ jsx("option", { value: "CALL_API", children: t("workflows.activities.types.CALL_API") }),
@@ -788,7 +788,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
788
788
  updated[index].timeoutMs = e.target.value ? parseInt(e.target.value) : void 0;
789
789
  setStepActivities(updated);
790
790
  },
791
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus:ring-1 focus:ring-blue-500",
791
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-xs focus-visible:ring-1 focus-visible:ring-ring",
792
792
  placeholder: t("workflows.form.placeholders.timeoutMs")
793
793
  }
794
794
  ),
@@ -881,7 +881,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
881
881
  updated[index].async = e.target.checked;
882
882
  setStepActivities(updated);
883
883
  },
884
- className: "w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"
884
+ className: "w-4 h-4 text-blue-600 border-gray-300 rounded focus-visible:ring-ring"
885
885
  }
886
886
  ),
887
887
  /* @__PURE__ */ jsx("span", { className: "text-xs text-gray-700", children: t("workflows.form.executeAsync") })
@@ -938,7 +938,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
938
938
  value: subWorkflowId,
939
939
  onChange: (e) => setSubWorkflowId(e.target.value),
940
940
  placeholder: t("workflows.form.placeholders.subWorkflowId"),
941
- className: "flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
941
+ className: "flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring",
942
942
  readOnly: true
943
943
  }
944
944
  ),
@@ -963,7 +963,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
963
963
  value: subWorkflowVersion,
964
964
  onChange: (e) => setSubWorkflowVersion(e.target.value),
965
965
  placeholder: t("workflows.form.placeholders.version"),
966
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
966
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
967
967
  }
968
968
  ),
969
969
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.subWorkflowVersion") })
@@ -1000,7 +1000,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1000
1000
  setInputMappings(newMappings);
1001
1001
  },
1002
1002
  placeholder: t("workflows.form.placeholders.childKey"),
1003
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-blue-500"
1003
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus-visible:ring-2 focus-visible:ring-ring"
1004
1004
  }
1005
1005
  ),
1006
1006
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-0.5", children: t("workflows.form.descriptions.childKey") })
@@ -1018,7 +1018,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1018
1018
  setInputMappings(newMappings);
1019
1019
  },
1020
1020
  placeholder: t("workflows.form.placeholders.parentPath"),
1021
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-blue-500"
1021
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus-visible:ring-2 focus-visible:ring-ring"
1022
1022
  }
1023
1023
  ),
1024
1024
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-0.5", children: t("workflows.form.descriptions.parentPath") })
@@ -1070,7 +1070,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1070
1070
  setOutputMappings(newMappings);
1071
1071
  },
1072
1072
  placeholder: t("workflows.form.placeholders.parentKey"),
1073
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-blue-500"
1073
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus-visible:ring-2 focus-visible:ring-ring"
1074
1074
  }
1075
1075
  ),
1076
1076
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-0.5", children: t("workflows.form.descriptions.parentKey") })
@@ -1088,7 +1088,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1088
1088
  setOutputMappings(newMappings);
1089
1089
  },
1090
1090
  placeholder: t("workflows.form.placeholders.childPath"),
1091
- className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-blue-500"
1091
+ className: "w-full px-2 py-1.5 border border-gray-300 rounded text-sm focus-visible:ring-2 focus-visible:ring-ring"
1092
1092
  }
1093
1093
  ),
1094
1094
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-0.5", children: t("workflows.form.descriptions.childPath") })
@@ -1123,7 +1123,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1123
1123
  value: signalName,
1124
1124
  onChange: (e) => setSignalName(e.target.value),
1125
1125
  placeholder: t("workflows.form.placeholders.signalName"),
1126
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
1126
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
1127
1127
  }
1128
1128
  ),
1129
1129
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.signalName") })
@@ -1137,7 +1137,7 @@ function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }) {
1137
1137
  value: signalTimeout,
1138
1138
  onChange: (e) => setSignalTimeout(e.target.value),
1139
1139
  placeholder: t("workflows.form.placeholders.signalTimeout"),
1140
- className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
1140
+ className: "w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring"
1141
1141
  }
1142
1142
  ),
1143
1143
  /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-1", children: t("workflows.form.descriptions.signalTimeout") })