@open-mercato/core 0.5.1-develop.2953.6647bb2c43 → 0.5.1-develop.2954.610bab2d08

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/helpers/integration/salesUi.js +25 -23
  2. package/dist/helpers/integration/salesUi.js.map +2 -2
  3. package/dist/modules/api_docs/frontend/docs/api/Explorer.js +24 -24
  4. package/dist/modules/api_docs/frontend/docs/api/Explorer.js.map +2 -2
  5. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +15 -7
  6. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  7. package/dist/modules/attachments/fields/attachment.js +4 -6
  8. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  9. package/dist/modules/auth/backend/users/create/page.js +26 -26
  10. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  11. package/dist/modules/business_rules/components/ActionRow.js +36 -25
  12. package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
  13. package/dist/modules/business_rules/components/ConditionGroup.js +14 -5
  14. package/dist/modules/business_rules/components/ConditionGroup.js.map +2 -2
  15. package/dist/modules/business_rules/components/ConditionRow.js +19 -10
  16. package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
  17. package/dist/modules/business_rules/components/RuleSetMembers.js +16 -10
  18. package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
  19. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +30 -34
  20. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  21. package/dist/modules/catalog/backend/catalog/products/create/page.js +220 -223
  22. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
  23. package/dist/modules/catalog/components/PriceKindSettings.js +20 -19
  24. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  25. package/dist/modules/catalog/components/products/ProductUomSection.js +42 -37
  26. package/dist/modules/catalog/components/products/ProductUomSection.js.map +2 -2
  27. package/dist/modules/catalog/components/products/VariantBuilder.js +22 -18
  28. package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
  29. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +18 -26
  30. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  31. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +4 -6
  32. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  33. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +5 -4
  34. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
  35. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +19 -7
  36. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
  37. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +24 -21
  38. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
  39. package/dist/modules/customers/components/AddressEditor.js +24 -7
  40. package/dist/modules/customers/components/AddressEditor.js.map +2 -2
  41. package/dist/modules/customers/components/AddressFormatSettings.js +35 -25
  42. package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
  43. package/dist/modules/customers/components/detail/ActivityForm.js +20 -12
  44. package/dist/modules/customers/components/detail/ActivityForm.js.map +2 -2
  45. package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
  46. package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +2 -2
  47. package/dist/modules/customers/components/detail/DealForm.js +19 -14
  48. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  49. package/dist/modules/customers/components/formConfig.js +16 -12
  50. package/dist/modules/customers/components/formConfig.js.map +2 -2
  51. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +3 -2
  52. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +2 -2
  53. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +18 -10
  54. package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +2 -2
  55. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +3 -2
  56. package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +2 -2
  57. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +3 -2
  58. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +2 -2
  59. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +27 -28
  60. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
  61. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +14 -6
  62. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +2 -2
  63. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +14 -6
  64. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
  65. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +3 -2
  66. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
  67. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +3 -2
  68. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
  69. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +17 -8
  70. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
  71. package/dist/modules/data_sync/backend/data-sync/page.js +40 -23
  72. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  73. package/dist/modules/data_sync/components/IntegrationScheduleTab.js +15 -6
  74. package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
  75. package/dist/modules/dictionaries/components/AppearanceSelector.js +4 -4
  76. package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
  77. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +4 -5
  78. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
  79. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +22 -14
  80. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
  81. package/dist/modules/dictionaries/fields/dictionary.js +18 -13
  82. package/dist/modules/dictionaries/fields/dictionary.js.map +2 -2
  83. package/dist/modules/entities/components/EncryptionManager.js +23 -19
  84. package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
  85. package/dist/modules/feature_toggles/components/formConfig.js +17 -9
  86. package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
  87. package/dist/modules/feature_toggles/components/overrideFormConfig.js +17 -9
  88. package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
  89. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +15 -8
  90. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
  91. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +37 -22
  92. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
  93. package/dist/modules/integrations/backend/integrations/[id]/page.js +22 -17
  94. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  95. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +12 -6
  96. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  97. package/dist/modules/planner/components/AvailabilityRulesEditor.js +19 -12
  98. package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
  99. package/dist/modules/resources/components/ResourceCrudForm.js +15 -10
  100. package/dist/modules/resources/components/ResourceCrudForm.js.map +3 -3
  101. package/dist/modules/sales/backend/sales/documents/[id]/page.js +15 -18
  102. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  103. package/dist/modules/sales/components/ProviderFieldInput.js +23 -20
  104. package/dist/modules/sales/components/ProviderFieldInput.js.map +2 -2
  105. package/dist/modules/sales/components/ShippingMethodsSettings.js +25 -17
  106. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +3 -3
  107. package/dist/modules/sales/components/channels/ChannelOfferForm.js +35 -42
  108. package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
  109. package/dist/modules/sales/components/documents/AddressesSection.js +87 -90
  110. package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
  111. package/dist/modules/sales/components/documents/AdjustmentDialog.js +17 -6
  112. package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +3 -3
  113. package/dist/modules/sales/components/documents/LineItemDialog.js +42 -25
  114. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  115. package/dist/modules/sales/components/documents/SalesDocumentForm.js +96 -87
  116. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  117. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +20 -11
  118. package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +2 -2
  119. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +20 -11
  120. package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +2 -2
  121. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +36 -22
  122. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +2 -2
  123. package/dist/modules/staff/components/TeamMemberForm.js +14 -9
  124. package/dist/modules/staff/components/TeamMemberForm.js.map +3 -3
  125. package/dist/modules/workflows/backend/tasks/[id]/page.js +42 -21
  126. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  127. package/dist/modules/workflows/components/ActivitiesEditor.js +14 -6
  128. package/dist/modules/workflows/components/ActivitiesEditor.js.map +3 -3
  129. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +25 -17
  130. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +3 -3
  131. package/dist/modules/workflows/components/EdgeEditDialog.js +48 -45
  132. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  133. package/dist/modules/workflows/components/NodeEditDialog.js +90 -90
  134. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  135. package/dist/modules/workflows/components/StepsEditor.js +14 -6
  136. package/dist/modules/workflows/components/StepsEditor.js.map +3 -3
  137. package/dist/modules/workflows/components/TransitionsEditor.js +31 -26
  138. package/dist/modules/workflows/components/TransitionsEditor.js.map +3 -3
  139. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +19 -11
  140. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +3 -3
  141. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +12 -14
  142. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  143. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +24 -16
  144. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +3 -3
  145. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +12 -13
  146. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  147. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +12 -8
  148. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  149. package/dist/modules/workflows/frontend/checkout-demo/page.js +43 -46
  150. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  151. package/package.json +3 -3
  152. package/src/helpers/integration/salesUi.ts +40 -30
  153. package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +25 -19
  154. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +21 -11
  155. package/src/modules/attachments/fields/attachment.tsx +4 -6
  156. package/src/modules/auth/backend/users/create/page.tsx +16 -20
  157. package/src/modules/business_rules/components/ActionRow.tsx +51 -32
  158. package/src/modules/business_rules/components/ConditionGroup.tsx +20 -9
  159. package/src/modules/business_rules/components/ConditionRow.tsx +24 -15
  160. package/src/modules/business_rules/components/RuleSetMembers.tsx +23 -13
  161. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +47 -53
  162. package/src/modules/catalog/backend/catalog/products/create/page.tsx +84 -87
  163. package/src/modules/catalog/components/PriceKindSettings.tsx +9 -9
  164. package/src/modules/catalog/components/products/ProductUomSection.tsx +85 -83
  165. package/src/modules/catalog/components/products/VariantBuilder.tsx +49 -33
  166. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +12 -27
  167. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -6
  168. package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +5 -4
  169. package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +28 -15
  170. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +37 -26
  171. package/src/modules/customers/components/AddressEditor.tsx +30 -16
  172. package/src/modules/customers/components/AddressFormatSettings.tsx +25 -19
  173. package/src/modules/customers/components/detail/ActivityForm.tsx +35 -23
  174. package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
  175. package/src/modules/customers/components/detail/DealForm.tsx +33 -20
  176. package/src/modules/customers/components/formConfig.tsx +25 -17
  177. package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +3 -2
  178. package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +21 -11
  179. package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +3 -2
  180. package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +3 -2
  181. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +17 -22
  182. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +17 -7
  183. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +20 -10
  184. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +3 -2
  185. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +3 -2
  186. package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +20 -9
  187. package/src/modules/data_sync/backend/data-sync/page.tsx +64 -38
  188. package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +18 -7
  189. package/src/modules/dictionaries/components/AppearanceSelector.tsx +4 -4
  190. package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +3 -4
  191. package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +27 -21
  192. package/src/modules/dictionaries/fields/dictionary.tsx +36 -23
  193. package/src/modules/entities/components/EncryptionManager.tsx +49 -33
  194. package/src/modules/feature_toggles/components/formConfig.tsx +20 -10
  195. package/src/modules/feature_toggles/components/overrideFormConfig.tsx +20 -10
  196. package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +19 -10
  197. package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +49 -26
  198. package/src/modules/integrations/backend/integrations/[id]/page.tsx +20 -11
  199. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +19 -9
  200. package/src/modules/planner/components/AvailabilityRulesEditor.tsx +34 -21
  201. package/src/modules/resources/components/ResourceCrudForm.tsx +24 -15
  202. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +12 -15
  203. package/src/modules/sales/components/ProviderFieldInput.tsx +26 -17
  204. package/src/modules/sales/components/ShippingMethodsSettings.tsx +28 -20
  205. package/src/modules/sales/components/channels/ChannelOfferForm.tsx +51 -46
  206. package/src/modules/sales/components/documents/AddressesSection.tsx +78 -76
  207. package/src/modules/sales/components/documents/AdjustmentDialog.tsx +27 -15
  208. package/src/modules/sales/components/documents/LineItemDialog.tsx +69 -51
  209. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +98 -87
  210. package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +23 -12
  211. package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +23 -12
  212. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +35 -19
  213. package/src/modules/staff/components/TeamMemberForm.tsx +23 -14
  214. package/src/modules/workflows/backend/tasks/[id]/page.tsx +51 -23
  215. package/src/modules/workflows/components/ActivitiesEditor.tsx +20 -10
  216. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +28 -18
  217. package/src/modules/workflows/components/EdgeEditDialog.tsx +51 -40
  218. package/src/modules/workflows/components/NodeEditDialog.tsx +81 -77
  219. package/src/modules/workflows/components/StepsEditor.tsx +20 -10
  220. package/src/modules/workflows/components/TransitionsEditor.tsx +61 -44
  221. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +22 -12
  222. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +9 -13
  223. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +27 -17
  224. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +9 -12
  225. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +19 -11
  226. package/src/modules/workflows/frontend/checkout-demo/page.tsx +71 -60
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/components/ActivitiesEditor.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\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 { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Activity {\n activityId: string\n activityName: string\n activityType: string\n config?: Record<string, any>\n async?: boolean\n retryPolicy?: {\n maxAttempts?: number\n retryDelay?: number\n backoffMultiplier?: number\n }\n timeout?: number\n compensation?: Record<string, any>\n}\n\ninterface ActivitiesEditorProps {\n value: Activity[]\n onChange: (activities: Activity[]) => void\n error?: string\n}\n\nconst ACTIVITY_TYPES = [\n { value: 'SEND_EMAIL', label: 'Send Email' },\n { value: 'CALL_API', label: 'Call API' },\n { value: 'UPDATE_ENTITY', label: 'Update Entity' },\n { value: 'EMIT_EVENT', label: 'Emit Event' },\n { value: 'CALL_WEBHOOK', label: 'Call Webhook' },\n { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },\n { value: 'WAIT', label: 'Wait' },\n]\n\nexport function ActivitiesEditor({ value = [], onChange, error }: ActivitiesEditorProps) {\n const t = useT()\n\n const addActivity = () => {\n const newActivity: Activity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n async: false,\n retryPolicy: {\n maxAttempts: 3,\n retryDelay: 1000,\n backoffMultiplier: 2,\n },\n }\n onChange([...value, newActivity])\n }\n\n const updateActivity = (index: number, field: keyof Activity, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const updateRetryPolicy = (index: number, field: string, fieldValue: any) => {\n const updated = [...value]\n updated[index] = {\n ...updated[index],\n retryPolicy: {\n ...updated[index].retryPolicy,\n [field]: fieldValue,\n },\n }\n onChange(updated)\n }\n\n const removeActivity = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveActivity = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.activities')}\n </p>\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addActivity} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((activity, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm border-l-4 border-l-green-500\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-id`} className=\"text-xs\">\n {t('workflows.activities.activityId')} *\n </Label>\n <Input\n id={`activity-${index}-id`}\n value={activity.activityId}\n onChange={(e) => updateActivity(index, 'activityId', e.target.value)}\n placeholder=\"activity_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-name`} className=\"text-xs\">\n {t('workflows.activities.activityName')} *\n </Label>\n <Input\n id={`activity-${index}-name`}\n value={activity.activityName}\n onChange={(e) => updateActivity(index, 'activityName', e.target.value)}\n placeholder={t('workflows.activities.activityName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeActivity(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-type`} className=\"text-xs\">\n {t('workflows.activities.activityType')} *\n </Label>\n <select\n id={`activity-${index}-type`}\n value={activity.activityType}\n onChange={(e) => updateActivity(index, 'activityType', e.target.value)}\n className=\"mt-1 w-full px-3 py-2 border border-gray-300 rounded-md text-sm\"\n >\n {ACTIVITY_TYPES.map((type) => (\n <option key={type.value} value={type.value}>\n {t(`workflows.activities.types.${type.value}`)}\n </option>\n ))}\n </select>\n </div>\n <div>\n <Label htmlFor={`activity-${index}-timeout`} className=\"text-xs\">\n {t('workflows.activities.timeout')} (ms)\n </Label>\n <Input\n id={`activity-${index}-timeout`}\n type=\"number\"\n value={activity.timeout || ''}\n onChange={(e) => updateActivity(index, 'timeout', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1\"\n />\n </div>\n <div className=\"flex items-end pb-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-${index}-async`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, 'async', e.target.checked)}\n className=\"h-4 w-4\"\n />\n <Label htmlFor={`activity-${index}-async`} className=\"text-xs cursor-pointer\">\n {t('workflows.activities.async')}\n </Label>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-retry-attempts`} className=\"text-xs\">\n {t('workflows.form.maxRetryAttempts')}\n </Label>\n <Input\n id={`activity-${index}-retry-attempts`}\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || 3}\n onChange={(e) => updateRetryPolicy(index, 'maxAttempts', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-retry-delay`} className=\"text-xs\">\n {t('workflows.form.retryDelay')} (ms)\n </Label>\n <Input\n id={`activity-${index}-retry-delay`}\n type=\"number\"\n value={activity.retryPolicy?.retryDelay || 1000}\n onChange={(e) => updateRetryPolicy(index, 'retryDelay', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-backoff`} className=\"text-xs\">\n {t('workflows.form.backoffMultiplier')}\n </Label>\n <Input\n id={`activity-${index}-backoff`}\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffMultiplier || 2}\n onChange={(e) => updateRetryPolicy(index, 'backoffMultiplier', parseFloat(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n </div>\n\n <div>\n <Label htmlFor={`activity-${index}-config`} className=\"text-xs\">\n {t('workflows.activities.config')} (JSON)\n </Label>\n <Textarea\n id={`activity-${index}-config`}\n value={JSON.stringify(activity.config || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n updateActivity(index, 'config', parsed)\n } catch {\n // Invalid JSON, don't update\n }\n }}\n placeholder='{\"key\": \"value\"}'\n rows={3}\n className=\"mt-1 font-mono text-xs\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\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 {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Activity {\n activityId: string\n activityName: string\n activityType: string\n config?: Record<string, any>\n async?: boolean\n retryPolicy?: {\n maxAttempts?: number\n retryDelay?: number\n backoffMultiplier?: number\n }\n timeout?: number\n compensation?: Record<string, any>\n}\n\ninterface ActivitiesEditorProps {\n value: Activity[]\n onChange: (activities: Activity[]) => void\n error?: string\n}\n\nconst ACTIVITY_TYPES = [\n { value: 'SEND_EMAIL', label: 'Send Email' },\n { value: 'CALL_API', label: 'Call API' },\n { value: 'UPDATE_ENTITY', label: 'Update Entity' },\n { value: 'EMIT_EVENT', label: 'Emit Event' },\n { value: 'CALL_WEBHOOK', label: 'Call Webhook' },\n { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },\n { value: 'WAIT', label: 'Wait' },\n]\n\nexport function ActivitiesEditor({ value = [], onChange, error }: ActivitiesEditorProps) {\n const t = useT()\n\n const addActivity = () => {\n const newActivity: Activity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n async: false,\n retryPolicy: {\n maxAttempts: 3,\n retryDelay: 1000,\n backoffMultiplier: 2,\n },\n }\n onChange([...value, newActivity])\n }\n\n const updateActivity = (index: number, field: keyof Activity, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const updateRetryPolicy = (index: number, field: string, fieldValue: any) => {\n const updated = [...value]\n updated[index] = {\n ...updated[index],\n retryPolicy: {\n ...updated[index].retryPolicy,\n [field]: fieldValue,\n },\n }\n onChange(updated)\n }\n\n const removeActivity = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveActivity = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.activities')}\n </p>\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addActivity} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((activity, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm border-l-4 border-l-green-500\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-id`} className=\"text-xs\">\n {t('workflows.activities.activityId')} *\n </Label>\n <Input\n id={`activity-${index}-id`}\n value={activity.activityId}\n onChange={(e) => updateActivity(index, 'activityId', e.target.value)}\n placeholder=\"activity_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-name`} className=\"text-xs\">\n {t('workflows.activities.activityName')} *\n </Label>\n <Input\n id={`activity-${index}-name`}\n value={activity.activityName}\n onChange={(e) => updateActivity(index, 'activityName', e.target.value)}\n placeholder={t('workflows.activities.activityName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeActivity(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-type`} className=\"text-xs\">\n {t('workflows.activities.activityType')} *\n </Label>\n <Select\n value={activity.activityType}\n onValueChange={(value) => updateActivity(index, 'activityType', value)}\n >\n <SelectTrigger id={`activity-${index}-type`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ACTIVITY_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.activities.types.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`activity-${index}-timeout`} className=\"text-xs\">\n {t('workflows.activities.timeout')} (ms)\n </Label>\n <Input\n id={`activity-${index}-timeout`}\n type=\"number\"\n value={activity.timeout || ''}\n onChange={(e) => updateActivity(index, 'timeout', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1\"\n />\n </div>\n <div className=\"flex items-end pb-2\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-${index}-async`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, 'async', e.target.checked)}\n className=\"h-4 w-4\"\n />\n <Label htmlFor={`activity-${index}-async`} className=\"text-xs cursor-pointer\">\n {t('workflows.activities.async')}\n </Label>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`activity-${index}-retry-attempts`} className=\"text-xs\">\n {t('workflows.form.maxRetryAttempts')}\n </Label>\n <Input\n id={`activity-${index}-retry-attempts`}\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || 3}\n onChange={(e) => updateRetryPolicy(index, 'maxAttempts', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-retry-delay`} className=\"text-xs\">\n {t('workflows.form.retryDelay')} (ms)\n </Label>\n <Input\n id={`activity-${index}-retry-delay`}\n type=\"number\"\n value={activity.retryPolicy?.retryDelay || 1000}\n onChange={(e) => updateRetryPolicy(index, 'retryDelay', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-backoff`} className=\"text-xs\">\n {t('workflows.form.backoffMultiplier')}\n </Label>\n <Input\n id={`activity-${index}-backoff`}\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffMultiplier || 2}\n onChange={(e) => updateRetryPolicy(index, 'backoffMultiplier', parseFloat(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n </div>\n\n <div>\n <Label htmlFor={`activity-${index}-config`} className=\"text-xs\">\n {t('workflows.activities.config')} (JSON)\n </Label>\n <Textarea\n id={`activity-${index}-config`}\n value={JSON.stringify(activity.config || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n updateActivity(index, 'config', parsed)\n } catch {\n // Invalid JSON, don't update\n }\n }}\n placeholder='{\"key\": \"value\"}'\n rows={3}\n className=\"mt-1 font-mono text-xs\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["value"]
7
7
  }
