@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.
- package/dist/modules/api_docs/frontend/docs/api/Explorer.js +18 -18
- package/dist/modules/api_docs/frontend/docs/api/Explorer.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/create/page.js +1 -1
- package/dist/modules/api_keys/backend/api-keys/create/page.js.map +1 -1
- package/dist/modules/attachments/components/AttachmentLibrary.js +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +1 -1
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +1 -1
- package/dist/modules/attachments/fields/attachment.js +1 -1
- package/dist/modules/attachments/fields/attachment.js.map +1 -1
- package/dist/modules/audit_logs/components/ActionLogDetailsDialog.js +1 -1
- package/dist/modules/audit_logs/components/ActionLogDetailsDialog.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +1 -1
- package/dist/modules/audit_logs/lib/display-helpers.js.map +1 -1
- package/dist/modules/auth/backend/users/create/page.js +1 -1
- package/dist/modules/auth/backend/users/create/page.js.map +1 -1
- package/dist/modules/business_rules/backend/rules/page.js +6 -6
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +2 -2
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/components/ActionBuilder.js +5 -5
- package/dist/modules/business_rules/components/ActionBuilder.js.map +2 -2
- package/dist/modules/business_rules/components/ActionRow.js +8 -8
- package/dist/modules/business_rules/components/ActionRow.js.map +1 -1
- package/dist/modules/business_rules/components/ConditionBuilder.js +5 -5
- package/dist/modules/business_rules/components/ConditionBuilder.js.map +2 -2
- package/dist/modules/business_rules/components/ConditionGroup.js +2 -2
- package/dist/modules/business_rules/components/ConditionGroup.js.map +1 -1
- package/dist/modules/business_rules/components/ConditionRow.js +3 -3
- package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
- package/dist/modules/business_rules/components/RuleSetMembers.js +8 -8
- package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +1 -1
- package/dist/modules/catalog/backend/catalog/products/create/page.js +5 -5
- package/dist/modules/catalog/backend/catalog/products/create/page.js.map +1 -1
- package/dist/modules/catalog/components/products/MetadataEditor.js +1 -1
- package/dist/modules/catalog/components/products/MetadataEditor.js.map +1 -1
- package/dist/modules/catalog/components/products/ProductImageCell.js +1 -1
- package/dist/modules/catalog/components/products/ProductImageCell.js.map +1 -1
- package/dist/modules/catalog/components/products/VariantBuilder.js +1 -1
- package/dist/modules/catalog/components/products/VariantBuilder.js.map +1 -1
- package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js +1 -1
- package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js.map +2 -2
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js +1 -1
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js.map +1 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +9 -9
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -7
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +1 -1
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +3 -3
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +1 -1
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +1 -1
- package/dist/modules/customers/components/AddressTiles.js +1 -1
- package/dist/modules/customers/components/AddressTiles.js.map +1 -1
- package/dist/modules/customers/components/detail/ActivityForm.js +3 -3
- package/dist/modules/customers/components/detail/ActivityForm.js.map +1 -1
- package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
- package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +1 -1
- package/dist/modules/customers/components/detail/CustomFieldValuesList.js +1 -1
- package/dist/modules/customers/components/detail/CustomFieldValuesList.js.map +1 -1
- package/dist/modules/customers/components/detail/DealForm.js +1 -1
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +1 -1
- package/dist/modules/customers/components/detail/DealsSection.js.map +1 -1
- package/dist/modules/customers/components/detail/DetailFieldsSection.js +1 -1
- package/dist/modules/customers/components/detail/DetailFieldsSection.js.map +1 -1
- package/dist/modules/customers/components/detail/InlineEditors.js +5 -5
- package/dist/modules/customers/components/detail/InlineEditors.js.map +2 -2
- package/dist/modules/customers/components/detail/TasksSection.js +1 -1
- package/dist/modules/customers/components/detail/TasksSection.js.map +1 -1
- package/dist/modules/customers/components/detail/TimelineItemHeader.js +1 -1
- package/dist/modules/customers/components/detail/TimelineItemHeader.js.map +1 -1
- package/dist/modules/customers/components/formConfig.js +2 -2
- package/dist/modules/customers/components/formConfig.js.map +1 -1
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +1 -1
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +1 -1
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +1 -1
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +1 -1
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +1 -1
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +1 -1
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +1 -1
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +1 -1
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +1 -1
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +1 -1
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +1 -1
- package/dist/modules/data_sync/backend/data-sync/page.js +4 -4
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +2 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +1 -1
- package/dist/modules/dictionaries/components/AppearanceSelector.js +3 -3
- package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionariesManager.js +4 -4
- package/dist/modules/dictionaries/components/DictionariesManager.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +3 -3
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +1 -1
- package/dist/modules/dictionaries/fields/dictionary.js +4 -4
- package/dist/modules/dictionaries/fields/dictionary.js.map +1 -1
- package/dist/modules/entities/components/EncryptionManager.js +3 -3
- package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js +1 -1
- package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/formConfig.js +1 -1
- package/dist/modules/feature_toggles/components/formConfig.js.map +1 -1
- package/dist/modules/feature_toggles/components/overrideFormConfig.js +2 -2
- package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +1 -1
- package/dist/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.js +12 -12
- package/dist/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.js.map +2 -2
- package/dist/modules/inbox_ops/components/messages/InboxEmailPreview.js +1 -1
- package/dist/modules/inbox_ops/components/messages/InboxEmailPreview.js.map +1 -1
- package/dist/modules/inbox_ops/components/proposals/ActionCard.js +12 -12
- package/dist/modules/inbox_ops/components/proposals/ActionCard.js.map +2 -2
- package/dist/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.js +3 -3
- package/dist/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +6 -6
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +1 -1
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +1 -1
- package/dist/modules/messages/components/defaults/DefaultMessageListItem.js +1 -1
- package/dist/modules/messages/components/defaults/DefaultMessageListItem.js.map +1 -1
- package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js +1 -1
- package/dist/modules/messages/components/defaults/MessageRecordObjectDetail.js.map +1 -1
- package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js +1 -1
- package/dist/modules/messages/components/defaults/MessageRecordObjectPreview.js.map +1 -1
- package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js +1 -1
- package/dist/modules/messages/components/message-detail/panels/MessageListComponent.js.map +1 -1
- package/dist/modules/messages/components/message-detail/panels/attachments-panel.js +1 -1
- package/dist/modules/messages/components/message-detail/panels/attachments-panel.js.map +1 -1
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +11 -11
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js +4 -4
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js +4 -4
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/[id]/page.js +1 -1
- package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +1 -1
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +4 -4
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +1 -1
- package/dist/modules/sales/components/DocumentNumberSettings.js +1 -1
- package/dist/modules/sales/components/DocumentNumberSettings.js.map +1 -1
- package/dist/modules/sales/components/channels/ChannelOfferForm.js +1 -1
- package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +1 -1
- package/dist/modules/sales/components/documents/AdjustmentDialog.js +1 -1
- package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +1 -1
- package/dist/modules/sales/components/documents/DocumentTotals.js +3 -3
- package/dist/modules/sales/components/documents/DocumentTotals.js.map +1 -1
- package/dist/modules/sales/components/documents/PaymentDialog.js +1 -1
- package/dist/modules/sales/components/documents/PaymentDialog.js.map +1 -1
- package/dist/modules/sales/components/documents/SalesDocumentForm.js +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +4 -4
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +1 -1
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +4 -4
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +1 -1
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +1 -1
- package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js +1 -1
- package/dist/modules/sales/widgets/messages/SalesDocumentMessageDetail.js.map +1 -1
- package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js +1 -1
- package/dist/modules/sales/widgets/messages/SalesDocumentMessagePreview.js.map +1 -1
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js +1 -1
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js.map +1 -1
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js +1 -1
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js.map +1 -1
- package/dist/modules/translations/components/TranslationDrawerAction.js +2 -2
- package/dist/modules/translations/components/TranslationDrawerAction.js.map +1 -1
- package/dist/modules/translations/components/TranslationManager.js +3 -3
- package/dist/modules/translations/components/TranslationManager.js.map +1 -1
- package/dist/modules/translations/widgets/injection/translation-manager/widget.client.js +2 -2
- package/dist/modules/translations/widgets/injection/translation-manager/widget.client.js.map +1 -1
- package/dist/modules/workflows/backend/definitions/[id]/page.js +5 -5
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.js +4 -4
- package/dist/modules/workflows/backend/events/[id]/page.js.map +1 -1
- package/dist/modules/workflows/backend/instances/[id]/page.js +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.js.map +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js +20 -20
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +1 -1
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +1 -1
- package/dist/modules/workflows/components/EdgeEditDialog.js +12 -12
- package/dist/modules/workflows/components/EdgeEditDialog.js.map +1 -1
- package/dist/modules/workflows/components/NodeEditDialog.js +26 -26
- package/dist/modules/workflows/components/NodeEditDialog.js.map +1 -1
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +1 -1
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +1 -1
- package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js +2 -2
- package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileInstanceOverview.js +7 -7
- package/dist/modules/workflows/components/mobile/MobileInstanceOverview.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js +11 -11
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +1 -1
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +1 -1
- package/dist/modules/workflows/components/mobile/MobileWorkflowTimeline.js +23 -23
- package/dist/modules/workflows/components/mobile/MobileWorkflowTimeline.js.map +2 -2
- package/dist/modules/workflows/frontend/checkout-demo/page.js +6 -6
- package/dist/modules/workflows/frontend/checkout-demo/page.js.map +1 -1
- package/package.json +3 -3
- package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +18 -18
- package/src/modules/api_keys/backend/api-keys/create/page.tsx +1 -1
- package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -3
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +1 -1
- package/src/modules/attachments/fields/attachment.tsx +1 -1
- package/src/modules/audit_logs/components/ActionLogDetailsDialog.tsx +1 -1
- package/src/modules/audit_logs/lib/display-helpers.tsx +1 -1
- package/src/modules/auth/backend/users/create/page.tsx +1 -1
- package/src/modules/business_rules/backend/rules/page.tsx +7 -7
- package/src/modules/business_rules/backend/sets/page.tsx +3 -3
- package/src/modules/business_rules/components/ActionBuilder.tsx +6 -6
- package/src/modules/business_rules/components/ActionRow.tsx +8 -8
- package/src/modules/business_rules/components/ConditionBuilder.tsx +6 -6
- package/src/modules/business_rules/components/ConditionGroup.tsx +2 -2
- package/src/modules/business_rules/components/ConditionRow.tsx +3 -3
- package/src/modules/business_rules/components/RuleSetMembers.tsx +9 -9
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +2 -2
- package/src/modules/catalog/backend/catalog/products/create/page.tsx +5 -5
- package/src/modules/catalog/components/products/MetadataEditor.tsx +1 -1
- package/src/modules/catalog/components/products/ProductImageCell.tsx +1 -1
- package/src/modules/catalog/components/products/VariantBuilder.tsx +1 -1
- package/src/modules/catalog/widgets/injection/product-seo/widget.client.tsx +1 -1
- package/src/modules/currencies/components/CurrencyFetchingConfig.tsx +1 -1
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +2 -2
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +10 -10
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +9 -9
- package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +2 -2
- package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +3 -3
- package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +2 -2
- package/src/modules/customers/components/AddressTiles.tsx +1 -1
- package/src/modules/customers/components/detail/ActivityForm.tsx +3 -3
- package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
- package/src/modules/customers/components/detail/CustomFieldValuesList.tsx +1 -1
- package/src/modules/customers/components/detail/DealForm.tsx +1 -1
- package/src/modules/customers/components/detail/DealsSection.tsx +1 -1
- package/src/modules/customers/components/detail/DetailFieldsSection.tsx +1 -1
- package/src/modules/customers/components/detail/InlineEditors.tsx +5 -5
- package/src/modules/customers/components/detail/TasksSection.tsx +1 -1
- package/src/modules/customers/components/detail/TimelineItemHeader.tsx +1 -1
- package/src/modules/customers/components/formConfig.tsx +2 -2
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +1 -1
- package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +2 -2
- package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +1 -1
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +1 -1
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +2 -2
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +1 -1
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +2 -2
- package/src/modules/data_sync/backend/data-sync/page.tsx +4 -4
- package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +2 -2
- package/src/modules/dictionaries/components/AppearanceSelector.tsx +3 -3
- package/src/modules/dictionaries/components/DictionariesManager.tsx +4 -4
- package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +2 -2
- package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +3 -3
- package/src/modules/dictionaries/fields/dictionary.tsx +4 -4
- package/src/modules/entities/components/EncryptionManager.tsx +3 -3
- package/src/modules/entities/components/UserEntitiesTable.tsx +1 -1
- package/src/modules/feature_toggles/components/formConfig.tsx +1 -1
- package/src/modules/feature_toggles/components/overrideFormConfig.tsx +2 -2
- package/src/modules/inbox_ops/backend/inbox-ops/proposals/[id]/page.tsx +12 -12
- package/src/modules/inbox_ops/components/messages/InboxEmailPreview.tsx +1 -1
- package/src/modules/inbox_ops/components/proposals/ActionCard.tsx +12 -12
- package/src/modules/inbox_ops/widgets/notifications/ProposalCreatedRenderer.tsx +4 -4
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +6 -6
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +1 -1
- package/src/modules/messages/components/defaults/DefaultMessageListItem.tsx +1 -1
- package/src/modules/messages/components/defaults/MessageRecordObjectDetail.tsx +1 -1
- package/src/modules/messages/components/defaults/MessageRecordObjectPreview.tsx +1 -1
- package/src/modules/messages/components/message-detail/panels/MessageListComponent.tsx +1 -1
- package/src/modules/messages/components/message-detail/panels/attachments-panel.tsx +1 -1
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +11 -11
- package/src/modules/planner/components/AvailabilityRulesEditor.tsx +2 -2
- package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +2 -2
- package/src/modules/portal/frontend/[orgSlug]/portal/login/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/profile/page.tsx +4 -4
- package/src/modules/portal/frontend/[orgSlug]/portal/signup/page.tsx +4 -4
- package/src/modules/resources/backend/resources/resources/[id]/page.tsx +1 -1
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +4 -4
- package/src/modules/sales/components/DocumentNumberSettings.tsx +1 -1
- package/src/modules/sales/components/channels/ChannelOfferForm.tsx +1 -1
- package/src/modules/sales/components/documents/AdjustmentDialog.tsx +1 -1
- package/src/modules/sales/components/documents/DocumentTotals.tsx +3 -3
- package/src/modules/sales/components/documents/PaymentDialog.tsx +1 -1
- package/src/modules/sales/components/documents/SalesDocumentForm.tsx +2 -2
- package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +4 -4
- package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +4 -4
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +2 -2
- package/src/modules/sales/widgets/messages/SalesDocumentMessageDetail.tsx +1 -1
- package/src/modules/sales/widgets/messages/SalesDocumentMessagePreview.tsx +1 -1
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.tsx +1 -1
- package/src/modules/staff/backend/staff/team-members/[id]/page.tsx +1 -1
- package/src/modules/translations/components/TranslationDrawerAction.tsx +2 -2
- package/src/modules/translations/components/TranslationManager.tsx +3 -3
- package/src/modules/translations/widgets/injection/translation-manager/widget.client.tsx +2 -2
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +5 -5
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +2 -2
- package/src/modules/workflows/backend/events/[id]/page.tsx +4 -4
- package/src/modules/workflows/backend/instances/[id]/page.tsx +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +23 -23
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +1 -1
- package/src/modules/workflows/components/EdgeEditDialog.tsx +12 -12
- package/src/modules/workflows/components/NodeEditDialog.tsx +26 -26
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +1 -1
- package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +2 -2
- package/src/modules/workflows/components/mobile/MobileInstanceOverview.tsx +7 -7
- package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +14 -14
- package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +1 -1
- package/src/modules/workflows/components/mobile/MobileWorkflowTimeline.tsx +23 -23
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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") })
|