@@ -5,7 +5,14 @@ import { Button } from "@open-mercato/ui/primitives/button";
5
5
  import { Input } from "@open-mercato/ui/primitives/input";
6
6
  import { Textarea } from "@open-mercato/ui/primitives/textarea";
7
7
  import { Label } from "@open-mercato/ui/primitives/label";
8
- import { Switch } from "@open-mercato/ui/primitives/switch";
8
+ import {
9
+ Select,
10
+ SelectContent,
11
+ SelectItem,
12
+ SelectTrigger,
13
+ SelectValue
14
+ } from "@open-mercato/ui/primitives/select";
15
+ import { SwitchField } from "@open-mercato/ui/primitives/switch-field";
9
16
  import { Badge } from "@open-mercato/ui/primitives/badge";
10
17
  import {
11
18
  Dialog,
@@ -308,17 +315,16 @@ function DefinitionTriggersEditor({
308
315
  ),
309
316
  /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t("workflows.triggers.hints.eventPattern", 'Use * as wildcard: "sales.orders.*" matches any order event') })
310
317
  ] }),
311
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
312
- /* @__PURE__ */ jsx(
313
- Switch,
314
- {
315
- id: "trigger-enabled",
316
- checked: formValues.enabled,
317
- onCheckedChange: (checked) => setFormValues((prev) => ({ ...prev, enabled: checked }))
318
- }
319
- ),
320
- /* @__PURE__ */ jsx(Label, { htmlFor: "trigger-enabled", children: t("workflows.triggers.fields.enabled", "Enabled") })
321
- ] }),
318
+ /* @__PURE__ */ jsx(
319
+ SwitchField,
320
+ {
321
+ id: "trigger-enabled",
322
+ label: t("workflows.triggers.fields.enabled", "Enabled"),
323
+ flip: true,
324
+ checked: formValues.enabled,
325
+ onCheckedChange: (checked) => setFormValues((prev) => ({ ...prev, enabled: checked }))
326
+ }
327
+ ),
322
328
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
323
329
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [
324
330
  /* @__PURE__ */ jsx(Label, { children: t("workflows.triggers.fields.filterConditions", "Filter Conditions") }),
@@ -338,13 +344,15 @@ function DefinitionTriggersEditor({
338
344
  className: "w-full sm:w-1/3"
339
345
  }
340
346
  ),
341
- /* @__PURE__ */ jsx(
342
- "select",
347
+ /* @__PURE__ */ jsxs(
348
+ Select,
343
349
  {
344
350
  value: fc.operator,
345
- onChange: (e) => updateFilterCondition(index, "operator", e.target.value),
346
- className: "h-10 w-full sm:w-[140px] rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
347
- children: FILTER_OPERATORS.map((op) => /* @__PURE__ */ jsx("option", { value: op.value, children: op.label }, op.value))
351
+ onValueChange: (value2) => updateFilterCondition(index, "operator", value2),
352
+ children: [
353
+ /* @__PURE__ */ jsx(SelectTrigger, { size: "lg", className: "w-full sm:w-[140px]", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
354
+ /* @__PURE__ */ jsx(SelectContent, { children: FILTER_OPERATORS.map((op) => /* @__PURE__ */ jsx(SelectItem, { value: op.value, children: op.label }, op.value)) })
355
+ ]
348
356
  }
349
357
  ),
350
358
  /* @__PURE__ */ jsx(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/components/DefinitionTriggersEditor.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { useState, useCallback } from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@open-mercato/ui/primitives/dialog'\nimport { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'\nimport { EventPatternInput } from '@open-mercato/ui/backend/inputs/EventPatternInput'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Plus, Trash2, Edit2, Zap, Info, X } from 'lucide-react'\nimport type { WorkflowDefinitionTrigger } from '../data/entities'\n\ninterface DefinitionTriggersEditorProps {\n value: WorkflowDefinitionTrigger[]\n onChange: (triggers: WorkflowDefinitionTrigger[]) => void\n className?: string\n}\n\nconst FILTER_OPERATORS = [\n { value: 'eq', label: 'Equals' },\n { value: 'neq', label: 'Not Equals' },\n { value: 'gt', label: 'Greater Than' },\n { value: 'gte', label: 'Greater Than or Equal' },\n { value: 'lt', label: 'Less Than' },\n { value: 'lte', label: 'Less Than or Equal' },\n { value: 'contains', label: 'Contains' },\n { value: 'startsWith', label: 'Starts With' },\n { value: 'endsWith', label: 'Ends With' },\n { value: 'in', label: 'In (array)' },\n { value: 'notIn', label: 'Not In (array)' },\n { value: 'exists', label: 'Exists' },\n { value: 'notExists', label: 'Not Exists' },\n { value: 'regex', label: 'Regex Match' },\n] as const\n\ntype TriggerFormValues = {\n triggerId: string\n name: string\n description: string\n eventPattern: string\n enabled: boolean\n priority: number\n filterConditions: Array<{ field: string; operator: string; value: string }>\n contextMappings: Array<{ targetKey: string; sourceExpression: string; defaultValue: string }>\n debounceMs: string\n maxConcurrentInstances: string\n}\n\nconst defaultFormValues: TriggerFormValues = {\n triggerId: '',\n name: '',\n description: '',\n eventPattern: '',\n enabled: true,\n priority: 0,\n filterConditions: [],\n contextMappings: [],\n debounceMs: '',\n maxConcurrentInstances: '',\n}\n\n/**\n * DefinitionTriggersEditor\n *\n * Manages event triggers embedded in workflow definitions.\n * Works with local state - no API calls, changes are saved with the definition.\n */\nexport function DefinitionTriggersEditor({\n value,\n onChange,\n className,\n}: DefinitionTriggersEditorProps) {\n const t = useT()\n const [showDialog, setShowDialog] = useState(false)\n const [editingTrigger, setEditingTrigger] = useState<WorkflowDefinitionTrigger | null>(null)\n const [formValues, setFormValues] = useState<TriggerFormValues>(defaultFormValues)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n // Generate trigger ID from name\n const generateTriggerId = useCallback((name: string) => {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/(?:^_+|_+$)/g, '')\n .substring(0, 50) || `trigger_${Date.now()}`\n }, [])\n\n // Parse condition value (try JSON, fallback to string)\n const parseConditionValue = (valueStr: string): unknown => {\n try {\n return JSON.parse(valueStr)\n } catch {\n return valueStr\n }\n }\n\n // Build trigger from form values\n const buildTriggerFromForm = useCallback((values: TriggerFormValues): WorkflowDefinitionTrigger => {\n const config: WorkflowDefinitionTrigger['config'] = {}\n\n if (values.filterConditions.length > 0) {\n config.filterConditions = values.filterConditions.map(fc => ({\n field: fc.field,\n operator: fc.operator as any,\n value: parseConditionValue(fc.value),\n }))\n }\n\n if (values.contextMappings.length > 0) {\n config.contextMapping = values.contextMappings.map(cm => ({\n targetKey: cm.targetKey,\n sourceExpression: cm.sourceExpression,\n defaultValue: cm.defaultValue ? parseConditionValue(cm.defaultValue) : undefined,\n }))\n }\n\n if (values.debounceMs) {\n config.debounceMs = parseInt(values.debounceMs, 10)\n }\n\n if (values.maxConcurrentInstances) {\n config.maxConcurrentInstances = parseInt(values.maxConcurrentInstances, 10)\n }\n\n return {\n triggerId: values.triggerId || generateTriggerId(values.name),\n name: values.name,\n description: values.description || null,\n eventPattern: values.eventPattern,\n enabled: values.enabled,\n priority: values.priority,\n config: Object.keys(config).length > 0 ? config : null,\n }\n }, [generateTriggerId])\n\n // Open dialog for creating new trigger\n const handleCreateNew = useCallback(() => {\n setEditingTrigger(null)\n setFormValues(defaultFormValues)\n setShowDialog(true)\n }, [])\n\n // Open dialog for editing trigger\n const handleEdit = useCallback((trigger: WorkflowDefinitionTrigger) => {\n setEditingTrigger(trigger)\n setFormValues({\n triggerId: trigger.triggerId,\n name: trigger.name,\n description: trigger.description || '',\n eventPattern: trigger.eventPattern,\n enabled: trigger.enabled,\n priority: trigger.priority,\n filterConditions: trigger.config?.filterConditions?.map(fc => ({\n field: fc.field,\n operator: fc.operator,\n value: typeof fc.value === 'string' ? fc.value : JSON.stringify(fc.value),\n })) || [],\n contextMappings: trigger.config?.contextMapping?.map(cm => ({\n targetKey: cm.targetKey,\n sourceExpression: cm.sourceExpression,\n defaultValue: cm.defaultValue !== undefined\n ? (typeof cm.defaultValue === 'string' ? cm.defaultValue : JSON.stringify(cm.defaultValue))\n : '',\n })) || [],\n debounceMs: trigger.config?.debounceMs?.toString() || '',\n maxConcurrentInstances: trigger.config?.maxConcurrentInstances?.toString() || '',\n })\n setShowDialog(true)\n }, [])\n\n // Close dialog\n const handleCloseDialog = useCallback(() => {\n setShowDialog(false)\n setEditingTrigger(null)\n setFormValues(defaultFormValues)\n }, [])\n\n // Submit form\n const handleSubmit = useCallback(() => {\n if (!formValues.name.trim()) {\n return\n }\n if (!formValues.eventPattern.trim()) {\n return\n }\n\n const newTrigger = buildTriggerFromForm(formValues)\n\n if (editingTrigger) {\n // Update existing trigger\n onChange(value.map(t => t.triggerId === editingTrigger.triggerId ? newTrigger : t))\n } else {\n // Check for duplicate triggerId\n const existingIds = new Set(value.map(t => t.triggerId))\n if (existingIds.has(newTrigger.triggerId)) {\n // Append timestamp to make unique\n newTrigger.triggerId = `${newTrigger.triggerId}_${Date.now()}`\n }\n // Add new trigger\n onChange([...value, newTrigger])\n }\n\n handleCloseDialog()\n }, [formValues, editingTrigger, buildTriggerFromForm, value, onChange, handleCloseDialog])\n\n // Delete trigger\n const handleDelete = useCallback((triggerId: string) => {\n onChange(value.filter(t => t.triggerId !== triggerId))\n setDeleteConfirmId(null)\n }, [value, onChange])\n\n // Add filter condition\n const addFilterCondition = useCallback(() => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: [...prev.filterConditions, { field: '', operator: 'eq', value: '' }],\n }))\n }, [])\n\n // Remove filter condition\n const removeFilterCondition = useCallback((index: number) => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: prev.filterConditions.filter((_, i) => i !== index),\n }))\n }, [])\n\n // Update filter condition\n const updateFilterCondition = useCallback((index: number, field: string, fieldValue: string) => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: prev.filterConditions.map((fc, i) =>\n i === index ? { ...fc, [field]: fieldValue } : fc\n ),\n }))\n }, [])\n\n // Add context mapping\n const addContextMapping = useCallback(() => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: [...prev.contextMappings, { targetKey: '', sourceExpression: '', defaultValue: '' }],\n }))\n }, [])\n\n // Remove context mapping\n const removeContextMapping = useCallback((index: number) => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: prev.contextMappings.filter((_, i) => i !== index),\n }))\n }, [])\n\n // Update context mapping\n const updateContextMapping = useCallback((index: number, field: string, fieldValue: string) => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: prev.contextMappings.map((cm, i) =>\n i === index ? { ...cm, [field]: fieldValue } : cm\n ),\n }))\n }, [])\n\n return (\n <div className={className}>\n <div className=\"rounded-lg border bg-card p-3 md:p-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <Zap className=\"w-5 h-5 text-amber-500\" />\n <h3 className=\"text-sm font-semibold uppercase text-muted-foreground\">\n {t('workflows.triggers.title', 'Event Triggers')}\n </h3>\n </div>\n <Button size=\"sm\" variant=\"outline\" onClick={handleCreateNew} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.add', 'Add Trigger')}\n </Button>\n </div>\n\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('workflows.triggers.description', 'Configure events that automatically start this workflow. When a matching event occurs in the system, a new workflow instance will be created with the mapped context.')}\n </p>\n\n {value.length === 0 ? (\n <Alert variant=\"info\">\n <Info className=\"w-4 h-4\" />\n <AlertTitle>{t('workflows.triggers.empty.title', 'No triggers configured')}</AlertTitle>\n <AlertDescription>\n {t('workflows.triggers.empty.description', 'Click \"Add Trigger\" to create an event trigger that automatically starts this workflow.')}\n </AlertDescription>\n </Alert>\n ) : (\n <div className=\"space-y-2\">\n {value.map(trigger => (\n <div\n key={trigger.triggerId}\n className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between p-3 rounded-lg border bg-background hover:bg-accent/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Badge variant={trigger.enabled ? 'default' : 'secondary'} className=\"shrink-0\">\n {trigger.enabled ? t('common.active', 'Active') : t('common.disabled', 'Disabled')}\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"font-medium text-sm truncate\">{trigger.name}</div>\n <code className=\"text-xs text-muted-foreground truncate block\">{trigger.eventPattern}</code>\n </div>\n </div>\n <div className=\"flex items-center gap-2 self-end sm:self-auto\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => handleEdit(trigger)}>\n <Edit2 className=\"w-4 h-4\" />\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"text-destructive hover:text-destructive\"\n onClick={() => setDeleteConfirmId(trigger.triggerId)}\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Create/Edit Dialog */}\n <Dialog open={showDialog} onOpenChange={setShowDialog}>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editingTrigger\n ? t('workflows.triggers.dialog.edit.title', 'Edit Event Trigger')\n : t('workflows.triggers.dialog.create.title', 'Create Event Trigger')\n }\n </DialogTitle>\n <DialogDescription>\n {t('workflows.triggers.dialog.description', 'Configure when this workflow should be automatically started based on system events.')}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 py-4\">\n {/* Basic Info */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-name\">{t('workflows.triggers.fields.name', 'Name')} *</Label>\n <Input\n id=\"trigger-name\"\n value={formValues.name}\n onChange={e => setFormValues(prev => ({ ...prev, name: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.name', 'Order Created Trigger')}\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-priority\">{t('workflows.triggers.fields.priority', 'Priority')}</Label>\n <Input\n id=\"trigger-priority\"\n type=\"number\"\n value={formValues.priority}\n onChange={e => setFormValues(prev => ({ ...prev, priority: parseInt(e.target.value) || 0 }))}\n placeholder=\"0\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.priority', 'Higher priority triggers execute first')}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-description\">{t('workflows.triggers.fields.description', 'Description')}</Label>\n <Textarea\n id=\"trigger-description\"\n value={formValues.description}\n onChange={e => setFormValues(prev => ({ ...prev, description: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.description', 'Describe when this trigger should fire...')}\n rows={2}\n />\n </div>\n\n {/* Event Pattern */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-pattern\">{t('workflows.triggers.fields.eventPattern', 'Event Pattern')} *</Label>\n <EventPatternInput\n value={formValues.eventPattern}\n onChange={eventPattern => setFormValues(prev => ({ ...prev, eventPattern }))}\n placeholder={t('workflows.triggers.placeholders.eventPattern')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.eventPattern', 'Use * as wildcard: \"sales.orders.*\" matches any order event')}\n </p>\n </div>\n\n {/* Enabled Switch */}\n <div className=\"flex items-center gap-2\">\n <Switch\n id=\"trigger-enabled\"\n checked={formValues.enabled}\n onCheckedChange={checked => setFormValues(prev => ({ ...prev, enabled: checked }))}\n />\n <Label htmlFor=\"trigger-enabled\">{t('workflows.triggers.fields.enabled', 'Enabled')}</Label>\n </div>\n\n {/* Filter Conditions */}\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <Label>{t('workflows.triggers.fields.filterConditions', 'Filter Conditions')}</Label>\n <Button size=\"sm\" variant=\"ghost\" onClick={addFilterCondition} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.addCondition', 'Add Condition')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.filterConditions', 'Only trigger when the event payload matches these conditions (all must match)')}\n </p>\n {formValues.filterConditions.map((fc, index) => (\n <div key={index} className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={fc.field}\n onChange={e => updateFilterCondition(index, 'field', e.target.value)}\n placeholder=\"status\"\n className=\"w-full sm:w-1/3\"\n />\n <select\n value={fc.operator}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => updateFilterCondition(index, 'operator', e.target.value)}\n className=\"h-10 w-full sm:w-[140px] rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n >\n {FILTER_OPERATORS.map(op => (\n <option key={op.value} value={op.value}>\n {op.label}\n </option>\n ))}\n </select>\n <Input\n value={fc.value}\n onChange={e => updateFilterCondition(index, 'value', e.target.value)}\n placeholder=\"submitted\"\n className=\"flex-1 min-w-0\"\n />\n <Button size=\"icon\" variant=\"ghost\" className=\"shrink-0\" onClick={() => removeFilterCondition(index)}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n\n {/* Context Mapping */}\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <Label>{t('workflows.triggers.fields.contextMapping', 'Context Mapping')}</Label>\n <Button size=\"sm\" variant=\"ghost\" onClick={addContextMapping} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.addMapping', 'Add Mapping')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.contextMapping', \"Map values from the event payload to the workflow's initial context\")}\n </p>\n {formValues.contextMappings.map((cm, index) => (\n <div key={index} className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={cm.targetKey}\n onChange={e => updateContextMapping(index, 'targetKey', e.target.value)}\n placeholder=\"orderId\"\n className=\"w-full sm:w-1/3\"\n />\n <span className=\"hidden sm:inline text-muted-foreground\">=</span>\n <Input\n value={cm.sourceExpression}\n onChange={e => updateContextMapping(index, 'sourceExpression', e.target.value)}\n placeholder=\"id\"\n className=\"flex-1 min-w-0\"\n />\n <Input\n value={cm.defaultValue}\n onChange={e => updateContextMapping(index, 'defaultValue', e.target.value)}\n placeholder=\"default\"\n className=\"w-full sm:w-24\"\n />\n <Button size=\"icon\" variant=\"ghost\" className=\"shrink-0\" onClick={() => removeContextMapping(index)}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n\n {/* Advanced Options */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-debounce\">{t('workflows.triggers.fields.debounceMs', 'Debounce (ms)')}</Label>\n <Input\n id=\"trigger-debounce\"\n type=\"number\"\n value={formValues.debounceMs}\n onChange={e => setFormValues(prev => ({ ...prev, debounceMs: e.target.value }))}\n placeholder=\"0\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.debounce', 'Delay to prevent rapid re-triggers')}\n </p>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-max-concurrent\">{t('workflows.triggers.fields.maxConcurrent', 'Max Concurrent Instances')}</Label>\n <Input\n id=\"trigger-max-concurrent\"\n type=\"number\"\n value={formValues.maxConcurrentInstances}\n onChange={e => setFormValues(prev => ({ ...prev, maxConcurrentInstances: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.unlimited', 'Unlimited')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.maxConcurrent', 'Limit simultaneous workflow instances')}\n </p>\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={handleCloseDialog}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!formValues.name.trim() || !formValues.eventPattern.trim()}\n >\n {editingTrigger\n ? t('common.update', 'Update')\n : t('common.create', 'Create')\n }\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={!!deleteConfirmId} onOpenChange={() => setDeleteConfirmId(null)}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('workflows.triggers.delete.title', 'Delete Event Trigger?')}</DialogTitle>\n <DialogDescription>\n {t('workflows.triggers.delete.description', 'This will remove the event trigger. The change will take effect when you save the workflow definition.')}\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setDeleteConfirmId(null)}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n variant=\"destructive\"\n onClick={() => deleteConfirmId && handleDelete(deleteConfirmId)}\n >\n {t('common.delete', 'Delete')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["t"]
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { useState, useCallback } from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { SwitchField } from '@open-mercato/ui/primitives/switch-field'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@open-mercato/ui/primitives/dialog'\nimport { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'\nimport { EventPatternInput } from '@open-mercato/ui/backend/inputs/EventPatternInput'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Plus, Trash2, Edit2, Zap, Info, X } from 'lucide-react'\nimport type { WorkflowDefinitionTrigger } from '../data/entities'\n\ninterface DefinitionTriggersEditorProps {\n value: WorkflowDefinitionTrigger[]\n onChange: (triggers: WorkflowDefinitionTrigger[]) => void\n className?: string\n}\n\nconst FILTER_OPERATORS = [\n { value: 'eq', label: 'Equals' },\n { value: 'neq', label: 'Not Equals' },\n { value: 'gt', label: 'Greater Than' },\n { value: 'gte', label: 'Greater Than or Equal' },\n { value: 'lt', label: 'Less Than' },\n { value: 'lte', label: 'Less Than or Equal' },\n { value: 'contains', label: 'Contains' },\n { value: 'startsWith', label: 'Starts With' },\n { value: 'endsWith', label: 'Ends With' },\n { value: 'in', label: 'In (array)' },\n { value: 'notIn', label: 'Not In (array)' },\n { value: 'exists', label: 'Exists' },\n { value: 'notExists', label: 'Not Exists' },\n { value: 'regex', label: 'Regex Match' },\n] as const\n\ntype TriggerFormValues = {\n triggerId: string\n name: string\n description: string\n eventPattern: string\n enabled: boolean\n priority: number\n filterConditions: Array<{ field: string; operator: string; value: string }>\n contextMappings: Array<{ targetKey: string; sourceExpression: string; defaultValue: string }>\n debounceMs: string\n maxConcurrentInstances: string\n}\n\nconst defaultFormValues: TriggerFormValues = {\n triggerId: '',\n name: '',\n description: '',\n eventPattern: '',\n enabled: true,\n priority: 0,\n filterConditions: [],\n contextMappings: [],\n debounceMs: '',\n maxConcurrentInstances: '',\n}\n\n/**\n * DefinitionTriggersEditor\n *\n * Manages event triggers embedded in workflow definitions.\n * Works with local state - no API calls, changes are saved with the definition.\n */\nexport function DefinitionTriggersEditor({\n value,\n onChange,\n className,\n}: DefinitionTriggersEditorProps) {\n const t = useT()\n const [showDialog, setShowDialog] = useState(false)\n const [editingTrigger, setEditingTrigger] = useState<WorkflowDefinitionTrigger | null>(null)\n const [formValues, setFormValues] = useState<TriggerFormValues>(defaultFormValues)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n // Generate trigger ID from name\n const generateTriggerId = useCallback((name: string) => {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/(?:^_+|_+$)/g, '')\n .substring(0, 50) || `trigger_${Date.now()}`\n }, [])\n\n // Parse condition value (try JSON, fallback to string)\n const parseConditionValue = (valueStr: string): unknown => {\n try {\n return JSON.parse(valueStr)\n } catch {\n return valueStr\n }\n }\n\n // Build trigger from form values\n const buildTriggerFromForm = useCallback((values: TriggerFormValues): WorkflowDefinitionTrigger => {\n const config: WorkflowDefinitionTrigger['config'] = {}\n\n if (values.filterConditions.length > 0) {\n config.filterConditions = values.filterConditions.map(fc => ({\n field: fc.field,\n operator: fc.operator as any,\n value: parseConditionValue(fc.value),\n }))\n }\n\n if (values.contextMappings.length > 0) {\n config.contextMapping = values.contextMappings.map(cm => ({\n targetKey: cm.targetKey,\n sourceExpression: cm.sourceExpression,\n defaultValue: cm.defaultValue ? parseConditionValue(cm.defaultValue) : undefined,\n }))\n }\n\n if (values.debounceMs) {\n config.debounceMs = parseInt(values.debounceMs, 10)\n }\n\n if (values.maxConcurrentInstances) {\n config.maxConcurrentInstances = parseInt(values.maxConcurrentInstances, 10)\n }\n\n return {\n triggerId: values.triggerId || generateTriggerId(values.name),\n name: values.name,\n description: values.description || null,\n eventPattern: values.eventPattern,\n enabled: values.enabled,\n priority: values.priority,\n config: Object.keys(config).length > 0 ? config : null,\n }\n }, [generateTriggerId])\n\n // Open dialog for creating new trigger\n const handleCreateNew = useCallback(() => {\n setEditingTrigger(null)\n setFormValues(defaultFormValues)\n setShowDialog(true)\n }, [])\n\n // Open dialog for editing trigger\n const handleEdit = useCallback((trigger: WorkflowDefinitionTrigger) => {\n setEditingTrigger(trigger)\n setFormValues({\n triggerId: trigger.triggerId,\n name: trigger.name,\n description: trigger.description || '',\n eventPattern: trigger.eventPattern,\n enabled: trigger.enabled,\n priority: trigger.priority,\n filterConditions: trigger.config?.filterConditions?.map(fc => ({\n field: fc.field,\n operator: fc.operator,\n value: typeof fc.value === 'string' ? fc.value : JSON.stringify(fc.value),\n })) || [],\n contextMappings: trigger.config?.contextMapping?.map(cm => ({\n targetKey: cm.targetKey,\n sourceExpression: cm.sourceExpression,\n defaultValue: cm.defaultValue !== undefined\n ? (typeof cm.defaultValue === 'string' ? cm.defaultValue : JSON.stringify(cm.defaultValue))\n : '',\n })) || [],\n debounceMs: trigger.config?.debounceMs?.toString() || '',\n maxConcurrentInstances: trigger.config?.maxConcurrentInstances?.toString() || '',\n })\n setShowDialog(true)\n }, [])\n\n // Close dialog\n const handleCloseDialog = useCallback(() => {\n setShowDialog(false)\n setEditingTrigger(null)\n setFormValues(defaultFormValues)\n }, [])\n\n // Submit form\n const handleSubmit = useCallback(() => {\n if (!formValues.name.trim()) {\n return\n }\n if (!formValues.eventPattern.trim()) {\n return\n }\n\n const newTrigger = buildTriggerFromForm(formValues)\n\n if (editingTrigger) {\n // Update existing trigger\n onChange(value.map(t => t.triggerId === editingTrigger.triggerId ? newTrigger : t))\n } else {\n // Check for duplicate triggerId\n const existingIds = new Set(value.map(t => t.triggerId))\n if (existingIds.has(newTrigger.triggerId)) {\n // Append timestamp to make unique\n newTrigger.triggerId = `${newTrigger.triggerId}_${Date.now()}`\n }\n // Add new trigger\n onChange([...value, newTrigger])\n }\n\n handleCloseDialog()\n }, [formValues, editingTrigger, buildTriggerFromForm, value, onChange, handleCloseDialog])\n\n // Delete trigger\n const handleDelete = useCallback((triggerId: string) => {\n onChange(value.filter(t => t.triggerId !== triggerId))\n setDeleteConfirmId(null)\n }, [value, onChange])\n\n // Add filter condition\n const addFilterCondition = useCallback(() => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: [...prev.filterConditions, { field: '', operator: 'eq', value: '' }],\n }))\n }, [])\n\n // Remove filter condition\n const removeFilterCondition = useCallback((index: number) => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: prev.filterConditions.filter((_, i) => i !== index),\n }))\n }, [])\n\n // Update filter condition\n const updateFilterCondition = useCallback((index: number, field: string, fieldValue: string) => {\n setFormValues(prev => ({\n ...prev,\n filterConditions: prev.filterConditions.map((fc, i) =>\n i === index ? { ...fc, [field]: fieldValue } : fc\n ),\n }))\n }, [])\n\n // Add context mapping\n const addContextMapping = useCallback(() => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: [...prev.contextMappings, { targetKey: '', sourceExpression: '', defaultValue: '' }],\n }))\n }, [])\n\n // Remove context mapping\n const removeContextMapping = useCallback((index: number) => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: prev.contextMappings.filter((_, i) => i !== index),\n }))\n }, [])\n\n // Update context mapping\n const updateContextMapping = useCallback((index: number, field: string, fieldValue: string) => {\n setFormValues(prev => ({\n ...prev,\n contextMappings: prev.contextMappings.map((cm, i) =>\n i === index ? { ...cm, [field]: fieldValue } : cm\n ),\n }))\n }, [])\n\n return (\n <div className={className}>\n <div className=\"rounded-lg border bg-card p-3 md:p-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <Zap className=\"w-5 h-5 text-amber-500\" />\n <h3 className=\"text-sm font-semibold uppercase text-muted-foreground\">\n {t('workflows.triggers.title', 'Event Triggers')}\n </h3>\n </div>\n <Button size=\"sm\" variant=\"outline\" onClick={handleCreateNew} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.add', 'Add Trigger')}\n </Button>\n </div>\n\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('workflows.triggers.description', 'Configure events that automatically start this workflow. When a matching event occurs in the system, a new workflow instance will be created with the mapped context.')}\n </p>\n\n {value.length === 0 ? (\n <Alert variant=\"info\">\n <Info className=\"w-4 h-4\" />\n <AlertTitle>{t('workflows.triggers.empty.title', 'No triggers configured')}</AlertTitle>\n <AlertDescription>\n {t('workflows.triggers.empty.description', 'Click \"Add Trigger\" to create an event trigger that automatically starts this workflow.')}\n </AlertDescription>\n </Alert>\n ) : (\n <div className=\"space-y-2\">\n {value.map(trigger => (\n <div\n key={trigger.triggerId}\n className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between p-3 rounded-lg border bg-background hover:bg-accent/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <Badge variant={trigger.enabled ? 'default' : 'secondary'} className=\"shrink-0\">\n {trigger.enabled ? t('common.active', 'Active') : t('common.disabled', 'Disabled')}\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"font-medium text-sm truncate\">{trigger.name}</div>\n <code className=\"text-xs text-muted-foreground truncate block\">{trigger.eventPattern}</code>\n </div>\n </div>\n <div className=\"flex items-center gap-2 self-end sm:self-auto\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => handleEdit(trigger)}>\n <Edit2 className=\"w-4 h-4\" />\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"text-destructive hover:text-destructive\"\n onClick={() => setDeleteConfirmId(trigger.triggerId)}\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Create/Edit Dialog */}\n <Dialog open={showDialog} onOpenChange={setShowDialog}>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>\n {editingTrigger\n ? t('workflows.triggers.dialog.edit.title', 'Edit Event Trigger')\n : t('workflows.triggers.dialog.create.title', 'Create Event Trigger')\n }\n </DialogTitle>\n <DialogDescription>\n {t('workflows.triggers.dialog.description', 'Configure when this workflow should be automatically started based on system events.')}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 py-4\">\n {/* Basic Info */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-name\">{t('workflows.triggers.fields.name', 'Name')} *</Label>\n <Input\n id=\"trigger-name\"\n value={formValues.name}\n onChange={e => setFormValues(prev => ({ ...prev, name: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.name', 'Order Created Trigger')}\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-priority\">{t('workflows.triggers.fields.priority', 'Priority')}</Label>\n <Input\n id=\"trigger-priority\"\n type=\"number\"\n value={formValues.priority}\n onChange={e => setFormValues(prev => ({ ...prev, priority: parseInt(e.target.value) || 0 }))}\n placeholder=\"0\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.priority', 'Higher priority triggers execute first')}\n </p>\n </div>\n </div>\n\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-description\">{t('workflows.triggers.fields.description', 'Description')}</Label>\n <Textarea\n id=\"trigger-description\"\n value={formValues.description}\n onChange={e => setFormValues(prev => ({ ...prev, description: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.description', 'Describe when this trigger should fire...')}\n rows={2}\n />\n </div>\n\n {/* Event Pattern */}\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-pattern\">{t('workflows.triggers.fields.eventPattern', 'Event Pattern')} *</Label>\n <EventPatternInput\n value={formValues.eventPattern}\n onChange={eventPattern => setFormValues(prev => ({ ...prev, eventPattern }))}\n placeholder={t('workflows.triggers.placeholders.eventPattern')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.eventPattern', 'Use * as wildcard: \"sales.orders.*\" matches any order event')}\n </p>\n </div>\n\n {/* Enabled Switch */}\n <SwitchField\n id=\"trigger-enabled\"\n label={t('workflows.triggers.fields.enabled', 'Enabled')}\n flip\n checked={formValues.enabled}\n onCheckedChange={checked => setFormValues(prev => ({ ...prev, enabled: checked }))}\n />\n\n {/* Filter Conditions */}\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <Label>{t('workflows.triggers.fields.filterConditions', 'Filter Conditions')}</Label>\n <Button size=\"sm\" variant=\"ghost\" onClick={addFilterCondition} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.addCondition', 'Add Condition')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.filterConditions', 'Only trigger when the event payload matches these conditions (all must match)')}\n </p>\n {formValues.filterConditions.map((fc, index) => (\n <div key={index} className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={fc.field}\n onChange={e => updateFilterCondition(index, 'field', e.target.value)}\n placeholder=\"status\"\n className=\"w-full sm:w-1/3\"\n />\n <Select\n value={fc.operator}\n onValueChange={(value) => updateFilterCondition(index, 'operator', value)}\n >\n <SelectTrigger size=\"lg\" className=\"w-full sm:w-[140px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FILTER_OPERATORS.map(op => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={fc.value}\n onChange={e => updateFilterCondition(index, 'value', e.target.value)}\n placeholder=\"submitted\"\n className=\"flex-1 min-w-0\"\n />\n <Button size=\"icon\" variant=\"ghost\" className=\"shrink-0\" onClick={() => removeFilterCondition(index)}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n\n {/* Context Mapping */}\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <Label>{t('workflows.triggers.fields.contextMapping', 'Context Mapping')}</Label>\n <Button size=\"sm\" variant=\"ghost\" onClick={addContextMapping} className=\"w-full sm:w-auto\">\n <Plus className=\"w-4 h-4 mr-1\" />\n {t('workflows.triggers.addMapping', 'Add Mapping')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.contextMapping', \"Map values from the event payload to the workflow's initial context\")}\n </p>\n {formValues.contextMappings.map((cm, index) => (\n <div key={index} className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={cm.targetKey}\n onChange={e => updateContextMapping(index, 'targetKey', e.target.value)}\n placeholder=\"orderId\"\n className=\"w-full sm:w-1/3\"\n />\n <span className=\"hidden sm:inline text-muted-foreground\">=</span>\n <Input\n value={cm.sourceExpression}\n onChange={e => updateContextMapping(index, 'sourceExpression', e.target.value)}\n placeholder=\"id\"\n className=\"flex-1 min-w-0\"\n />\n <Input\n value={cm.defaultValue}\n onChange={e => updateContextMapping(index, 'defaultValue', e.target.value)}\n placeholder=\"default\"\n className=\"w-full sm:w-24\"\n />\n <Button size=\"icon\" variant=\"ghost\" className=\"shrink-0\" onClick={() => removeContextMapping(index)}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n ))}\n </div>\n\n {/* Advanced Options */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-debounce\">{t('workflows.triggers.fields.debounceMs', 'Debounce (ms)')}</Label>\n <Input\n id=\"trigger-debounce\"\n type=\"number\"\n value={formValues.debounceMs}\n onChange={e => setFormValues(prev => ({ ...prev, debounceMs: e.target.value }))}\n placeholder=\"0\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.debounce', 'Delay to prevent rapid re-triggers')}\n </p>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"trigger-max-concurrent\">{t('workflows.triggers.fields.maxConcurrent', 'Max Concurrent Instances')}</Label>\n <Input\n id=\"trigger-max-concurrent\"\n type=\"number\"\n value={formValues.maxConcurrentInstances}\n onChange={e => setFormValues(prev => ({ ...prev, maxConcurrentInstances: e.target.value }))}\n placeholder={t('workflows.triggers.placeholders.unlimited', 'Unlimited')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('workflows.triggers.hints.maxConcurrent', 'Limit simultaneous workflow instances')}\n </p>\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={handleCloseDialog}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!formValues.name.trim() || !formValues.eventPattern.trim()}\n >\n {editingTrigger\n ? t('common.update', 'Update')\n : t('common.create', 'Create')\n }\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={!!deleteConfirmId} onOpenChange={() => setDeleteConfirmId(null)}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('workflows.triggers.delete.title', 'Delete Event Trigger?')}</DialogTitle>\n <DialogDescription>\n {t('workflows.triggers.delete.description', 'This will remove the event trigger. The change will take effect when you save the workflow definition.')}\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setDeleteConfirmId(null)}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n variant=\"destructive\"\n onClick={() => deleteConfirmId && handleDelete(deleteConfirmId)}\n >\n {t('common.delete', 'Delete')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["t", "value"]
7
7
  }
@@ -12,6 +12,13 @@ import {
12
12
  import { Button } from "@open-mercato/ui/primitives/button";
13
13
  import { Input } from "@open-mercato/ui/primitives/input";
14
14
  import { Label } from "@open-mercato/ui/primitives/label";
15
+ import {
16
+ Select,
17
+ SelectContent,
18
+ SelectItem,
19
+ SelectTrigger,
20
+ SelectValue
21
+ } from "@open-mercato/ui/primitives/select";
15
22
  import { Badge } from "@open-mercato/ui/primitives/badge";
16
23
  import { Separator } from "@open-mercato/ui/primitives/separator";
17
24
  import { Plus, Trash2 } from "lucide-react";
@@ -277,21 +284,15 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
277
284
  ] }),
278
285
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
279
286
  /* @__PURE__ */ jsx(Label, { htmlFor: "trigger", children: t("workflows.edgeEditor.triggerType") }),
280
- /* @__PURE__ */ jsxs(
281
- "select",
282
- {
283
- id: "trigger",
284
- value: trigger,
285
- onChange: (e) => setTrigger(e.target.value),
286
- 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",
287
- children: [
288
- /* @__PURE__ */ jsx("option", { value: "auto", children: t("workflows.transitions.triggers.auto") }),
289
- /* @__PURE__ */ jsx("option", { value: "manual", children: t("workflows.transitions.triggers.manual") }),
290
- /* @__PURE__ */ jsx("option", { value: "signal", children: t("workflows.transitions.triggers.signal") }),
291
- /* @__PURE__ */ jsx("option", { value: "timer", children: t("workflows.transitions.triggers.timer") })
292
- ]
293
- }
294
- ),
287
+ /* @__PURE__ */ jsxs(Select, { value: trigger, onValueChange: (value) => setTrigger(value), children: [
288
+ /* @__PURE__ */ jsx(SelectTrigger, { id: "trigger", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
289
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
290
+ /* @__PURE__ */ jsx(SelectItem, { value: "auto", children: t("workflows.transitions.triggers.auto") }),
291
+ /* @__PURE__ */ jsx(SelectItem, { value: "manual", children: t("workflows.transitions.triggers.manual") }),
292
+ /* @__PURE__ */ jsx(SelectItem, { value: "signal", children: t("workflows.transitions.triggers.signal") }),
293
+ /* @__PURE__ */ jsx(SelectItem, { value: "timer", children: t("workflows.transitions.triggers.timer") })
294
+ ] })
295
+ ] }),
295
296
  /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t(`workflows.edgeEditor.triggerDescriptions.${trigger}`) })
296
297
  ] }),
297
298
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
@@ -393,12 +394,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
393
394
  /* @__PURE__ */ jsxs("div", { className: "pt-3", children: [
394
395
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.ruleId") }),
395
396
  /* @__PURE__ */ jsx(
396
- "input",
397
+ Input,
397
398
  {
398
399
  type: "text",
400
+ size: "sm",
399
401
  value: condition.ruleId,
400
- onChange: (e) => updatePreCondition(index, "ruleId", e.target.value),
401
- 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"
402
+ onChange: (e) => updatePreCondition(index, "ruleId", e.target.value)
402
403
  }
403
404
  )
404
405
  ] }),
@@ -526,12 +527,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
526
527
  /* @__PURE__ */ jsxs("div", { className: "pt-3", children: [
527
528
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.ruleId") }),
528
529
  /* @__PURE__ */ jsx(
529
- "input",
530
+ Input,
530
531
  {
531
532
  type: "text",
533
+ size: "sm",
532
534
  value: condition.ruleId,
533
- onChange: (e) => updatePostCondition(index, "ruleId", e.target.value),
534
- 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"
535
+ onChange: (e) => updatePostCondition(index, "ruleId", e.target.value)
535
536
  }
536
537
  )
537
538
  ] }),
@@ -656,12 +657,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
656
657
  " *"
657
658
  ] }),
658
659
  /* @__PURE__ */ jsx(
659
- "input",
660
+ Input,
660
661
  {
661
662
  type: "text",
663
+ size: "sm",
662
664
  value: activity.activityId,
663
665
  onChange: (e) => updateActivity(index, "activityId", e.target.value),
664
- 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",
665
666
  placeholder: t("workflows.edgeEditor.activityIdPlaceholder")
666
667
  }
667
668
  )
@@ -672,12 +673,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
672
673
  " *"
673
674
  ] }),
674
675
  /* @__PURE__ */ jsx(
675
- "input",
676
+ Input,
676
677
  {
677
678
  type: "text",
679
+ size: "sm",
678
680
  value: activity.activityName || "",
679
681
  onChange: (e) => updateActivity(index, "activityName", e.target.value),
680
- 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",
681
682
  placeholder: t("workflows.edgeEditor.activityNamePlaceholder")
682
683
  }
683
684
  )
@@ -688,19 +689,21 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
688
689
  " *"
689
690
  ] }),
690
691
  /* @__PURE__ */ jsxs(
691
- "select",
692
+ Select,
692
693
  {
693
694
  value: activity.activityType,
694
- onChange: (e) => updateActivity(index, "activityType", e.target.value),
695
- 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",
695
+ onValueChange: (value) => updateActivity(index, "activityType", value),
696
696
  children: [
697
- /* @__PURE__ */ jsx("option", { value: "SEND_EMAIL", children: t("workflows.activities.types.SEND_EMAIL") }),
698
- /* @__PURE__ */ jsx("option", { value: "CALL_API", children: t("workflows.activities.types.CALL_API") }),
699
- /* @__PURE__ */ jsx("option", { value: "UPDATE_ENTITY", children: t("workflows.activities.types.UPDATE_ENTITY") }),
700
- /* @__PURE__ */ jsx("option", { value: "EMIT_EVENT", children: t("workflows.activities.types.EMIT_EVENT") }),
701
- /* @__PURE__ */ jsx("option", { value: "CALL_WEBHOOK", children: t("workflows.activities.types.CALL_WEBHOOK") }),
702
- /* @__PURE__ */ jsx("option", { value: "EXECUTE_FUNCTION", children: t("workflows.activities.types.EXECUTE_FUNCTION") }),
703
- /* @__PURE__ */ jsx("option", { value: "WAIT", children: t("workflows.activities.types.WAIT") })
697
+ /* @__PURE__ */ jsx(SelectTrigger, { size: "sm", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
698
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
699
+ /* @__PURE__ */ jsx(SelectItem, { value: "SEND_EMAIL", children: t("workflows.activities.types.SEND_EMAIL") }),
700
+ /* @__PURE__ */ jsx(SelectItem, { value: "CALL_API", children: t("workflows.activities.types.CALL_API") }),
701
+ /* @__PURE__ */ jsx(SelectItem, { value: "UPDATE_ENTITY", children: t("workflows.activities.types.UPDATE_ENTITY") }),
702
+ /* @__PURE__ */ jsx(SelectItem, { value: "EMIT_EVENT", children: t("workflows.activities.types.EMIT_EVENT") }),
703
+ /* @__PURE__ */ jsx(SelectItem, { value: "CALL_WEBHOOK", children: t("workflows.activities.types.CALL_WEBHOOK") }),
704
+ /* @__PURE__ */ jsx(SelectItem, { value: "EXECUTE_FUNCTION", children: t("workflows.activities.types.EXECUTE_FUNCTION") }),
705
+ /* @__PURE__ */ jsx(SelectItem, { value: "WAIT", children: t("workflows.activities.types.WAIT") })
706
+ ] })
704
707
  ]
705
708
  }
706
709
  )
@@ -708,12 +711,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
708
711
  /* @__PURE__ */ jsxs("div", { children: [
709
712
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.timeout") }),
710
713
  /* @__PURE__ */ jsx(
711
- "input",
714
+ Input,
712
715
  {
713
716
  type: "text",
717
+ size: "sm",
714
718
  value: activity.timeout || "",
715
719
  onChange: (e) => updateActivity(index, "timeout", e.target.value),
716
- 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",
717
720
  placeholder: t("workflows.edgeEditor.timeoutPlaceholder")
718
721
  }
719
722
  ),
@@ -725,12 +728,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
725
728
  /* @__PURE__ */ jsxs("div", { children: [
726
729
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.maxAttempts") }),
727
730
  /* @__PURE__ */ jsx(
728
- "input",
731
+ Input,
729
732
  {
730
733
  type: "number",
734
+ size: "sm",
731
735
  value: activity.retryPolicy?.maxAttempts || "",
732
736
  onChange: (e) => updateActivityRetryPolicy(index, "maxAttempts", parseInt(e.target.value) || 0),
733
- 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",
734
737
  placeholder: "3",
735
738
  min: "1",
736
739
  max: "10"
@@ -740,12 +743,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
740
743
  /* @__PURE__ */ jsxs("div", { children: [
741
744
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.initialInterval") }),
742
745
  /* @__PURE__ */ jsx(
743
- "input",
746
+ Input,
744
747
  {
745
748
  type: "number",
749
+ size: "sm",
746
750
  value: activity.retryPolicy?.initialIntervalMs || "",
747
751
  onChange: (e) => updateActivityRetryPolicy(index, "initialIntervalMs", parseInt(e.target.value) || 0),
748
- 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",
749
752
  placeholder: "1000",
750
753
  min: "0"
751
754
  }
@@ -754,13 +757,13 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
754
757
  /* @__PURE__ */ jsxs("div", { children: [
755
758
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.backoffCoefficient") }),
756
759
  /* @__PURE__ */ jsx(
757
- "input",
760
+ Input,
758
761
  {
759
762
  type: "number",
763
+ size: "sm",
760
764
  step: "0.1",
761
765
  value: activity.retryPolicy?.backoffCoefficient || "",
762
766
  onChange: (e) => updateActivityRetryPolicy(index, "backoffCoefficient", parseFloat(e.target.value) || 1),
763
- 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",
764
767
  placeholder: "2",
765
768
  min: "1",
766
769
  max: "10"
@@ -770,12 +773,12 @@ function EdgeEditDialog({ edge, isOpen, onClose, onSave, onDelete }) {
770
773
  /* @__PURE__ */ jsxs("div", { children: [
771
774
  /* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: t("workflows.edgeEditor.maxInterval") }),
772
775
  /* @__PURE__ */ jsx(
773
- "input",
776
+ Input,
774
777
  {
775
778
  type: "number",
779
+ size: "sm",
776
780
  value: activity.retryPolicy?.maxIntervalMs || "",
777
781
  onChange: (e) => updateActivityRetryPolicy(index, "maxIntervalMs", parseInt(e.target.value) || 0),
778
- 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",
779
782
  placeholder: "10000",
780
783
  min: "0"
781
784
  }