@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/frontend/checkout-demo/page.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport Link from 'next/link'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface CartItem {\n id: string // Product UUID\n name: string\n price: number\n quantity: number\n}\n\ninterface Product {\n id: string\n title: string\n pricing: {\n unit_price_gross: number\n unit_price_net: number\n currency_code: string\n price_kind_code?: string\n } | null\n}\n\ninterface WorkflowResult {\n instanceId: string\n status: string\n workflowId: string\n currentStepId?: string\n context?: any\n}\n\ninterface StepInfo {\n stepId: string\n stepName: string\n stepType: string\n description?: string\n}\n\ninterface WorkflowEvent {\n id: string\n eventType: string\n occurredAt: string\n eventData?: any\n}\n\nexport default function CheckoutDemoPage() {\n const queryClient = useQueryClient()\n const t = useT()\n const [loading, setLoading] = useState(false)\n const [advancing, setAdvancing] = useState(false)\n const [result, setResult] = useState<WorkflowResult | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [currentStep, setCurrentStep] = useState<StepInfo | null>(null)\n const [availableSteps, setAvailableSteps] = useState<StepInfo[]>([])\n const [formData, setFormData] = useState<Record<string, any>>({})\n const [submittingTask, setSubmittingTask] = useState(false)\n const [taskError, setTaskError] = useState<string | null>(null)\n const [sendingSignal, setSendingSignal] = useState(false)\n const [signalError, setSignalError] = useState<string | null>(null)\n const [enableTaskPolling, setEnableTaskPolling] = useState(false)\n const [selectedCustomerId, setSelectedCustomerId] = useState<string>('')\n const [selectedCurrency, setSelectedCurrency] = useState<string>('USD')\n const [cart, setCart] = useState<CartItem[]>([])\n const [validationErrors, setValidationErrors] = useState<Array<{ ruleId: string; message: string }>>([])\n const [isValidating, setIsValidating] = useState(false)\n\n // Poll workflow instance for real-time status updates\n const { data: instanceData } = useQuery({\n queryKey: ['workflow-instance', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return null\n\n const response = await fetch(`/api/workflows/instances/${result.instanceId}`)\n if (!response.ok) return null\n\n const json = await response.json()\n return json.data // API returns { data: instance }\n },\n enabled: !!result?.instanceId,\n refetchInterval: (query) => {\n // Poll while workflow is active (not completed, failed, or cancelled)\n const status = query.state.data?.status || result?.status\n return (status === 'RUNNING' || status === 'PAUSED' || status === 'WAITING_FOR_ACTIVITIES') ? 500 : false\n },\n })\n\n // Update result when instance data changes\n useEffect(() => {\n if (instanceData) {\n setResult({\n instanceId: instanceData.id,\n status: instanceData.status,\n workflowId: instanceData.workflowId,\n currentStepId: instanceData.currentStepId,\n context: instanceData.context,\n })\n }\n }, [instanceData])\n\n // Fetch workflow events for the current instance\n const { data: events = [] } = useQuery({\n queryKey: ['workflow-events', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return []\n\n const response = await fetch(\n `/api/workflows/events?workflowInstanceId=${result.instanceId}&sortField=occurredAt&sortDir=desc&pageSize=20`\n )\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.items || []\n },\n enabled: !!result?.instanceId,\n refetchInterval: (query) => {\n // Poll while workflow is active\n const status = instanceData?.status || result?.status\n return (status === 'RUNNING' || status === 'PAUSED' || status === 'WAITING_FOR_ACTIVITIES') ? 1000 : false\n },\n })\n\n // Fetch pending user tasks for this workflow instance\n const { data: userTasks = [], isLoading: tasksLoading, error: tasksError, refetch: refetchTasks } = useQuery({\n queryKey: ['workflow-user-tasks', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return []\n\n const response = await fetch(\n `/api/workflows/tasks?workflowInstanceId=${result.instanceId}&status=PENDING`\n )\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n console.error('[UserTasks] Error response:', errorData)\n throw new Error(errorData.error || `HTTP ${response.status}`)\n }\n\n const data = await response.json()\n return data.data || []\n },\n enabled: !!result?.instanceId && result?.status === 'PAUSED' && enableTaskPolling,\n refetchInterval: result?.status === 'PAUSED' && enableTaskPolling ? 2000 : false,\n })\n\n // Fetch workflow definition to get dynamic steps\n const { data: workflowDefinition } = useQuery({\n queryKey: ['workflow-definition', 'checkout_simple_v1'],\n queryFn: async () => {\n const response = await fetch('/api/workflows/definitions?workflowId=checkout_simple_v1')\n if (!response.ok) return null\n const json = await response.json()\n return json.data?.[0] || null\n },\n })\n\n // Fetch customers for dropdown\n const { data: customers = [], isLoading: customersLoading } = useQuery({\n queryKey: ['customers-companies'],\n queryFn: async () => {\n const response = await fetch('/api/customers/companies?pageSize=100')\n if (!response.ok) return []\n const json = await response.json()\n return json.items || []\n },\n })\n\n // Fetch products for cart selection with pricing context\n const { data: products = [], isLoading: productsLoading } = useQuery({\n queryKey: ['catalog-products', selectedCurrency],\n queryFn: async () => {\n // Pass pricing context to get resolved prices\n const params = new URLSearchParams({\n pageSize: '100',\n quantity: '1',\n priceDate: new Date().toISOString(),\n })\n\n const response = await fetch(`/api/catalog/products?${params}`)\n if (!response.ok) return []\n const json = await response.json()\n return json.items || []\n },\n })\n\n // Exchange rates (USD base)\n const exchangeRates: Record<string, number> = {\n USD: 1,\n EUR: 0.92,\n GBP: 0.79,\n PLN: 4.02,\n }\n\n // Currency symbols\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '\u20AC',\n GBP: '\u00A3',\n PLN: 'z\u0142',\n }\n\n // Cart management functions\n const addToCart = (product: Product) => {\n const existing = cart.find(item => item.id === product.id)\n if (existing) {\n setCart(cart.map(item =>\n item.id === product.id\n ? { ...item, quantity: item.quantity + 1 }\n : item\n ))\n } else {\n setCart([...cart, {\n id: product.id,\n name: product.title,\n // Use resolved pricing from catalog pricing service (in USD)\n price: product.pricing?.unit_price_gross || product.pricing?.unit_price_net || 99.99,\n quantity: 1,\n }])\n }\n }\n\n const updateQuantity = (productId: string, quantity: number) => {\n if (quantity <= 0) {\n setCart(cart.filter(item => item.id !== productId))\n } else {\n setCart(cart.map(item =>\n item.id === productId ? { ...item, quantity } : item\n ))\n }\n }\n\n const removeFromCart = (productId: string) => {\n setCart(cart.filter(item => item.id !== productId))\n }\n\n // Convert prices to selected currency (cart items are in USD by default)\n const exchangeRate = exchangeRates[selectedCurrency] || 1\n const demoCart = cart.map(item => ({\n ...item,\n price: item.price * exchangeRate,\n }))\n\n const currencySymbol = currencySymbols[selectedCurrency] || selectedCurrency\n\n const subtotal = demoCart.reduce((sum, item) => sum + item.price * item.quantity, 0)\n const tax = subtotal * 0.08 // 8% tax\n const shipping = 9.99 * exchangeRate\n const total = subtotal + tax + shipping\n\n // Workflow steps for UI - use dynamic definition or fallback\n const workflowSteps: StepInfo[] = workflowDefinition?.definition?.steps || [\n { stepId: 'start', stepName: 'Start', stepType: 'START', description: 'Workflow initiated' },\n { stepId: 'cart_validation', stepName: 'Cart Validation', stepType: 'AUTOMATED', description: 'Validate cart and reserve inventory' },\n { stepId: 'customer_info', stepName: 'Customer Information', stepType: 'USER_TASK', description: 'Collect customer shipping and contact information' },\n { stepId: 'payment_initiation', stepName: 'Initiate Payment', stepType: 'AUTOMATED', description: 'Send payment request to provider' },\n { stepId: 'wait_payment_confirmation', stepName: 'Wait for Payment Confirmation', stepType: 'WAIT_FOR_SIGNAL', description: 'Waiting for payment provider webhook' },\n { stepId: 'order_confirmation', stepName: 'Order Confirmation', stepType: 'AUTOMATED', description: 'Create order and send confirmation' },\n { stepId: 'end', stepName: 'Complete', stepType: 'END', description: 'Checkout completed' },\n ]\n\n // Update current step and available steps when result changes\n useEffect(() => {\n if (result?.currentStepId) {\n const current = workflowSteps.find(s => s.stepId === result.currentStepId)\n setCurrentStep(current || null)\n\n // Find next available steps (simple - just show next step)\n const currentIndex = workflowSteps.findIndex(s => s.stepId === result.currentStepId)\n if (currentIndex >= 0 && currentIndex < workflowSteps.length - 1) {\n setAvailableSteps([workflowSteps[currentIndex + 1]])\n } else {\n setAvailableSteps([])\n }\n }\n }, [result])\n\n // Add initial delay before polling for user tasks when workflow becomes PAUSED\n // This reduces race condition where API returns before background execution completes\n useEffect(() => {\n if (result?.status === 'PAUSED') {\n setEnableTaskPolling(false)\n\n const timer = setTimeout(() => {\n setEnableTaskPolling(true)\n }, 500)\n\n return () => clearTimeout(timer)\n } else {\n setEnableTaskPolling(false)\n }\n }, [result?.status])\n\n // Validate workflow pre-conditions before starting checkout\n const validateBeforeCheckout = useCallback(async (): Promise<boolean> => {\n // Don't validate if no customer selected yet\n if (!selectedCustomerId) {\n setValidationErrors([])\n return false\n }\n\n setIsValidating(true)\n\n try {\n const response = await fetch('/api/workflows/instances/validate-start', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n workflowId: 'checkout_simple_v1',\n context: {\n cart: {\n items: demoCart,\n itemCount: demoCart.reduce((sum, item) => sum + item.quantity, 0),\n subtotal: subtotal,\n tax: tax,\n shipping: shipping,\n total: total,\n currency: selectedCurrency,\n },\n customerId: selectedCustomerId,\n currency: selectedCurrency,\n },\n }),\n })\n\n const data = await response.json()\n\n if (!data.canStart) {\n setValidationErrors(data.errors || [{ ruleId: '_UNKNOWN', message: 'Validation failed' }])\n return false\n }\n\n setValidationErrors([])\n return true\n } catch (err) {\n setValidationErrors([{ ruleId: '_ERROR', message: 'Failed to validate checkout pre-conditions' }])\n return false\n } finally {\n setIsValidating(false)\n }\n }, [selectedCustomerId, demoCart, subtotal, tax, shipping, total, selectedCurrency])\n\n // Auto-validate when customer is selected or cart changes\n // Using JSON.stringify(cart) to detect actual cart content changes\n const cartJson = JSON.stringify(cart)\n useEffect(() => {\n // Only validate if customer is selected and workflow hasn't started yet\n if (!selectedCustomerId || result) {\n return\n }\n\n validateBeforeCheckout()\n }, [selectedCustomerId, cartJson, result]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleCheckout = async () => {\n // Validate customer selection\n if (!selectedCustomerId) {\n setError('Please select a customer before starting checkout')\n return\n }\n\n // Validate pre-conditions before starting workflow\n const canStart = await validateBeforeCheckout()\n if (!canStart) {\n return\n }\n\n setLoading(true)\n setError(null)\n setResult(null)\n\n try {\n // Build the initial context\n const initialContext = {\n customerId: selectedCustomerId,\n cartId: `cart-${Date.now()}`,\n currency: selectedCurrency,\n cart: {\n id: `cart-${Date.now()}`,\n items: demoCart,\n orderLines: demoCart.map(item => ({\n quantity: item.quantity,\n currencyCode: selectedCurrency || 'USD', // Ensure currency is always set\n kind: 'product' as const,\n productId: item.id,\n lineDescription: item.name,\n unitPriceGross: item.price,\n })),\n itemCount: demoCart.reduce((sum, item) => sum + item.quantity, 0),\n subtotal: subtotal,\n tax: tax,\n shipping: shipping,\n total: total,\n currency: selectedCurrency,\n },\n customer: {\n id: selectedCustomerId,\n name: 'Demo Customer',\n email: 'demo@example.com',\n },\n payment: {\n id: `payment-${Date.now()}`,\n methodId: 'pm_demo_visa',\n method: 'Credit Card',\n last4: '4242',\n },\n }\n\n // Start the checkout workflow\n const response = await fetch('/api/workflows/instances', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n workflowId: 'checkout_simple_v1',\n version: 1,\n correlationKey: `DEMO-ORDER-${Date.now()}`,\n initialContext,\n metadata: {\n source: 'checkout-demo',\n userAgent: navigator.userAgent,\n timestamp: new Date().toISOString(),\n },\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n const errorMsg = errorData.error || 'Failed to start checkout workflow'\n\n if (response.status === 404 && errorMsg.includes('Workflow definition not found')) {\n throw new Error(\n 'Workflow not found. Please ensure:\\n' +\n '1. You have seeded the demo workflow (see instructions below)\\n' +\n '2. You are logged in with the same tenant/organization used when seeding\\n' +\n '3. The workflow is enabled in the database'\n )\n }\n\n if (response.status === 401) {\n throw new Error('Please log in to start a workflow')\n }\n\n if (response.status === 403) {\n throw new Error('You do not have permission to start workflows. Please contact your administrator.')\n }\n\n throw new Error(errorMsg)\n }\n\n const data = await response.json()\n\n setResult({\n instanceId: data.data.instance.id,\n status: data.data.instance.status,\n workflowId: data.data.instance.workflowId,\n currentStepId: data.data.instance.currentStepId,\n context: data.data.instance.context,\n })\n } catch (err) {\n console.error('Checkout error:', err)\n setError(err instanceof Error ? err.message : 'An error occurred during checkout')\n } finally {\n setLoading(false)\n }\n }\n\n const handleAdvance = async (toStepId?: string) => {\n if (!result?.instanceId) return\n\n setAdvancing(true)\n setError(null)\n\n try {\n const response = await fetch(`/api/workflows/instances/${result.instanceId}/advance`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toStepId,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n throw new Error(errorData.error || 'Failed to advance workflow')\n }\n\n const data = await response.json()\n\n // Update result with new state\n setResult({\n instanceId: data.data.instance.id,\n status: data.data.instance.status,\n workflowId: result.workflowId,\n currentStepId: data.data.instance.currentStepId,\n context: data.data.instance.context,\n })\n } catch (err) {\n console.error('Advance error:', err)\n setError(err instanceof Error ? err.message : 'Failed to advance workflow')\n } finally {\n setAdvancing(false)\n }\n }\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'RUNNING':\n return 'text-blue-600 bg-blue-50'\n case 'WAITING_FOR_ACTIVITIES':\n return 'text-purple-600 bg-purple-50'\n case 'PAUSED':\n return 'text-yellow-600 bg-yellow-50'\n case 'COMPLETED':\n return 'text-green-600 bg-green-50'\n case 'FAILED':\n return 'text-red-600 bg-red-50'\n default:\n return 'text-gray-600 bg-gray-50'\n }\n }\n\n const getStepStatus = (stepId: string) => {\n if (!result?.currentStepId) return 'pending'\n\n const currentIndex = workflowSteps.findIndex(s => s.stepId === result.currentStepId)\n const stepIndex = workflowSteps.findIndex(s => s.stepId === stepId)\n\n if (currentIndex === -1 || stepIndex === -1) return 'pending'\n\n if (stepIndex < currentIndex) return 'completed'\n if (stepIndex === currentIndex) {\n // If workflow is paused at this step, show it as paused\n return result.status === 'PAUSED' ? 'paused' : 'current'\n }\n return 'pending'\n }\n\n const getStepColor = (status: string) => {\n switch (status) {\n case 'completed':\n return 'bg-green-100 text-green-600 border-green-300'\n case 'current':\n return 'bg-blue-100 text-blue-600 border-blue-300'\n case 'paused':\n return 'bg-yellow-100 text-yellow-600 border-yellow-300'\n default:\n return 'bg-gray-100 text-gray-600 border-gray-300'\n }\n }\n\n const getEventTypeBadgeClass = (eventType: string) => {\n if (eventType.includes('STARTED')) return 'bg-blue-100 text-blue-800'\n if (eventType.includes('COMPLETED')) return 'bg-green-100 text-green-800'\n if (eventType.includes('FAILED') || eventType.includes('REJECTED')) return 'bg-red-100 text-red-800'\n if (eventType.includes('CANCELLED')) return 'bg-gray-100 text-gray-800'\n if (eventType.includes('ENTERED') || eventType.includes('EXITED')) return 'bg-purple-100 text-purple-800'\n return 'bg-gray-100 text-gray-800'\n }\n\n const formatEventType = (eventType: string) => {\n return eventType.replace(/_/g, ' ').toLowerCase().replace(/\\b\\w/g, c => c.toUpperCase())\n }\n\n const handleFieldChange = (fieldName: string, value: any) => {\n setFormData(prev => ({\n ...prev,\n [fieldName]: value,\n }))\n }\n\n const handleSendPaymentSignal = async () => {\n if (!result?.instanceId) {\n setSignalError('No workflow instance found')\n return\n }\n\n // Check if workflow is in the correct step\n if (result.currentStepId !== 'wait_payment_confirmation') {\n setSignalError(`Cannot send signal: workflow is at step \"${result.currentStepId}\", expected \"wait_payment_confirmation\"`)\n return\n }\n\n setSendingSignal(true)\n setSignalError(null)\n\n try {\n const signalUrl = `/api/workflows/instances/${result.instanceId}/signal`\n\n const requestPayload = {\n signalName: 'payment_confirmed',\n payload: {\n paymentStatus: 'success',\n transactionId: `txn_${Date.now()}`,\n confirmedAt: new Date().toISOString(),\n provider: 'StripeSimulator',\n },\n }\n\n const response = await fetch(signalUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestPayload),\n })\n\n // Read response as text first to handle non-JSON responses\n const responseText = await response.text()\n\n if (!response.ok) {\n let errorData: any = {}\n let isJson = false\n\n try {\n errorData = JSON.parse(responseText)\n isJson = true\n } catch (parseError) {\n console.error('[Signal] Response is not JSON:', parseError)\n console.error('[Signal] Raw response:', responseText)\n }\n\n const errorMsg = isJson && errorData.error\n ? errorData.error\n : `HTTP ${response.status}: ${responseText.substring(0, 200) || 'Failed to send signal'}`\n throw new Error(errorMsg)\n }\n\n // Parse success response\n let data: any\n try {\n data = JSON.parse(responseText)\n } catch (parseError) {\n data = { success: true }\n }\n\n // Invalidate queries to force refresh\n await queryClient.invalidateQueries({ queryKey: ['workflow-instance', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-events', result?.instanceId] })\n\n // Clear any previous errors\n setSignalError(null)\n } catch (err) {\n console.error('[Signal] Error:', err)\n const errorMessage = err instanceof Error ? err.message : 'Failed to send payment confirmation'\n setSignalError(errorMessage)\n } finally {\n setSendingSignal(false)\n }\n }\n\n const handleTaskSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!userTasks || userTasks.length === 0) return\n\n const task = userTasks[0]\n\n // Validate required fields\n if (task.formSchema?.required) {\n for (const requiredField of task.formSchema.required) {\n if (!formData[requiredField] || formData[requiredField] === '') {\n setTaskError(`Required field is missing: ${requiredField}`)\n return\n }\n }\n }\n\n setSubmittingTask(true)\n setTaskError(null)\n\n try {\n const response = await fetch(`/api/workflows/tasks/${task.id}/complete`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formData,\n }),\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || 'Failed to complete task')\n }\n\n // Reset form\n setFormData({})\n setTaskError(null)\n\n // Invalidate all workflow-related queries to force immediate refresh\n await queryClient.invalidateQueries({ queryKey: ['workflow-instance', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-user-tasks', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-events', result?.instanceId] })\n } catch (err) {\n console.error('Error completing task:', err)\n setTaskError(err instanceof Error ? err.message : 'Failed to complete task')\n } finally {\n setSubmittingTask(false)\n }\n }\n\n const renderFormField = (fieldName: string, fieldSchema: any, required: boolean) => {\n const fieldType = fieldSchema.type || 'string'\n const fieldTitle = fieldSchema.title || fieldName\n const fieldDescription = fieldSchema.description\n const enumValues = fieldSchema.enum\n\n const inputClasses = \"w-full px-3 py-2 border border-gray-300 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring text-sm\"\n const labelClasses = \"block text-sm font-medium text-gray-700 mb-1\"\n\n // Handle enum (select dropdown)\n if (enumValues && Array.isArray(enumValues)) {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <select\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n >\n <option value=\"\">{t('workflows.checkoutDemo.formField.selectOption', '-- Select an option --')}</option>\n {enumValues.map((value: any) => (\n <option key={value} value={value}>\n {value}\n </option>\n ))}\n </select>\n </div>\n )\n }\n\n // Handle different field types\n switch (fieldType) {\n case 'string':\n if (fieldSchema.format === 'email') {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"email\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n />\n </div>\n )\n }\n if (fieldSchema.format === 'date') {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"date\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n />\n </div>\n )\n }\n if (fieldSchema.maxLength && fieldSchema.maxLength > 200) {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <textarea\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n rows={3}\n className={inputClasses}\n />\n </div>\n )\n }\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"text\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n />\n </div>\n )\n\n case 'number':\n case 'integer':\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"number\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value ? Number(e.target.value) : '')}\n required={required}\n step={fieldType === 'integer' ? 1 : 'any'}\n className={inputClasses}\n />\n </div>\n )\n\n case 'boolean':\n return (\n <div key={fieldName} className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id={fieldName}\n checked={!!formData[fieldName]}\n onChange={(e) => handleFieldChange(fieldName, e.target.checked)}\n className=\"w-4 h-4 text-yellow-600 border-gray-300 rounded focus-visible:ring-ring\"\n />\n <label htmlFor={fieldName} className=\"text-sm font-medium text-gray-700\">\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n </div>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 ml-6\">{fieldDescription}</p>\n )}\n </div>\n )\n\n default:\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"text\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n />\n </div>\n )\n }\n }\n\n return (\n <div className=\"min-h-screen bg-gray-50 py-12 px-4 sm:px-6 lg:px-8\">\n <div className=\"max-w-6xl mx-auto\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">\n {t('workflows.checkoutDemo.title', 'Checkout Demo with Payment Webhooks')}\n </h1>\n <p className=\"text-gray-600\">\n {t(\n 'workflows.checkoutDemo.subtitle',\n 'Interactive workflow demonstration featuring signal-based payment confirmation (WAIT_FOR_SIGNAL)',\n )}\n </p>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Interactive Left Panel - Changes based on workflow step */}\n <div className=\"bg-white shadow rounded-lg p-6\">\n {/* Initial State - Cart Summary */}\n {!result && (\n <>\n {/* Customer Selection */}\n <div className=\"mb-6 pb-6 border-b border-gray-200\">\n <label htmlFor=\"customer-select\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.customer.selectLabel', 'Select Customer')}{' '}\n <span className=\"text-red-600\">*</span>\n </label>\n {customersLoading ? (\n <div className=\"flex items-center justify-center py-3 text-sm text-gray-500\">\n <div className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin mr-2\"></div>\n {t('workflows.checkoutDemo.customer.loading', 'Loading customers...')}\n </div>\n ) : customers.length === 0 ? (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3 text-sm text-yellow-800\">\n {t('workflows.checkoutDemo.customer.noneFound', 'No customers found. Please create a customer first.')}\n </div>\n ) : (\n <>\n <select\n id=\"customer-select\"\n value={selectedCustomerId}\n onChange={(e) => setSelectedCustomerId(e.target.value)}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring text-sm\"\n >\n <option value=\"\">{t('workflows.checkoutDemo.customer.selectPlaceholder', '-- Select a customer --')}</option>\n {customers.map((customer: any) => (\n <option key={customer.id} value={customer.id}>\n {customer.display_name || customer.id}\n </option>\n ))}\n </select>\n <div className=\"mt-2\">\n <label htmlFor=\"currency-select\" className=\"block text-xs font-medium text-gray-600 mb-1\">\n {t('workflows.checkoutDemo.currency.label', 'Currency')}\n </label>\n <select\n id=\"currency-select\"\n value={selectedCurrency}\n onChange={(e) => setSelectedCurrency(e.target.value)}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring text-sm\"\n >\n <option value=\"USD\">USD - US Dollar</option>\n <option value=\"EUR\">EUR - Euro</option>\n <option value=\"GBP\">GBP - British Pound</option>\n <option value=\"PLN\">PLN - Polish Zloty</option>\n </select>\n </div>\n </>\n )}\n </div>\n\n {/* Product Selection */}\n <div className=\"mb-6 pb-6 border-b border-gray-200\">\n <label htmlFor=\"product-select\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.product.addLabel', 'Add Products to Cart')}\n </label>\n {productsLoading ? (\n <div className=\"flex items-center justify-center py-3 text-sm text-gray-500\">\n <div className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin mr-2\"></div>\n {t('workflows.checkoutDemo.product.loading', 'Loading products...')}\n </div>\n ) : products.length === 0 ? (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3 text-sm text-yellow-800\">\n {t('workflows.checkoutDemo.product.noneFound', 'No products found. Please create products in the catalog first.')}\n </div>\n ) : (\n <div className=\"space-y-2\">\n <select\n id=\"product-select\"\n onChange={(e) => {\n const product = products.find((p: any) => p.id === e.target.value)\n if (product) {\n addToCart({\n id: product.id,\n title: product.title || product.display_name || 'Untitled Product',\n pricing: product.pricing || null,\n })\n e.target.value = '' // Reset selection\n }\n }}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring text-sm\"\n value=\"\"\n >\n <option value=\"\">{t('workflows.checkoutDemo.product.selectPlaceholder', '-- Select a product to add --')}</option>\n {products.map((product: any) => {\n const basePrice = product.pricing?.unit_price_gross || product.pricing?.unit_price_net || 99.99\n const displayPrice = (basePrice * exchangeRate).toFixed(2)\n return (\n <option key={product.id} value={product.id}>\n {product.title || product.display_name || 'Untitled'} - {currencySymbol}{displayPrice}\n </option>\n )\n })}\n </select>\n {cart.length === 0 && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.checkoutDemo.cart.selectHint', 'Select products from the dropdown to add them to your cart')}\n </p>\n )}\n </div>\n )}\n </div>\n\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">\n {t('workflows.checkoutDemo.orderSummary.title', 'Order Summary')}\n </h2>\n\n {/* Cart Items */}\n {cart.length === 0 ? (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-6 text-center mb-6\">\n <p className=\"text-gray-500 text-sm\">\n {t('workflows.checkoutDemo.cart.empty.title', 'Your cart is empty')}\n </p>\n <p className=\"text-gray-400 text-xs mt-1\">\n {t('workflows.checkoutDemo.cart.empty.hint', 'Add products from the dropdown above')}\n </p>\n </div>\n ) : (\n <div className=\"space-y-4 mb-6\">\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between items-center gap-4 pb-3 border-b border-gray-100 last:border-0\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900 truncate\">{item.name}</p>\n <p className=\"text-xs text-gray-500\">{currencySymbol}{item.price.toFixed(2)} {t('workflows.checkoutDemo.cart.pricePerUnitSuffix', 'each')}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => updateQuantity(item.id, item.quantity - 1)}\n className=\"w-7 h-7 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-50 text-gray-600\"\n >\n -\n </button>\n <span className=\"w-8 text-center text-sm font-medium\">{item.quantity}</span>\n <button\n onClick={() => updateQuantity(item.id, item.quantity + 1)}\n className=\"w-7 h-7 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-50 text-gray-600\"\n >\n +\n </button>\n </div>\n <div className=\"flex items-center gap-2\">\n <p className=\"font-medium text-gray-900 min-w-[80px] text-right\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n <button\n onClick={() => removeFromCart(item.id)}\n className=\"w-7 h-7 flex items-center justify-center rounded hover:bg-red-50 text-red-600\"\n title={t('workflows.checkoutDemo.cart.removeItemTitle', 'Remove from cart')}\n >\n \u00D7\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Totals */}\n <div className=\"border-t border-gray-200 pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.subtotal', 'Subtotal')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.tax', 'Tax (8%)')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.shipping', 'Shipping')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{shipping.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between font-semibold text-lg pt-2 border-t border-gray-200\">\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.cart.total', 'Total')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Validation Errors */}\n {validationErrors.length > 0 && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mt-6\">\n <h4 className=\"text-sm font-medium text-red-800 mb-2 flex items-center gap-2\">\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n {t('workflows.checkoutDemo.validation.errorTitle', 'Cannot start checkout')}\n </h4>\n <ul className=\"list-disc list-inside space-y-1\">\n {validationErrors.map((err, idx) => (\n <li key={idx} className=\"text-sm text-red-700\">\n {err.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Checkout Button */}\n <Button\n onClick={handleCheckout}\n disabled={loading || isValidating || result !== null || !selectedCustomerId || customers.length === 0 || validationErrors.length > 0}\n className=\"w-full mt-6\"\n size=\"lg\"\n >\n {isValidating\n ? t('workflows.checkoutDemo.checkout.validating', 'Validating...')\n : loading\n ? t('workflows.checkoutDemo.checkout.starting', 'Starting...')\n : result\n ? t('workflows.checkoutDemo.checkout.workflowStarted', 'Workflow Started')\n : !selectedCustomerId\n ? t('workflows.checkoutDemo.checkout.selectCustomerFirst', 'Select Customer to Continue')\n : validationErrors.length > 0\n ? t('workflows.checkoutDemo.checkout.fixValidationErrors', 'Fix Validation Errors')\n : t('workflows.checkoutDemo.checkout.start', 'Start Checkout Workflow')}\n </Button>\n {!selectedCustomerId && customers.length > 0 && validationErrors.length === 0 && (\n <p className=\"text-xs text-gray-500 text-center mt-2\">\n {t('workflows.checkoutDemo.checkout.pleaseSelectCustomer', 'Please select a customer to continue')}\n </p>\n )}\n </>\n )}\n\n {/* Cart Validation Step */}\n {result && (result.currentStepId === 'start' || result.currentStepId === 'cart_validation') && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.cartValidation.title', 'Validating Cart')}\n </h2>\n <div className=\"space-y-4\">\n {result.status === 'WAITING_FOR_ACTIVITIES' ? (\n <div className=\"bg-purple-50 border border-purple-200 rounded-lg p-4\">\n <p className=\"text-sm text-purple-800 font-medium\">{t('workflows.checkoutDemo.cartValidation.processingActivities', 'Processing background activities...')}</p>\n <p className=\"text-xs text-purple-700 mt-1\">{t('workflows.checkoutDemo.cartValidation.processingActivitiesHint', 'The workflow is waiting for async tasks to complete before proceeding.')}</p>\n </div>\n ) : (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800\">{t('workflows.checkoutDemo.cartValidation.inventoryCheck', 'Checking cart items and inventory availability...')}</p>\n </div>\n )}\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between items-center border-b border-gray-200 pb-2\">\n <div className=\"flex-1\">\n <p className=\"font-medium text-gray-900\">{item.name}</p>\n <p className=\"text-xs text-gray-500\">{t('workflows.checkoutDemo.cartValidation.qtyPrefix', 'Qty:')} {item.quantity}</p>\n </div>\n <span className=\"text-green-600 text-sm\">{t('workflows.checkoutDemo.cartValidation.available', '\u2713 Available')}</span>\n </div>\n ))}\n <div className=\"pt-2 border-t border-gray-200\">\n <p className=\"text-sm font-medium text-gray-900\">{t('workflows.checkoutDemo.cartValidation.totalPrefix', 'Total:')} {currencySymbol}{total.toFixed(2)}</p>\n </div>\n </div>\n </>\n )}\n\n {/* Customer Information Step - USER_TASK */}\n {result && result.currentStepId === 'customer_info' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-yellow-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.customerInfo.title', 'Customer Information Required')}\n </h2>\n <div className=\"space-y-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.promptTitle', 'Please provide your shipping information')}\n </p>\n <p className=\"text-xs text-yellow-700\">\n {t('workflows.checkoutDemo.customerInfo.promptHint', 'The workflow is paused waiting for customer details. Complete the form to continue checkout.')}\n </p>\n </div>\n\n {tasksError ? (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-sm text-red-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.errorLoadingTask', 'Error loading task')}\n </p>\n <p className=\"text-xs text-red-700 mb-3\">\n {tasksError instanceof Error ? tasksError.message : t('workflows.checkoutDemo.customerInfo.unknownError', 'Unknown error')}\n </p>\n <Button\n onClick={() => refetchTasks()}\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.customerInfo.retry', 'Retry')}\n </Button>\n </div>\n ) : tasksLoading ? (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex items-center justify-center py-4\">\n <div className=\"inline-block w-8 h-8 border-4 border-yellow-600 border-t-transparent rounded-full animate-spin\"></div>\n <p className=\"ml-3 text-sm text-gray-600\">{t('workflows.checkoutDemo.customerInfo.loading', 'Loading task...')}</p>\n </div>\n </div>\n ) : userTasks.length > 0 ? (\n <form onSubmit={handleTaskSubmit} className=\"bg-white border border-gray-200 rounded-lg p-4 space-y-4\">\n {taskError && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <p className=\"text-sm text-red-800\">{taskError}</p>\n </div>\n )}\n\n {userTasks[0].formSchema?.properties && (\n <div className=\"space-y-3\">\n {Object.keys(userTasks[0].formSchema.properties).map((fieldName) => {\n const required = userTasks[0].formSchema.required?.includes(fieldName) || false\n return renderFormField(fieldName, userTasks[0].formSchema.properties[fieldName], required)\n })}\n </div>\n )}\n\n <div className=\"pt-3 border-t border-gray-200\">\n <Button\n type=\"submit\"\n disabled={submittingTask}\n className=\"w-full bg-yellow-600 hover:bg-yellow-700 text-white font-medium\"\n >\n {submittingTask\n ? t('workflows.checkoutDemo.customerInfo.submitting', 'Submitting...')\n : t('workflows.checkoutDemo.customerInfo.submit', 'Complete & Continue Checkout')}\n </Button>\n </div>\n </form>\n ) : (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <p className=\"text-sm text-orange-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.noTaskTitle', 'No task found')}\n </p>\n <p className=\"text-xs text-orange-700 mb-3\">\n {t('workflows.checkoutDemo.customerInfo.noTaskHint', 'The user task may still be creating. This usually takes less than a second.')}\n </p>\n <Button\n onClick={() => refetchTasks()}\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.customerInfo.refresh', 'Refresh')}\n </Button>\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Payment Initiation Step */}\n {result && result.currentStepId === 'payment_initiation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.paymentInitiation.title', 'Initiating Payment')}\n </h2>\n <div className=\"space-y-6\">\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800 font-medium mb-2\">{t('workflows.checkoutDemo.paymentInitiation.detailsTitle', 'Payment Details')}</p>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.methodLabel', 'Method:')}</span>\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.paymentInitiation.methodValue', 'Credit Card ****4242')}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.amountLabel', 'Amount:')}</span>\n <span className=\"text-gray-900 font-semibold\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-center py-8\">\n <div className=\"text-center\">\n <div className=\"inline-block w-16 h-16 border-4 border-blue-600 border-t-transparent rounded-full animate-spin mb-4\"></div>\n <p className=\"text-sm text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.sending', 'Sending payment request...')}</p>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Wait for Payment Confirmation Step - SIGNAL */}\n {result && result.currentStepId === 'wait_payment_confirmation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-yellow-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.waitPayment.title', 'Waiting for Payment Confirmation')}\n </h2>\n <div className=\"space-y-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.waitPayment.heading', 'Awaiting Payment Provider Webhook')}\n </p>\n <p className=\"text-xs text-yellow-700 mb-3\">\n {t('workflows.checkoutDemo.waitPayment.description', 'The workflow is paused waiting for the payment provider to confirm the transaction via webhook. In production, this would be sent automatically by Stripe, PayPal, etc.')}\n </p>\n <div className=\"space-y-2 text-xs text-yellow-700\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.statusLabel', 'Status:')} <strong>{result.status}</strong></span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.signalNameLabel', 'Signal Name:')} <code className=\"bg-yellow-100 px-1 py-0.5 rounded\">payment_confirmed</code></span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.timeout', 'Timeout: 5 minutes')}</span>\n </div>\n </div>\n </div>\n\n {signalError && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-red-600 mt-0.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-red-800\">{t('workflows.checkoutDemo.waitPayment.signalErrorTitle', 'Signal Error')}</h3>\n <p className=\"text-sm text-red-700 mt-1 whitespace-pre-wrap\">{signalError}</p>\n <Button\n onClick={() => setSignalError(null)}\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-2\"\n >\n {t('workflows.checkoutDemo.waitPayment.dismiss', 'Dismiss')}\n </Button>\n </div>\n </div>\n </div>\n )}\n\n {result.status === 'PAUSED' && (\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <p className=\"text-sm font-medium text-gray-900 mb-2\">{t('workflows.checkoutDemo.waitPayment.demoTestingTitle', 'For Demo Testing:')}</p>\n <p className=\"text-xs text-gray-600 mb-3\">\n {t('workflows.checkoutDemo.waitPayment.demoTestingHint', 'Click the button below to simulate a payment provider webhook confirming the transaction.')}\n </p>\n <Button\n onClick={handleSendPaymentSignal}\n disabled={sendingSignal || result.status !== 'PAUSED'}\n className=\"w-full bg-yellow-600 hover:bg-yellow-700 text-white font-medium\"\n >\n {sendingSignal\n ? t('workflows.checkoutDemo.waitPayment.sendingSignal', 'Sending Signal...')\n : t('workflows.checkoutDemo.waitPayment.simulateWebhook', '\uD83D\uDD14 Simulate Payment Webhook')}\n </Button>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t('workflows.checkoutDemo.waitPayment.sendsPrefix', 'This sends a ')}<code className=\"bg-gray-100 px-1 py-0.5 rounded text-xs\">SIGNAL_RECEIVED</code>{t('workflows.checkoutDemo.waitPayment.sendsSuffix', ' event')}\n </p>\n </div>\n )}\n\n {result.status !== 'PAUSED' && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800\">\n <strong>{t('workflows.checkoutDemo.waitPayment.noteLabel', 'Note:')}</strong> {t('workflows.checkoutDemo.waitPayment.noteStatusPrefix', 'Workflow status is ')}<strong>{result.status}</strong>{t('workflows.checkoutDemo.waitPayment.noteStatusSuffix', '. The signal button will appear when the workflow is fully paused at this step.')}\n </p>\n </div>\n )}\n\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-xs text-blue-800\">\n <strong>{t('workflows.checkoutDemo.waitPayment.realWorldLabel', 'Real-world scenario:')}</strong> {t('workflows.checkoutDemo.waitPayment.realWorldPart1', 'Your payment provider (Stripe, PayPal) would send a webhook to your server endpoint (e.g., ')}<code className=\"bg-blue-100 px-1 py-0.5 rounded\">/api/webhooks/payments</code>{t('workflows.checkoutDemo.waitPayment.realWorldPart2', '), which would then call ')}<code className=\"bg-blue-100 px-1 py-0.5 rounded\">POST /api/workflows/instances/[id]/signal</code>{t('workflows.checkoutDemo.waitPayment.realWorldPart3', ' to resume the workflow.')}\n </p>\n </div>\n </div>\n </>\n )}\n\n {/* Order Confirmation Step */}\n {result && result.currentStepId === 'order_confirmation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.orderConfirmation.title', 'Creating Order')}\n </h2>\n <div className=\"space-y-6\">\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <p className=\"text-sm text-green-800 font-medium mb-1\">{t('workflows.checkoutDemo.orderConfirmation.paymentSuccess', 'Payment Successful!')}</p>\n <p className=\"text-xs text-green-700\">{t('workflows.checkoutDemo.orderConfirmation.transactionIdPrefix', 'Transaction ID: ')}{result.instanceId.slice(0, 8)}...</p>\n </div>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-green-600\">\u2713</span>\n <span className=\"text-gray-700\">{t('workflows.checkoutDemo.orderConfirmation.creatingRecord', 'Creating order record')}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin\"></span>\n <span className=\"text-gray-700\">{t('workflows.checkoutDemo.orderConfirmation.sendingEmail', 'Sending confirmation email')}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-gray-400\">\u25CB</span>\n <span className=\"text-gray-500\">{t('workflows.checkoutDemo.orderConfirmation.updatingInventory', 'Updating inventory')}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Completed State */}\n {result && result.status === 'COMPLETED' && (\n <>\n <div className=\"text-center mb-6\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 bg-green-100 rounded-full mb-4\">\n <svg className=\"w-8 h-8 text-green-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-2\">{t('workflows.checkoutDemo.completed.title', 'Order Confirmed!')}</h2>\n <p className=\"text-sm text-gray-600\">{t('workflows.checkoutDemo.completed.orderNumberPrefix', 'Order #')}{result.instanceId.slice(0, 8).toUpperCase()}</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"bg-gray-50 rounded-lg p-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.orderDateLabel', 'Order Date:')}</span>\n <span className=\"text-gray-900\">{new Date().toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.paymentMethodLabel', 'Payment Method:')}</span>\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.completed.paymentMethodValue', 'Credit Card ****4242')}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.totalPaidLabel', 'Total Paid:')}</span>\n <span className=\"text-gray-900 font-semibold\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n\n <div className=\"border-t border-gray-200 pt-4\">\n <p className=\"text-xs text-gray-600 mb-3\">{t('workflows.checkoutDemo.completed.orderItemsLabel', 'Order Items:')}</p>\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-gray-700\">{item.quantity}x {item.name}</span>\n <span className=\"text-gray-900\">{currencySymbol}{(item.price * item.quantity).toFixed(2)}</span>\n </div>\n ))}\n </div>\n\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-xs text-blue-800\">\n {t('workflows.checkoutDemo.completed.emailSent', '\u2709\uFE0F A confirmation email has been sent to demo@example.com')}\n </p>\n </div>\n\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.completed.startNew', 'Start New Order')}\n </Button>\n </div>\n </>\n )}\n\n {/* Failed State */}\n {result && result.status === 'FAILED' && (\n <>\n <h2 className=\"text-xl font-semibold text-red-900 mb-4\">{t('workflows.checkoutDemo.failed.title', 'Order Failed')}</h2>\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-sm text-red-800\">\n {t('workflows.checkoutDemo.failed.message', 'Unfortunately, your order could not be processed. Please try again.')}\n </p>\n </div>\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n className=\"w-full mt-6\"\n >\n {t('workflows.checkoutDemo.failed.tryAgain', 'Try Again')}\n </Button>\n </>\n )}\n </div>\n\n {/* Workflow Status */}\n <div className=\"bg-white shadow rounded-lg p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">{t('workflows.checkoutDemo.progress.title', 'Workflow Progress')}</h2>\n\n {!result && !error && (\n <div className=\"text-center py-12\">\n <svg\n className=\"mx-auto h-12 w-12 text-gray-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n <p className=\"mt-4 text-gray-600\">\n {t('workflows.checkoutDemo.progress.prompt', 'Click \"Start Checkout Workflow\" to begin')}\n </p>\n </div>\n )}\n\n {loading && (\n <div className=\"text-center py-12\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">{t('workflows.checkoutDemo.progress.startingWorkflow', 'Starting workflow...')}</p>\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-red-600 mt-0.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">{t('workflows.checkoutDemo.progress.errorTitle', 'Error')}</h3>\n <p className=\"mt-1 text-sm text-red-700 whitespace-pre-wrap\">{error}</p>\n <Button\n onClick={() => setError(null)}\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n >\n {t('workflows.checkoutDemo.progress.errorDismiss', 'Dismiss')}\n </Button>\n </div>\n </div>\n </div>\n )}\n\n {result && (\n <div className=\"space-y-6\">\n {/* Status Badge */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.progress.statusLabel', 'Status')}\n </label>\n <span\n className={`inline-flex items-center px-3 py-1 rounded-full text-sm font-medium ${getStatusColor(\n result.status\n )}`}\n >\n {result.status}\n </span>\n </div>\n\n {/* Workflow Steps Visual */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-3\">\n {t('workflows.checkoutDemo.progress.stepsLabel', 'Steps')}\n </label>\n <div className=\"space-y-2\">\n {workflowSteps.map((step, index) => {\n const status = getStepStatus(step.stepId)\n const isLastStep = step.stepType === 'END'\n const isPaused = status === 'paused'\n\n return (\n <div\n key={step.stepId}\n className={`p-3 rounded-lg border-2 ${getStepColor(status)} transition-all duration-300 ${\n (status === 'current' || isPaused) && !isLastStep ? 'animate-pulse' : ''\n }`}\n >\n <div className=\"flex items-center\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-white flex items-center justify-center font-bold text-sm\">\n {status === 'completed' ? '\u2713' : isPaused ? '\u23F8' : index + 1}\n </div>\n <div className=\"ml-3 flex-1\">\n <p className=\"font-medium\">{step.stepName}</p>\n {step.description && (\n <p className=\"text-xs opacity-75 mt-0.5\">{step.description}</p>\n )}\n </div>\n {status === 'current' && !isLastStep && !isPaused && (\n <span className=\"ml-2 text-xs font-medium flex items-center gap-1\">\n <span className=\"inline-block w-2 h-2 bg-current rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.progress.processing', 'Processing...')}\n </span>\n )}\n {isPaused && (\n <span className=\"ml-2 text-xs font-medium flex items-center gap-1\">\n <span className=\"inline-block w-2 h-2 bg-current rounded-full\"></span>\n {t('workflows.checkoutDemo.progress.waitingForInput', 'Waiting for input')}\n </span>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n\n {/* User Task Required */}\n {result.status === 'PAUSED' && userTasks.length > 0 && (\n <div className=\"border-t border-gray-200 pt-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <div className=\"flex items-start mb-3\">\n <svg\n className=\"h-5 w-5 text-yellow-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-yellow-800\">\n {t('workflows.checkoutDemo.progress.userActionTitle', 'User Action Required')}\n </h3>\n <p className=\"text-sm text-yellow-700 mt-1\">\n {t('workflows.checkoutDemo.progress.userActionHint', 'This workflow is paused waiting for user input. Please complete the task below to continue.')}\n </p>\n </div>\n </div>\n\n {userTasks.map((task: any) => (\n <div key={task.id} className=\"mt-3 bg-white rounded-md p-3 border border-yellow-200\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <h4 className=\"text-sm font-semibold text-gray-900\">{task.taskName}</h4>\n {task.description && (\n <p className=\"text-sm text-gray-600 mt-1\">{task.description}</p>\n )}\n {task.dueDate && (\n <p className=\"text-xs text-gray-500 mt-2\">\n {t('workflows.checkoutDemo.progress.duePrefix', 'Due: ')}{new Date(task.dueDate).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n <a\n href={`/backend/tasks/${task.id}`}\n className=\"inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-white bg-yellow-600 hover:bg-yellow-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-ring\"\n >\n {t('workflows.checkoutDemo.progress.completeTask', 'Complete Task \u2192')}\n </a>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Manual Progression */}\n {result.status === 'RUNNING' && currentStep && currentStep.stepType !== 'END' && (\n <div className=\"border-t border-gray-200 pt-4\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.progress.manualProgression', 'Manual Progression')}\n </label>\n <p className=\"text-sm text-gray-600 mb-3\">\n {t('workflows.checkoutDemo.progress.manualProgressionHint', 'Manually advance to the next step for testing')}\n </p>\n <Button\n onClick={() => handleAdvance()}\n disabled={advancing || result.status !== 'RUNNING'}\n className=\"w-full\"\n >\n {advancing\n ? t('workflows.checkoutDemo.progress.advancing', 'Advancing...')\n : t('workflows.checkoutDemo.progress.advance', 'Advance to Next Step \u2192')}\n </Button>\n </div>\n )}\n\n {/* Completed State */}\n {result.status === 'COMPLETED' && (\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-green-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-green-800\">\n {t('workflows.checkoutDemo.progress.workflowCompleted', 'Workflow Completed!')}\n </h3>\n <p className=\"mt-1 text-sm text-green-700\">\n {t('workflows.checkoutDemo.progress.workflowCompletedHint', 'All steps executed successfully')}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"border-t border-gray-200 pt-4 space-y-3\">\n <Link\n href={`/backend/instances/${result.instanceId}`}\n className=\"block w-full text-center px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors\"\n >\n {t('workflows.checkoutDemo.progress.viewInAdmin', 'View in Admin')}\n </Link>\n\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.progress.startNewCheckout', 'Start New Checkout')}\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Workflow Events Timeline */}\n {result && events.length > 0 && (\n <div className=\"mt-8 bg-white shadow rounded-lg p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-3\">\n <h2 className=\"text-xl font-semibold text-gray-900\">\n {t('workflows.checkoutDemo.events.title', 'Workflow Events')}\n <span className=\"ml-2 text-sm font-normal text-gray-500\">\n ({events.length})\n </span>\n </h2>\n {(result.status === 'RUNNING' || result.status === 'WAITING_FOR_ACTIVITIES') && (\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-800\">\n <span className=\"inline-block w-2 h-2 bg-red-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.events.liveBadge', 'Live')}\n </span>\n )}\n </div>\n <Link\n href={`/backend/events?workflowInstanceId=${result.instanceId}`}\n className=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {t('workflows.checkoutDemo.events.viewAllLink', 'View all events \u2192')}\n </Link>\n </div>\n\n <div className=\"space-y-3 max-h-96 overflow-y-auto\">\n {events.map((event: WorkflowEvent) => (\n <div\n key={event.id}\n className=\"border border-gray-200 rounded-lg p-3 hover:bg-gray-50 transition-colors\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <span\n className={`inline-flex items-center px-2 py-0.5 rounded text-xs font-medium ${getEventTypeBadgeClass(\n event.eventType\n )}`}\n >\n {formatEventType(event.eventType)}\n </span>\n <span className=\"text-xs text-gray-500\">\n {new Date(event.occurredAt).toLocaleTimeString()}\n </span>\n </div>\n {event.eventData && Object.keys(event.eventData).length > 0 && (\n <details className=\"mt-2\">\n <summary className=\"text-xs text-gray-600 cursor-pointer hover:text-gray-900\">\n {t('workflows.checkoutDemo.events.viewData', 'View event data')}\n </summary>\n <pre className=\"mt-2 text-xs bg-gray-100 p-2 rounded overflow-x-auto max-h-32 overflow-y-auto\">\n {JSON.stringify(event.eventData, null, 2)}\n </pre>\n </details>\n )}\n </div>\n <Link\n href={`/backend/events/${event.id}`}\n className=\"text-xs text-blue-600 hover:text-blue-800 hover:underline whitespace-nowrap\"\n >\n {t('workflows.checkoutDemo.events.detailsLink', 'Details')}\n </Link>\n </div>\n </div>\n ))}\n </div>\n\n {events.length > 10 && (\n <div className=\"mt-4 text-center\">\n <Link\n href={`/backend/events?workflowInstanceId=${result.instanceId}`}\n className=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {t('workflows.checkoutDemo.events.viewAllPrefix', 'View all')} {events.length} {t('workflows.checkoutDemo.events.viewAllSuffix', 'events \u2192')}\n </Link>\n </div>\n )}\n </div>\n )}\n\n {/* Features Info */}\n <div className=\"mt-4 bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-blue-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">{t('workflows.checkoutDemo.features.title', 'Features')}</h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <ul className=\"list-disc list-inside space-y-1\">\n <li><strong>{t('workflows.checkoutDemo.features.signalFlow.label', 'Signal-Based Payment Flow:')}</strong>{t('workflows.checkoutDemo.features.signalFlow.body', ' Demonstrates real-world webhook pattern with WAIT_FOR_SIGNAL step type')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.interactiveUi.label', 'Interactive UI Changes:')}</strong>{t('workflows.checkoutDemo.features.interactiveUi.body', ' Left panel dynamically updates to show cart validation, payment initiation, webhook waiting, and order confirmation screens')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.realtimeProgress.label', 'Real-time Progress Tracking:')}</strong>{t('workflows.checkoutDemo.features.realtimeProgress.body', ' Watch the workflow progress through steps automatically with live status updates')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.webhookSimulation.label', 'Webhook Simulation:')}</strong>{t('workflows.checkoutDemo.features.webhookSimulation.body', ' Test signal-based workflow resumption with simulated payment provider webhook')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.liveEventTimeline.label', 'Live Event Timeline:')}</strong>{t('workflows.checkoutDemo.features.liveEventTimeline.body', ' New workflow events appear in real-time including SIGNAL_AWAITING and SIGNAL_RECEIVED')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.completeOrderFlow.label', 'Complete Order Flow:')}</strong>{t('workflows.checkoutDemo.features.completeOrderFlow.body', ' Experience the full checkout journey from cart to confirmation with async payment processing')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.userTaskIntegration.label', 'User Task Integration:')}</strong>{t('workflows.checkoutDemo.features.userTaskIntegration.body', ' Form-based user input with workflow pause/resume on task completion')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.businessRulesIntegration.label', 'Business Rules Integration:')}</strong>{t('workflows.checkoutDemo.features.businessRulesIntegration.body', ' Guard rules validate transitions with detailed failure information')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.startPreconditions.label', 'START Step Pre-conditions:')}</strong>{t('workflows.checkoutDemo.features.startPreconditions.body', ' Validate business rules before workflow can start (e.g., cart not empty) with localized error messages')}</li>\n </ul>\n <p className=\"mt-2\">\n <Link href=\"/backend/definitions\" className=\"text-blue-800 hover:text-blue-900 underline\">\n {t('workflows.checkoutDemo.features.viewAllWorkflowsLink', 'View all workflows \u2192')}\n </Link>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport Link from 'next/link'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface CartItem {\n id: string // Product UUID\n name: string\n price: number\n quantity: number\n}\n\ninterface Product {\n id: string\n title: string\n pricing: {\n unit_price_gross: number\n unit_price_net: number\n currency_code: string\n price_kind_code?: string\n } | null\n}\n\ninterface WorkflowResult {\n instanceId: string\n status: string\n workflowId: string\n currentStepId?: string\n context?: any\n}\n\ninterface StepInfo {\n stepId: string\n stepName: string\n stepType: string\n description?: string\n}\n\ninterface WorkflowEvent {\n id: string\n eventType: string\n occurredAt: string\n eventData?: any\n}\n\nexport default function CheckoutDemoPage() {\n const queryClient = useQueryClient()\n const t = useT()\n const [loading, setLoading] = useState(false)\n const [advancing, setAdvancing] = useState(false)\n const [result, setResult] = useState<WorkflowResult | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [currentStep, setCurrentStep] = useState<StepInfo | null>(null)\n const [availableSteps, setAvailableSteps] = useState<StepInfo[]>([])\n const [formData, setFormData] = useState<Record<string, any>>({})\n const [submittingTask, setSubmittingTask] = useState(false)\n const [taskError, setTaskError] = useState<string | null>(null)\n const [sendingSignal, setSendingSignal] = useState(false)\n const [signalError, setSignalError] = useState<string | null>(null)\n const [enableTaskPolling, setEnableTaskPolling] = useState(false)\n const [selectedCustomerId, setSelectedCustomerId] = useState<string>('')\n const [selectedCurrency, setSelectedCurrency] = useState<string>('USD')\n const [cart, setCart] = useState<CartItem[]>([])\n const [validationErrors, setValidationErrors] = useState<Array<{ ruleId: string; message: string }>>([])\n const [isValidating, setIsValidating] = useState(false)\n\n // Poll workflow instance for real-time status updates\n const { data: instanceData } = useQuery({\n queryKey: ['workflow-instance', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return null\n\n const response = await fetch(`/api/workflows/instances/${result.instanceId}`)\n if (!response.ok) return null\n\n const json = await response.json()\n return json.data // API returns { data: instance }\n },\n enabled: !!result?.instanceId,\n refetchInterval: (query) => {\n // Poll while workflow is active (not completed, failed, or cancelled)\n const status = query.state.data?.status || result?.status\n return (status === 'RUNNING' || status === 'PAUSED' || status === 'WAITING_FOR_ACTIVITIES') ? 500 : false\n },\n })\n\n // Update result when instance data changes\n useEffect(() => {\n if (instanceData) {\n setResult({\n instanceId: instanceData.id,\n status: instanceData.status,\n workflowId: instanceData.workflowId,\n currentStepId: instanceData.currentStepId,\n context: instanceData.context,\n })\n }\n }, [instanceData])\n\n // Fetch workflow events for the current instance\n const { data: events = [] } = useQuery({\n queryKey: ['workflow-events', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return []\n\n const response = await fetch(\n `/api/workflows/events?workflowInstanceId=${result.instanceId}&sortField=occurredAt&sortDir=desc&pageSize=20`\n )\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.items || []\n },\n enabled: !!result?.instanceId,\n refetchInterval: (query) => {\n // Poll while workflow is active\n const status = instanceData?.status || result?.status\n return (status === 'RUNNING' || status === 'PAUSED' || status === 'WAITING_FOR_ACTIVITIES') ? 1000 : false\n },\n })\n\n // Fetch pending user tasks for this workflow instance\n const { data: userTasks = [], isLoading: tasksLoading, error: tasksError, refetch: refetchTasks } = useQuery({\n queryKey: ['workflow-user-tasks', result?.instanceId],\n queryFn: async () => {\n if (!result?.instanceId) return []\n\n const response = await fetch(\n `/api/workflows/tasks?workflowInstanceId=${result.instanceId}&status=PENDING`\n )\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n console.error('[UserTasks] Error response:', errorData)\n throw new Error(errorData.error || `HTTP ${response.status}`)\n }\n\n const data = await response.json()\n return data.data || []\n },\n enabled: !!result?.instanceId && result?.status === 'PAUSED' && enableTaskPolling,\n refetchInterval: result?.status === 'PAUSED' && enableTaskPolling ? 2000 : false,\n })\n\n // Fetch workflow definition to get dynamic steps\n const { data: workflowDefinition } = useQuery({\n queryKey: ['workflow-definition', 'checkout_simple_v1'],\n queryFn: async () => {\n const response = await fetch('/api/workflows/definitions?workflowId=checkout_simple_v1')\n if (!response.ok) return null\n const json = await response.json()\n return json.data?.[0] || null\n },\n })\n\n // Fetch customers for dropdown\n const { data: customers = [], isLoading: customersLoading } = useQuery({\n queryKey: ['customers-companies'],\n queryFn: async () => {\n const response = await fetch('/api/customers/companies?pageSize=100')\n if (!response.ok) return []\n const json = await response.json()\n return json.items || []\n },\n })\n\n // Fetch products for cart selection with pricing context\n const { data: products = [], isLoading: productsLoading } = useQuery({\n queryKey: ['catalog-products', selectedCurrency],\n queryFn: async () => {\n // Pass pricing context to get resolved prices\n const params = new URLSearchParams({\n pageSize: '100',\n quantity: '1',\n priceDate: new Date().toISOString(),\n })\n\n const response = await fetch(`/api/catalog/products?${params}`)\n if (!response.ok) return []\n const json = await response.json()\n return json.items || []\n },\n })\n\n // Exchange rates (USD base)\n const exchangeRates: Record<string, number> = {\n USD: 1,\n EUR: 0.92,\n GBP: 0.79,\n PLN: 4.02,\n }\n\n // Currency symbols\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '\u20AC',\n GBP: '\u00A3',\n PLN: 'z\u0142',\n }\n\n // Cart management functions\n const addToCart = (product: Product) => {\n const existing = cart.find(item => item.id === product.id)\n if (existing) {\n setCart(cart.map(item =>\n item.id === product.id\n ? { ...item, quantity: item.quantity + 1 }\n : item\n ))\n } else {\n setCart([...cart, {\n id: product.id,\n name: product.title,\n // Use resolved pricing from catalog pricing service (in USD)\n price: product.pricing?.unit_price_gross || product.pricing?.unit_price_net || 99.99,\n quantity: 1,\n }])\n }\n }\n\n const updateQuantity = (productId: string, quantity: number) => {\n if (quantity <= 0) {\n setCart(cart.filter(item => item.id !== productId))\n } else {\n setCart(cart.map(item =>\n item.id === productId ? { ...item, quantity } : item\n ))\n }\n }\n\n const removeFromCart = (productId: string) => {\n setCart(cart.filter(item => item.id !== productId))\n }\n\n // Convert prices to selected currency (cart items are in USD by default)\n const exchangeRate = exchangeRates[selectedCurrency] || 1\n const demoCart = cart.map(item => ({\n ...item,\n price: item.price * exchangeRate,\n }))\n\n const currencySymbol = currencySymbols[selectedCurrency] || selectedCurrency\n\n const subtotal = demoCart.reduce((sum, item) => sum + item.price * item.quantity, 0)\n const tax = subtotal * 0.08 // 8% tax\n const shipping = 9.99 * exchangeRate\n const total = subtotal + tax + shipping\n\n // Workflow steps for UI - use dynamic definition or fallback\n const workflowSteps: StepInfo[] = workflowDefinition?.definition?.steps || [\n { stepId: 'start', stepName: 'Start', stepType: 'START', description: 'Workflow initiated' },\n { stepId: 'cart_validation', stepName: 'Cart Validation', stepType: 'AUTOMATED', description: 'Validate cart and reserve inventory' },\n { stepId: 'customer_info', stepName: 'Customer Information', stepType: 'USER_TASK', description: 'Collect customer shipping and contact information' },\n { stepId: 'payment_initiation', stepName: 'Initiate Payment', stepType: 'AUTOMATED', description: 'Send payment request to provider' },\n { stepId: 'wait_payment_confirmation', stepName: 'Wait for Payment Confirmation', stepType: 'WAIT_FOR_SIGNAL', description: 'Waiting for payment provider webhook' },\n { stepId: 'order_confirmation', stepName: 'Order Confirmation', stepType: 'AUTOMATED', description: 'Create order and send confirmation' },\n { stepId: 'end', stepName: 'Complete', stepType: 'END', description: 'Checkout completed' },\n ]\n\n // Update current step and available steps when result changes\n useEffect(() => {\n if (result?.currentStepId) {\n const current = workflowSteps.find(s => s.stepId === result.currentStepId)\n setCurrentStep(current || null)\n\n // Find next available steps (simple - just show next step)\n const currentIndex = workflowSteps.findIndex(s => s.stepId === result.currentStepId)\n if (currentIndex >= 0 && currentIndex < workflowSteps.length - 1) {\n setAvailableSteps([workflowSteps[currentIndex + 1]])\n } else {\n setAvailableSteps([])\n }\n }\n }, [result])\n\n // Add initial delay before polling for user tasks when workflow becomes PAUSED\n // This reduces race condition where API returns before background execution completes\n useEffect(() => {\n if (result?.status === 'PAUSED') {\n setEnableTaskPolling(false)\n\n const timer = setTimeout(() => {\n setEnableTaskPolling(true)\n }, 500)\n\n return () => clearTimeout(timer)\n } else {\n setEnableTaskPolling(false)\n }\n }, [result?.status])\n\n // Validate workflow pre-conditions before starting checkout\n const validateBeforeCheckout = useCallback(async (): Promise<boolean> => {\n // Don't validate if no customer selected yet\n if (!selectedCustomerId) {\n setValidationErrors([])\n return false\n }\n\n setIsValidating(true)\n\n try {\n const response = await fetch('/api/workflows/instances/validate-start', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n workflowId: 'checkout_simple_v1',\n context: {\n cart: {\n items: demoCart,\n itemCount: demoCart.reduce((sum, item) => sum + item.quantity, 0),\n subtotal: subtotal,\n tax: tax,\n shipping: shipping,\n total: total,\n currency: selectedCurrency,\n },\n customerId: selectedCustomerId,\n currency: selectedCurrency,\n },\n }),\n })\n\n const data = await response.json()\n\n if (!data.canStart) {\n setValidationErrors(data.errors || [{ ruleId: '_UNKNOWN', message: 'Validation failed' }])\n return false\n }\n\n setValidationErrors([])\n return true\n } catch (err) {\n setValidationErrors([{ ruleId: '_ERROR', message: 'Failed to validate checkout pre-conditions' }])\n return false\n } finally {\n setIsValidating(false)\n }\n }, [selectedCustomerId, demoCart, subtotal, tax, shipping, total, selectedCurrency])\n\n // Auto-validate when customer is selected or cart changes\n // Using JSON.stringify(cart) to detect actual cart content changes\n const cartJson = JSON.stringify(cart)\n useEffect(() => {\n // Only validate if customer is selected and workflow hasn't started yet\n if (!selectedCustomerId || result) {\n return\n }\n\n validateBeforeCheckout()\n }, [selectedCustomerId, cartJson, result]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleCheckout = async () => {\n // Validate customer selection\n if (!selectedCustomerId) {\n setError('Please select a customer before starting checkout')\n return\n }\n\n // Validate pre-conditions before starting workflow\n const canStart = await validateBeforeCheckout()\n if (!canStart) {\n return\n }\n\n setLoading(true)\n setError(null)\n setResult(null)\n\n try {\n // Build the initial context\n const initialContext = {\n customerId: selectedCustomerId,\n cartId: `cart-${Date.now()}`,\n currency: selectedCurrency,\n cart: {\n id: `cart-${Date.now()}`,\n items: demoCart,\n orderLines: demoCart.map(item => ({\n quantity: item.quantity,\n currencyCode: selectedCurrency || 'USD', // Ensure currency is always set\n kind: 'product' as const,\n productId: item.id,\n lineDescription: item.name,\n unitPriceGross: item.price,\n })),\n itemCount: demoCart.reduce((sum, item) => sum + item.quantity, 0),\n subtotal: subtotal,\n tax: tax,\n shipping: shipping,\n total: total,\n currency: selectedCurrency,\n },\n customer: {\n id: selectedCustomerId,\n name: 'Demo Customer',\n email: 'demo@example.com',\n },\n payment: {\n id: `payment-${Date.now()}`,\n methodId: 'pm_demo_visa',\n method: 'Credit Card',\n last4: '4242',\n },\n }\n\n // Start the checkout workflow\n const response = await fetch('/api/workflows/instances', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n workflowId: 'checkout_simple_v1',\n version: 1,\n correlationKey: `DEMO-ORDER-${Date.now()}`,\n initialContext,\n metadata: {\n source: 'checkout-demo',\n userAgent: navigator.userAgent,\n timestamp: new Date().toISOString(),\n },\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n const errorMsg = errorData.error || 'Failed to start checkout workflow'\n\n if (response.status === 404 && errorMsg.includes('Workflow definition not found')) {\n throw new Error(\n 'Workflow not found. Please ensure:\\n' +\n '1. You have seeded the demo workflow (see instructions below)\\n' +\n '2. You are logged in with the same tenant/organization used when seeding\\n' +\n '3. The workflow is enabled in the database'\n )\n }\n\n if (response.status === 401) {\n throw new Error('Please log in to start a workflow')\n }\n\n if (response.status === 403) {\n throw new Error('You do not have permission to start workflows. Please contact your administrator.')\n }\n\n throw new Error(errorMsg)\n }\n\n const data = await response.json()\n\n setResult({\n instanceId: data.data.instance.id,\n status: data.data.instance.status,\n workflowId: data.data.instance.workflowId,\n currentStepId: data.data.instance.currentStepId,\n context: data.data.instance.context,\n })\n } catch (err) {\n console.error('Checkout error:', err)\n setError(err instanceof Error ? err.message : 'An error occurred during checkout')\n } finally {\n setLoading(false)\n }\n }\n\n const handleAdvance = async (toStepId?: string) => {\n if (!result?.instanceId) return\n\n setAdvancing(true)\n setError(null)\n\n try {\n const response = await fetch(`/api/workflows/instances/${result.instanceId}/advance`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toStepId,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n throw new Error(errorData.error || 'Failed to advance workflow')\n }\n\n const data = await response.json()\n\n // Update result with new state\n setResult({\n instanceId: data.data.instance.id,\n status: data.data.instance.status,\n workflowId: result.workflowId,\n currentStepId: data.data.instance.currentStepId,\n context: data.data.instance.context,\n })\n } catch (err) {\n console.error('Advance error:', err)\n setError(err instanceof Error ? err.message : 'Failed to advance workflow')\n } finally {\n setAdvancing(false)\n }\n }\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'RUNNING':\n return 'text-blue-600 bg-blue-50'\n case 'WAITING_FOR_ACTIVITIES':\n return 'text-purple-600 bg-purple-50'\n case 'PAUSED':\n return 'text-yellow-600 bg-yellow-50'\n case 'COMPLETED':\n return 'text-green-600 bg-green-50'\n case 'FAILED':\n return 'text-red-600 bg-red-50'\n default:\n return 'text-gray-600 bg-gray-50'\n }\n }\n\n const getStepStatus = (stepId: string) => {\n if (!result?.currentStepId) return 'pending'\n\n const currentIndex = workflowSteps.findIndex(s => s.stepId === result.currentStepId)\n const stepIndex = workflowSteps.findIndex(s => s.stepId === stepId)\n\n if (currentIndex === -1 || stepIndex === -1) return 'pending'\n\n if (stepIndex < currentIndex) return 'completed'\n if (stepIndex === currentIndex) {\n // If workflow is paused at this step, show it as paused\n return result.status === 'PAUSED' ? 'paused' : 'current'\n }\n return 'pending'\n }\n\n const getStepColor = (status: string) => {\n switch (status) {\n case 'completed':\n return 'bg-green-100 text-green-600 border-green-300'\n case 'current':\n return 'bg-blue-100 text-blue-600 border-blue-300'\n case 'paused':\n return 'bg-yellow-100 text-yellow-600 border-yellow-300'\n default:\n return 'bg-gray-100 text-gray-600 border-gray-300'\n }\n }\n\n const getEventTypeBadgeClass = (eventType: string) => {\n if (eventType.includes('STARTED')) return 'bg-blue-100 text-blue-800'\n if (eventType.includes('COMPLETED')) return 'bg-green-100 text-green-800'\n if (eventType.includes('FAILED') || eventType.includes('REJECTED')) return 'bg-red-100 text-red-800'\n if (eventType.includes('CANCELLED')) return 'bg-gray-100 text-gray-800'\n if (eventType.includes('ENTERED') || eventType.includes('EXITED')) return 'bg-purple-100 text-purple-800'\n return 'bg-gray-100 text-gray-800'\n }\n\n const formatEventType = (eventType: string) => {\n return eventType.replace(/_/g, ' ').toLowerCase().replace(/\\b\\w/g, c => c.toUpperCase())\n }\n\n const handleFieldChange = (fieldName: string, value: any) => {\n setFormData(prev => ({\n ...prev,\n [fieldName]: value,\n }))\n }\n\n const handleSendPaymentSignal = async () => {\n if (!result?.instanceId) {\n setSignalError('No workflow instance found')\n return\n }\n\n // Check if workflow is in the correct step\n if (result.currentStepId !== 'wait_payment_confirmation') {\n setSignalError(`Cannot send signal: workflow is at step \"${result.currentStepId}\", expected \"wait_payment_confirmation\"`)\n return\n }\n\n setSendingSignal(true)\n setSignalError(null)\n\n try {\n const signalUrl = `/api/workflows/instances/${result.instanceId}/signal`\n\n const requestPayload = {\n signalName: 'payment_confirmed',\n payload: {\n paymentStatus: 'success',\n transactionId: `txn_${Date.now()}`,\n confirmedAt: new Date().toISOString(),\n provider: 'StripeSimulator',\n },\n }\n\n const response = await fetch(signalUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestPayload),\n })\n\n // Read response as text first to handle non-JSON responses\n const responseText = await response.text()\n\n if (!response.ok) {\n let errorData: any = {}\n let isJson = false\n\n try {\n errorData = JSON.parse(responseText)\n isJson = true\n } catch (parseError) {\n console.error('[Signal] Response is not JSON:', parseError)\n console.error('[Signal] Raw response:', responseText)\n }\n\n const errorMsg = isJson && errorData.error\n ? errorData.error\n : `HTTP ${response.status}: ${responseText.substring(0, 200) || 'Failed to send signal'}`\n throw new Error(errorMsg)\n }\n\n // Parse success response\n let data: any\n try {\n data = JSON.parse(responseText)\n } catch (parseError) {\n data = { success: true }\n }\n\n // Invalidate queries to force refresh\n await queryClient.invalidateQueries({ queryKey: ['workflow-instance', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-events', result?.instanceId] })\n\n // Clear any previous errors\n setSignalError(null)\n } catch (err) {\n console.error('[Signal] Error:', err)\n const errorMessage = err instanceof Error ? err.message : 'Failed to send payment confirmation'\n setSignalError(errorMessage)\n } finally {\n setSendingSignal(false)\n }\n }\n\n const handleTaskSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!userTasks || userTasks.length === 0) return\n\n const task = userTasks[0]\n\n // Validate required fields\n if (task.formSchema?.required) {\n for (const requiredField of task.formSchema.required) {\n if (!formData[requiredField] || formData[requiredField] === '') {\n setTaskError(`Required field is missing: ${requiredField}`)\n return\n }\n }\n }\n\n setSubmittingTask(true)\n setTaskError(null)\n\n try {\n const response = await fetch(`/api/workflows/tasks/${task.id}/complete`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formData,\n }),\n })\n\n if (!response.ok) {\n const error = await response.json()\n throw new Error(error.error || 'Failed to complete task')\n }\n\n // Reset form\n setFormData({})\n setTaskError(null)\n\n // Invalidate all workflow-related queries to force immediate refresh\n await queryClient.invalidateQueries({ queryKey: ['workflow-instance', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-user-tasks', result?.instanceId] })\n await queryClient.invalidateQueries({ queryKey: ['workflow-events', result?.instanceId] })\n } catch (err) {\n console.error('Error completing task:', err)\n setTaskError(err instanceof Error ? err.message : 'Failed to complete task')\n } finally {\n setSubmittingTask(false)\n }\n }\n\n const renderFormField = (fieldName: string, fieldSchema: any, required: boolean) => {\n const fieldType = fieldSchema.type || 'string'\n const fieldTitle = fieldSchema.title || fieldName\n const fieldDescription = fieldSchema.description\n const enumValues = fieldSchema.enum\n\n const inputClasses = \"w-full px-3 py-2 border border-gray-300 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring text-sm\"\n const labelClasses = \"block text-sm font-medium text-gray-700 mb-1\"\n\n // Handle enum (select dropdown)\n if (enumValues && Array.isArray(enumValues)) {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <Select\n value={(formData[fieldName] as string) || undefined}\n onValueChange={(value) => handleFieldChange(fieldName, value ?? '')}\n >\n <SelectTrigger id={fieldName} className={inputClasses} aria-required={required}>\n <SelectValue placeholder={t('workflows.checkoutDemo.formField.selectOption', '-- Select an option --')} />\n </SelectTrigger>\n <SelectContent>\n {enumValues.map((value: any) => (\n <SelectItem key={value} value={value}>\n {value}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n // Handle different field types\n switch (fieldType) {\n case 'string':\n if (fieldSchema.format === 'email') {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <Input\n type=\"email\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n />\n </div>\n )\n }\n if (fieldSchema.format === 'date') {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <input\n type=\"date\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n className={inputClasses}\n />\n </div>\n )\n }\n if (fieldSchema.maxLength && fieldSchema.maxLength > 200) {\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <textarea\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n rows={3}\n className={inputClasses}\n />\n </div>\n )\n }\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <Input\n type=\"text\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n />\n </div>\n )\n\n case 'number':\n case 'integer':\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <Input\n type=\"number\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value ? Number(e.target.value) : '')}\n required={required}\n step={fieldType === 'integer' ? 1 : 'any'}\n />\n </div>\n )\n\n case 'boolean':\n return (\n <div key={fieldName} className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id={fieldName}\n checked={!!formData[fieldName]}\n onChange={(e) => handleFieldChange(fieldName, e.target.checked)}\n className=\"w-4 h-4 text-yellow-600 border-gray-300 rounded focus-visible:ring-ring\"\n />\n <label htmlFor={fieldName} className=\"text-sm font-medium text-gray-700\">\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n </div>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 ml-6\">{fieldDescription}</p>\n )}\n </div>\n )\n\n default:\n return (\n <div key={fieldName} className=\"space-y-1\">\n <label htmlFor={fieldName} className={labelClasses}>\n {fieldTitle}\n {required && <span className=\"text-red-600 ml-1\">*</span>}\n </label>\n {fieldDescription && (\n <p className=\"text-xs text-gray-500 mb-1\">{fieldDescription}</p>\n )}\n <Input\n type=\"text\"\n id={fieldName}\n value={formData[fieldName] || ''}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n required={required}\n />\n </div>\n )\n }\n }\n\n return (\n <div className=\"min-h-screen bg-gray-50 py-12 px-4 sm:px-6 lg:px-8\">\n <div className=\"max-w-6xl mx-auto\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">\n {t('workflows.checkoutDemo.title', 'Checkout Demo with Payment Webhooks')}\n </h1>\n <p className=\"text-gray-600\">\n {t(\n 'workflows.checkoutDemo.subtitle',\n 'Interactive workflow demonstration featuring signal-based payment confirmation (WAIT_FOR_SIGNAL)',\n )}\n </p>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Interactive Left Panel - Changes based on workflow step */}\n <div className=\"bg-white shadow rounded-lg p-6\">\n {/* Initial State - Cart Summary */}\n {!result && (\n <>\n {/* Customer Selection */}\n <div className=\"mb-6 pb-6 border-b border-gray-200\">\n <label htmlFor=\"customer-select\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.customer.selectLabel', 'Select Customer')}{' '}\n <span className=\"text-red-600\">*</span>\n </label>\n {customersLoading ? (\n <div className=\"flex items-center justify-center py-3 text-sm text-gray-500\">\n <div className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin mr-2\"></div>\n {t('workflows.checkoutDemo.customer.loading', 'Loading customers...')}\n </div>\n ) : customers.length === 0 ? (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3 text-sm text-yellow-800\">\n {t('workflows.checkoutDemo.customer.noneFound', 'No customers found. Please create a customer first.')}\n </div>\n ) : (\n <>\n <Select\n value={selectedCustomerId || undefined}\n onValueChange={(value) => setSelectedCustomerId(value ?? '')}\n >\n <SelectTrigger id=\"customer-select\">\n <SelectValue placeholder={t('workflows.checkoutDemo.customer.selectPlaceholder', '-- Select a customer --')} />\n </SelectTrigger>\n <SelectContent>\n {customers.map((customer: any) => (\n <SelectItem key={customer.id} value={customer.id}>\n {customer.display_name || customer.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div className=\"mt-2\">\n <label htmlFor=\"currency-select\" className=\"block text-xs font-medium text-gray-600 mb-1\">\n {t('workflows.checkoutDemo.currency.label', 'Currency')}\n </label>\n <Select\n value={selectedCurrency}\n onValueChange={(value) => setSelectedCurrency(value)}\n >\n <SelectTrigger id=\"currency-select\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"USD\">USD - US Dollar</SelectItem>\n <SelectItem value=\"EUR\">EUR - Euro</SelectItem>\n <SelectItem value=\"GBP\">GBP - British Pound</SelectItem>\n <SelectItem value=\"PLN\">PLN - Polish Zloty</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n )}\n </div>\n\n {/* Product Selection */}\n <div className=\"mb-6 pb-6 border-b border-gray-200\">\n <label htmlFor=\"product-select\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.product.addLabel', 'Add Products to Cart')}\n </label>\n {productsLoading ? (\n <div className=\"flex items-center justify-center py-3 text-sm text-gray-500\">\n <div className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin mr-2\"></div>\n {t('workflows.checkoutDemo.product.loading', 'Loading products...')}\n </div>\n ) : products.length === 0 ? (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3 text-sm text-yellow-800\">\n {t('workflows.checkoutDemo.product.noneFound', 'No products found. Please create products in the catalog first.')}\n </div>\n ) : (\n <div className=\"space-y-2\">\n <Select\n value={undefined}\n onValueChange={(value) => {\n const product = products.find((p: any) => p.id === value)\n if (product) {\n addToCart({\n id: product.id,\n title: product.title || product.display_name || 'Untitled Product',\n pricing: product.pricing || null,\n })\n }\n }}\n >\n <SelectTrigger id=\"product-select\">\n <SelectValue placeholder={t('workflows.checkoutDemo.product.selectPlaceholder', '-- Select a product to add --')} />\n </SelectTrigger>\n <SelectContent>\n {products.map((product: any) => {\n const basePrice = product.pricing?.unit_price_gross || product.pricing?.unit_price_net || 99.99\n const displayPrice = (basePrice * exchangeRate).toFixed(2)\n return (\n <SelectItem key={product.id} value={product.id}>\n {product.title || product.display_name || 'Untitled'} - {currencySymbol}{displayPrice}\n </SelectItem>\n )\n })}\n </SelectContent>\n </Select>\n {cart.length === 0 && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.checkoutDemo.cart.selectHint', 'Select products from the dropdown to add them to your cart')}\n </p>\n )}\n </div>\n )}\n </div>\n\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">\n {t('workflows.checkoutDemo.orderSummary.title', 'Order Summary')}\n </h2>\n\n {/* Cart Items */}\n {cart.length === 0 ? (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-6 text-center mb-6\">\n <p className=\"text-gray-500 text-sm\">\n {t('workflows.checkoutDemo.cart.empty.title', 'Your cart is empty')}\n </p>\n <p className=\"text-gray-400 text-xs mt-1\">\n {t('workflows.checkoutDemo.cart.empty.hint', 'Add products from the dropdown above')}\n </p>\n </div>\n ) : (\n <div className=\"space-y-4 mb-6\">\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between items-center gap-4 pb-3 border-b border-gray-100 last:border-0\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900 truncate\">{item.name}</p>\n <p className=\"text-xs text-gray-500\">{currencySymbol}{item.price.toFixed(2)} {t('workflows.checkoutDemo.cart.pricePerUnitSuffix', 'each')}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => updateQuantity(item.id, item.quantity - 1)}\n className=\"w-7 h-7 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-50 text-gray-600\"\n >\n -\n </button>\n <span className=\"w-8 text-center text-sm font-medium\">{item.quantity}</span>\n <button\n onClick={() => updateQuantity(item.id, item.quantity + 1)}\n className=\"w-7 h-7 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-50 text-gray-600\"\n >\n +\n </button>\n </div>\n <div className=\"flex items-center gap-2\">\n <p className=\"font-medium text-gray-900 min-w-[80px] text-right\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n <button\n onClick={() => removeFromCart(item.id)}\n className=\"w-7 h-7 flex items-center justify-center rounded hover:bg-red-50 text-red-600\"\n title={t('workflows.checkoutDemo.cart.removeItemTitle', 'Remove from cart')}\n >\n \u00D7\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Totals */}\n <div className=\"border-t border-gray-200 pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.subtotal', 'Subtotal')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{subtotal.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.tax', 'Tax (8%)')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.cart.shipping', 'Shipping')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{shipping.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between font-semibold text-lg pt-2 border-t border-gray-200\">\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.cart.total', 'Total')}</span>\n <span className=\"text-gray-900\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Validation Errors */}\n {validationErrors.length > 0 && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mt-6\">\n <h4 className=\"text-sm font-medium text-red-800 mb-2 flex items-center gap-2\">\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n {t('workflows.checkoutDemo.validation.errorTitle', 'Cannot start checkout')}\n </h4>\n <ul className=\"list-disc list-inside space-y-1\">\n {validationErrors.map((err, idx) => (\n <li key={idx} className=\"text-sm text-red-700\">\n {err.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Checkout Button */}\n <Button\n onClick={handleCheckout}\n disabled={loading || isValidating || result !== null || !selectedCustomerId || customers.length === 0 || validationErrors.length > 0}\n className=\"w-full mt-6\"\n size=\"lg\"\n >\n {isValidating\n ? t('workflows.checkoutDemo.checkout.validating', 'Validating...')\n : loading\n ? t('workflows.checkoutDemo.checkout.starting', 'Starting...')\n : result\n ? t('workflows.checkoutDemo.checkout.workflowStarted', 'Workflow Started')\n : !selectedCustomerId\n ? t('workflows.checkoutDemo.checkout.selectCustomerFirst', 'Select Customer to Continue')\n : validationErrors.length > 0\n ? t('workflows.checkoutDemo.checkout.fixValidationErrors', 'Fix Validation Errors')\n : t('workflows.checkoutDemo.checkout.start', 'Start Checkout Workflow')}\n </Button>\n {!selectedCustomerId && customers.length > 0 && validationErrors.length === 0 && (\n <p className=\"text-xs text-gray-500 text-center mt-2\">\n {t('workflows.checkoutDemo.checkout.pleaseSelectCustomer', 'Please select a customer to continue')}\n </p>\n )}\n </>\n )}\n\n {/* Cart Validation Step */}\n {result && (result.currentStepId === 'start' || result.currentStepId === 'cart_validation') && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.cartValidation.title', 'Validating Cart')}\n </h2>\n <div className=\"space-y-4\">\n {result.status === 'WAITING_FOR_ACTIVITIES' ? (\n <div className=\"bg-purple-50 border border-purple-200 rounded-lg p-4\">\n <p className=\"text-sm text-purple-800 font-medium\">{t('workflows.checkoutDemo.cartValidation.processingActivities', 'Processing background activities...')}</p>\n <p className=\"text-xs text-purple-700 mt-1\">{t('workflows.checkoutDemo.cartValidation.processingActivitiesHint', 'The workflow is waiting for async tasks to complete before proceeding.')}</p>\n </div>\n ) : (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800\">{t('workflows.checkoutDemo.cartValidation.inventoryCheck', 'Checking cart items and inventory availability...')}</p>\n </div>\n )}\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between items-center border-b border-gray-200 pb-2\">\n <div className=\"flex-1\">\n <p className=\"font-medium text-gray-900\">{item.name}</p>\n <p className=\"text-xs text-gray-500\">{t('workflows.checkoutDemo.cartValidation.qtyPrefix', 'Qty:')} {item.quantity}</p>\n </div>\n <span className=\"text-green-600 text-sm\">{t('workflows.checkoutDemo.cartValidation.available', '\u2713 Available')}</span>\n </div>\n ))}\n <div className=\"pt-2 border-t border-gray-200\">\n <p className=\"text-sm font-medium text-gray-900\">{t('workflows.checkoutDemo.cartValidation.totalPrefix', 'Total:')} {currencySymbol}{total.toFixed(2)}</p>\n </div>\n </div>\n </>\n )}\n\n {/* Customer Information Step - USER_TASK */}\n {result && result.currentStepId === 'customer_info' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-yellow-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.customerInfo.title', 'Customer Information Required')}\n </h2>\n <div className=\"space-y-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.promptTitle', 'Please provide your shipping information')}\n </p>\n <p className=\"text-xs text-yellow-700\">\n {t('workflows.checkoutDemo.customerInfo.promptHint', 'The workflow is paused waiting for customer details. Complete the form to continue checkout.')}\n </p>\n </div>\n\n {tasksError ? (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-sm text-red-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.errorLoadingTask', 'Error loading task')}\n </p>\n <p className=\"text-xs text-red-700 mb-3\">\n {tasksError instanceof Error ? tasksError.message : t('workflows.checkoutDemo.customerInfo.unknownError', 'Unknown error')}\n </p>\n <Button\n onClick={() => refetchTasks()}\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.customerInfo.retry', 'Retry')}\n </Button>\n </div>\n ) : tasksLoading ? (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex items-center justify-center py-4\">\n <div className=\"inline-block w-8 h-8 border-4 border-yellow-600 border-t-transparent rounded-full animate-spin\"></div>\n <p className=\"ml-3 text-sm text-gray-600\">{t('workflows.checkoutDemo.customerInfo.loading', 'Loading task...')}</p>\n </div>\n </div>\n ) : userTasks.length > 0 ? (\n <form onSubmit={handleTaskSubmit} className=\"bg-white border border-gray-200 rounded-lg p-4 space-y-4\">\n {taskError && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <p className=\"text-sm text-red-800\">{taskError}</p>\n </div>\n )}\n\n {userTasks[0].formSchema?.properties && (\n <div className=\"space-y-3\">\n {Object.keys(userTasks[0].formSchema.properties).map((fieldName) => {\n const required = userTasks[0].formSchema.required?.includes(fieldName) || false\n return renderFormField(fieldName, userTasks[0].formSchema.properties[fieldName], required)\n })}\n </div>\n )}\n\n <div className=\"pt-3 border-t border-gray-200\">\n <Button\n type=\"submit\"\n disabled={submittingTask}\n className=\"w-full bg-yellow-600 hover:bg-yellow-700 text-white font-medium\"\n >\n {submittingTask\n ? t('workflows.checkoutDemo.customerInfo.submitting', 'Submitting...')\n : t('workflows.checkoutDemo.customerInfo.submit', 'Complete & Continue Checkout')}\n </Button>\n </div>\n </form>\n ) : (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <p className=\"text-sm text-orange-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.customerInfo.noTaskTitle', 'No task found')}\n </p>\n <p className=\"text-xs text-orange-700 mb-3\">\n {t('workflows.checkoutDemo.customerInfo.noTaskHint', 'The user task may still be creating. This usually takes less than a second.')}\n </p>\n <Button\n onClick={() => refetchTasks()}\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.customerInfo.refresh', 'Refresh')}\n </Button>\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Payment Initiation Step */}\n {result && result.currentStepId === 'payment_initiation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.paymentInitiation.title', 'Initiating Payment')}\n </h2>\n <div className=\"space-y-6\">\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800 font-medium mb-2\">{t('workflows.checkoutDemo.paymentInitiation.detailsTitle', 'Payment Details')}</p>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.methodLabel', 'Method:')}</span>\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.paymentInitiation.methodValue', 'Credit Card ****4242')}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.amountLabel', 'Amount:')}</span>\n <span className=\"text-gray-900 font-semibold\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center justify-center py-8\">\n <div className=\"text-center\">\n <div className=\"inline-block w-16 h-16 border-4 border-blue-600 border-t-transparent rounded-full animate-spin mb-4\"></div>\n <p className=\"text-sm text-gray-600\">{t('workflows.checkoutDemo.paymentInitiation.sending', 'Sending payment request...')}</p>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Wait for Payment Confirmation Step - SIGNAL */}\n {result && result.currentStepId === 'wait_payment_confirmation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-yellow-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.waitPayment.title', 'Waiting for Payment Confirmation')}\n </h2>\n <div className=\"space-y-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-800 font-medium mb-2\">\n {t('workflows.checkoutDemo.waitPayment.heading', 'Awaiting Payment Provider Webhook')}\n </p>\n <p className=\"text-xs text-yellow-700 mb-3\">\n {t('workflows.checkoutDemo.waitPayment.description', 'The workflow is paused waiting for the payment provider to confirm the transaction via webhook. In production, this would be sent automatically by Stripe, PayPal, etc.')}\n </p>\n <div className=\"space-y-2 text-xs text-yellow-700\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.statusLabel', 'Status:')} <strong>{result.status}</strong></span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.signalNameLabel', 'Signal Name:')} <code className=\"bg-yellow-100 px-1 py-0.5 rounded\">payment_confirmed</code></span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-block w-1.5 h-1.5 bg-yellow-600 rounded-full\"></span>\n <span>{t('workflows.checkoutDemo.waitPayment.timeout', 'Timeout: 5 minutes')}</span>\n </div>\n </div>\n </div>\n\n {signalError && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-red-600 mt-0.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-red-800\">{t('workflows.checkoutDemo.waitPayment.signalErrorTitle', 'Signal Error')}</h3>\n <p className=\"text-sm text-red-700 mt-1 whitespace-pre-wrap\">{signalError}</p>\n <Button\n onClick={() => setSignalError(null)}\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-2\"\n >\n {t('workflows.checkoutDemo.waitPayment.dismiss', 'Dismiss')}\n </Button>\n </div>\n </div>\n </div>\n )}\n\n {result.status === 'PAUSED' && (\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <p className=\"text-sm font-medium text-gray-900 mb-2\">{t('workflows.checkoutDemo.waitPayment.demoTestingTitle', 'For Demo Testing:')}</p>\n <p className=\"text-xs text-gray-600 mb-3\">\n {t('workflows.checkoutDemo.waitPayment.demoTestingHint', 'Click the button below to simulate a payment provider webhook confirming the transaction.')}\n </p>\n <Button\n onClick={handleSendPaymentSignal}\n disabled={sendingSignal || result.status !== 'PAUSED'}\n className=\"w-full bg-yellow-600 hover:bg-yellow-700 text-white font-medium\"\n >\n {sendingSignal\n ? t('workflows.checkoutDemo.waitPayment.sendingSignal', 'Sending Signal...')\n : t('workflows.checkoutDemo.waitPayment.simulateWebhook', '\uD83D\uDD14 Simulate Payment Webhook')}\n </Button>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t('workflows.checkoutDemo.waitPayment.sendsPrefix', 'This sends a ')}<code className=\"bg-gray-100 px-1 py-0.5 rounded text-xs\">SIGNAL_RECEIVED</code>{t('workflows.checkoutDemo.waitPayment.sendsSuffix', ' event')}\n </p>\n </div>\n )}\n\n {result.status !== 'PAUSED' && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-sm text-blue-800\">\n <strong>{t('workflows.checkoutDemo.waitPayment.noteLabel', 'Note:')}</strong> {t('workflows.checkoutDemo.waitPayment.noteStatusPrefix', 'Workflow status is ')}<strong>{result.status}</strong>{t('workflows.checkoutDemo.waitPayment.noteStatusSuffix', '. The signal button will appear when the workflow is fully paused at this step.')}\n </p>\n </div>\n )}\n\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-xs text-blue-800\">\n <strong>{t('workflows.checkoutDemo.waitPayment.realWorldLabel', 'Real-world scenario:')}</strong> {t('workflows.checkoutDemo.waitPayment.realWorldPart1', 'Your payment provider (Stripe, PayPal) would send a webhook to your server endpoint (e.g., ')}<code className=\"bg-blue-100 px-1 py-0.5 rounded\">/api/webhooks/payments</code>{t('workflows.checkoutDemo.waitPayment.realWorldPart2', '), which would then call ')}<code className=\"bg-blue-100 px-1 py-0.5 rounded\">POST /api/workflows/instances/[id]/signal</code>{t('workflows.checkoutDemo.waitPayment.realWorldPart3', ' to resume the workflow.')}\n </p>\n </div>\n </div>\n </>\n )}\n\n {/* Order Confirmation Step */}\n {result && result.currentStepId === 'order_confirmation' && (\n <>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4 flex items-center gap-2\">\n <span className=\"inline-block w-2 h-2 bg-blue-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.orderConfirmation.title', 'Creating Order')}\n </h2>\n <div className=\"space-y-6\">\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <p className=\"text-sm text-green-800 font-medium mb-1\">{t('workflows.checkoutDemo.orderConfirmation.paymentSuccess', 'Payment Successful!')}</p>\n <p className=\"text-xs text-green-700\">{t('workflows.checkoutDemo.orderConfirmation.transactionIdPrefix', 'Transaction ID: ')}{result.instanceId.slice(0, 8)}...</p>\n </div>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-green-600\">\u2713</span>\n <span className=\"text-gray-700\">{t('workflows.checkoutDemo.orderConfirmation.creatingRecord', 'Creating order record')}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"inline-block w-4 h-4 border-2 border-blue-600 border-t-transparent rounded-full animate-spin\"></span>\n <span className=\"text-gray-700\">{t('workflows.checkoutDemo.orderConfirmation.sendingEmail', 'Sending confirmation email')}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-gray-400\">\u25CB</span>\n <span className=\"text-gray-500\">{t('workflows.checkoutDemo.orderConfirmation.updatingInventory', 'Updating inventory')}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Completed State */}\n {result && result.status === 'COMPLETED' && (\n <>\n <div className=\"text-center mb-6\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 bg-green-100 rounded-full mb-4\">\n <svg className=\"w-8 h-8 text-green-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-2\">{t('workflows.checkoutDemo.completed.title', 'Order Confirmed!')}</h2>\n <p className=\"text-sm text-gray-600\">{t('workflows.checkoutDemo.completed.orderNumberPrefix', 'Order #')}{result.instanceId.slice(0, 8).toUpperCase()}</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"bg-gray-50 rounded-lg p-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.orderDateLabel', 'Order Date:')}</span>\n <span className=\"text-gray-900\">{new Date().toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.paymentMethodLabel', 'Payment Method:')}</span>\n <span className=\"text-gray-900\">{t('workflows.checkoutDemo.completed.paymentMethodValue', 'Credit Card ****4242')}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">{t('workflows.checkoutDemo.completed.totalPaidLabel', 'Total Paid:')}</span>\n <span className=\"text-gray-900 font-semibold\">{currencySymbol}{total.toFixed(2)}</span>\n </div>\n </div>\n\n <div className=\"border-t border-gray-200 pt-4\">\n <p className=\"text-xs text-gray-600 mb-3\">{t('workflows.checkoutDemo.completed.orderItemsLabel', 'Order Items:')}</p>\n {demoCart.map((item) => (\n <div key={item.id} className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-gray-700\">{item.quantity}x {item.name}</span>\n <span className=\"text-gray-900\">{currencySymbol}{(item.price * item.quantity).toFixed(2)}</span>\n </div>\n ))}\n </div>\n\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <p className=\"text-xs text-blue-800\">\n {t('workflows.checkoutDemo.completed.emailSent', '\u2709\uFE0F A confirmation email has been sent to demo@example.com')}\n </p>\n </div>\n\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.completed.startNew', 'Start New Order')}\n </Button>\n </div>\n </>\n )}\n\n {/* Failed State */}\n {result && result.status === 'FAILED' && (\n <>\n <h2 className=\"text-xl font-semibold text-red-900 mb-4\">{t('workflows.checkoutDemo.failed.title', 'Order Failed')}</h2>\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-sm text-red-800\">\n {t('workflows.checkoutDemo.failed.message', 'Unfortunately, your order could not be processed. Please try again.')}\n </p>\n </div>\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n className=\"w-full mt-6\"\n >\n {t('workflows.checkoutDemo.failed.tryAgain', 'Try Again')}\n </Button>\n </>\n )}\n </div>\n\n {/* Workflow Status */}\n <div className=\"bg-white shadow rounded-lg p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">{t('workflows.checkoutDemo.progress.title', 'Workflow Progress')}</h2>\n\n {!result && !error && (\n <div className=\"text-center py-12\">\n <svg\n className=\"mx-auto h-12 w-12 text-gray-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n <p className=\"mt-4 text-gray-600\">\n {t('workflows.checkoutDemo.progress.prompt', 'Click \"Start Checkout Workflow\" to begin')}\n </p>\n </div>\n )}\n\n {loading && (\n <div className=\"text-center py-12\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">{t('workflows.checkoutDemo.progress.startingWorkflow', 'Starting workflow...')}</p>\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-red-600 mt-0.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">{t('workflows.checkoutDemo.progress.errorTitle', 'Error')}</h3>\n <p className=\"mt-1 text-sm text-red-700 whitespace-pre-wrap\">{error}</p>\n <Button\n onClick={() => setError(null)}\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n >\n {t('workflows.checkoutDemo.progress.errorDismiss', 'Dismiss')}\n </Button>\n </div>\n </div>\n </div>\n )}\n\n {result && (\n <div className=\"space-y-6\">\n {/* Status Badge */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.progress.statusLabel', 'Status')}\n </label>\n <span\n className={`inline-flex items-center px-3 py-1 rounded-full text-sm font-medium ${getStatusColor(\n result.status\n )}`}\n >\n {result.status}\n </span>\n </div>\n\n {/* Workflow Steps Visual */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-3\">\n {t('workflows.checkoutDemo.progress.stepsLabel', 'Steps')}\n </label>\n <div className=\"space-y-2\">\n {workflowSteps.map((step, index) => {\n const status = getStepStatus(step.stepId)\n const isLastStep = step.stepType === 'END'\n const isPaused = status === 'paused'\n\n return (\n <div\n key={step.stepId}\n className={`p-3 rounded-lg border-2 ${getStepColor(status)} transition-all duration-300 ${\n (status === 'current' || isPaused) && !isLastStep ? 'animate-pulse' : ''\n }`}\n >\n <div className=\"flex items-center\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-white flex items-center justify-center font-bold text-sm\">\n {status === 'completed' ? '\u2713' : isPaused ? '\u23F8' : index + 1}\n </div>\n <div className=\"ml-3 flex-1\">\n <p className=\"font-medium\">{step.stepName}</p>\n {step.description && (\n <p className=\"text-xs opacity-75 mt-0.5\">{step.description}</p>\n )}\n </div>\n {status === 'current' && !isLastStep && !isPaused && (\n <span className=\"ml-2 text-xs font-medium flex items-center gap-1\">\n <span className=\"inline-block w-2 h-2 bg-current rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.progress.processing', 'Processing...')}\n </span>\n )}\n {isPaused && (\n <span className=\"ml-2 text-xs font-medium flex items-center gap-1\">\n <span className=\"inline-block w-2 h-2 bg-current rounded-full\"></span>\n {t('workflows.checkoutDemo.progress.waitingForInput', 'Waiting for input')}\n </span>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n\n {/* User Task Required */}\n {result.status === 'PAUSED' && userTasks.length > 0 && (\n <div className=\"border-t border-gray-200 pt-4\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <div className=\"flex items-start mb-3\">\n <svg\n className=\"h-5 w-5 text-yellow-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-yellow-800\">\n {t('workflows.checkoutDemo.progress.userActionTitle', 'User Action Required')}\n </h3>\n <p className=\"text-sm text-yellow-700 mt-1\">\n {t('workflows.checkoutDemo.progress.userActionHint', 'This workflow is paused waiting for user input. Please complete the task below to continue.')}\n </p>\n </div>\n </div>\n\n {userTasks.map((task: any) => (\n <div key={task.id} className=\"mt-3 bg-white rounded-md p-3 border border-yellow-200\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <h4 className=\"text-sm font-semibold text-gray-900\">{task.taskName}</h4>\n {task.description && (\n <p className=\"text-sm text-gray-600 mt-1\">{task.description}</p>\n )}\n {task.dueDate && (\n <p className=\"text-xs text-gray-500 mt-2\">\n {t('workflows.checkoutDemo.progress.duePrefix', 'Due: ')}{new Date(task.dueDate).toLocaleString()}\n </p>\n )}\n </div>\n </div>\n <div className=\"mt-3\">\n <a\n href={`/backend/tasks/${task.id}`}\n className=\"inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-white bg-yellow-600 hover:bg-yellow-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-ring\"\n >\n {t('workflows.checkoutDemo.progress.completeTask', 'Complete Task \u2192')}\n </a>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Manual Progression */}\n {result.status === 'RUNNING' && currentStep && currentStep.stepType !== 'END' && (\n <div className=\"border-t border-gray-200 pt-4\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t('workflows.checkoutDemo.progress.manualProgression', 'Manual Progression')}\n </label>\n <p className=\"text-sm text-gray-600 mb-3\">\n {t('workflows.checkoutDemo.progress.manualProgressionHint', 'Manually advance to the next step for testing')}\n </p>\n <Button\n onClick={() => handleAdvance()}\n disabled={advancing || result.status !== 'RUNNING'}\n className=\"w-full\"\n >\n {advancing\n ? t('workflows.checkoutDemo.progress.advancing', 'Advancing...')\n : t('workflows.checkoutDemo.progress.advance', 'Advance to Next Step \u2192')}\n </Button>\n </div>\n )}\n\n {/* Completed State */}\n {result.status === 'COMPLETED' && (\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-green-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-green-800\">\n {t('workflows.checkoutDemo.progress.workflowCompleted', 'Workflow Completed!')}\n </h3>\n <p className=\"mt-1 text-sm text-green-700\">\n {t('workflows.checkoutDemo.progress.workflowCompletedHint', 'All steps executed successfully')}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"border-t border-gray-200 pt-4 space-y-3\">\n <Link\n href={`/backend/instances/${result.instanceId}`}\n className=\"block w-full text-center px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors\"\n >\n {t('workflows.checkoutDemo.progress.viewInAdmin', 'View in Admin')}\n </Link>\n\n <Button\n onClick={() => {\n setResult(null)\n setError(null)\n setCurrentStep(null)\n setAvailableSteps([])\n }}\n variant=\"outline\"\n className=\"w-full\"\n >\n {t('workflows.checkoutDemo.progress.startNewCheckout', 'Start New Checkout')}\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Workflow Events Timeline */}\n {result && events.length > 0 && (\n <div className=\"mt-8 bg-white shadow rounded-lg p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-3\">\n <h2 className=\"text-xl font-semibold text-gray-900\">\n {t('workflows.checkoutDemo.events.title', 'Workflow Events')}\n <span className=\"ml-2 text-sm font-normal text-gray-500\">\n ({events.length})\n </span>\n </h2>\n {(result.status === 'RUNNING' || result.status === 'WAITING_FOR_ACTIVITIES') && (\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-800\">\n <span className=\"inline-block w-2 h-2 bg-red-600 rounded-full animate-pulse\"></span>\n {t('workflows.checkoutDemo.events.liveBadge', 'Live')}\n </span>\n )}\n </div>\n <Link\n href={`/backend/events?workflowInstanceId=${result.instanceId}`}\n className=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {t('workflows.checkoutDemo.events.viewAllLink', 'View all events \u2192')}\n </Link>\n </div>\n\n <div className=\"space-y-3 max-h-96 overflow-y-auto\">\n {events.map((event: WorkflowEvent) => (\n <div\n key={event.id}\n className=\"border border-gray-200 rounded-lg p-3 hover:bg-gray-50 transition-colors\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <span\n className={`inline-flex items-center px-2 py-0.5 rounded text-xs font-medium ${getEventTypeBadgeClass(\n event.eventType\n )}`}\n >\n {formatEventType(event.eventType)}\n </span>\n <span className=\"text-xs text-gray-500\">\n {new Date(event.occurredAt).toLocaleTimeString()}\n </span>\n </div>\n {event.eventData && Object.keys(event.eventData).length > 0 && (\n <details className=\"mt-2\">\n <summary className=\"text-xs text-gray-600 cursor-pointer hover:text-gray-900\">\n {t('workflows.checkoutDemo.events.viewData', 'View event data')}\n </summary>\n <pre className=\"mt-2 text-xs bg-gray-100 p-2 rounded overflow-x-auto max-h-32 overflow-y-auto\">\n {JSON.stringify(event.eventData, null, 2)}\n </pre>\n </details>\n )}\n </div>\n <Link\n href={`/backend/events/${event.id}`}\n className=\"text-xs text-blue-600 hover:text-blue-800 hover:underline whitespace-nowrap\"\n >\n {t('workflows.checkoutDemo.events.detailsLink', 'Details')}\n </Link>\n </div>\n </div>\n ))}\n </div>\n\n {events.length > 10 && (\n <div className=\"mt-4 text-center\">\n <Link\n href={`/backend/events?workflowInstanceId=${result.instanceId}`}\n className=\"text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {t('workflows.checkoutDemo.events.viewAllPrefix', 'View all')} {events.length} {t('workflows.checkoutDemo.events.viewAllSuffix', 'events \u2192')}\n </Link>\n </div>\n )}\n </div>\n )}\n\n {/* Features Info */}\n <div className=\"mt-4 bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex items-start\">\n <svg\n className=\"h-5 w-5 text-blue-600 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">{t('workflows.checkoutDemo.features.title', 'Features')}</h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <ul className=\"list-disc list-inside space-y-1\">\n <li><strong>{t('workflows.checkoutDemo.features.signalFlow.label', 'Signal-Based Payment Flow:')}</strong>{t('workflows.checkoutDemo.features.signalFlow.body', ' Demonstrates real-world webhook pattern with WAIT_FOR_SIGNAL step type')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.interactiveUi.label', 'Interactive UI Changes:')}</strong>{t('workflows.checkoutDemo.features.interactiveUi.body', ' Left panel dynamically updates to show cart validation, payment initiation, webhook waiting, and order confirmation screens')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.realtimeProgress.label', 'Real-time Progress Tracking:')}</strong>{t('workflows.checkoutDemo.features.realtimeProgress.body', ' Watch the workflow progress through steps automatically with live status updates')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.webhookSimulation.label', 'Webhook Simulation:')}</strong>{t('workflows.checkoutDemo.features.webhookSimulation.body', ' Test signal-based workflow resumption with simulated payment provider webhook')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.liveEventTimeline.label', 'Live Event Timeline:')}</strong>{t('workflows.checkoutDemo.features.liveEventTimeline.body', ' New workflow events appear in real-time including SIGNAL_AWAITING and SIGNAL_RECEIVED')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.completeOrderFlow.label', 'Complete Order Flow:')}</strong>{t('workflows.checkoutDemo.features.completeOrderFlow.body', ' Experience the full checkout journey from cart to confirmation with async payment processing')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.userTaskIntegration.label', 'User Task Integration:')}</strong>{t('workflows.checkoutDemo.features.userTaskIntegration.body', ' Form-based user input with workflow pause/resume on task completion')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.businessRulesIntegration.label', 'Business Rules Integration:')}</strong>{t('workflows.checkoutDemo.features.businessRulesIntegration.body', ' Guard rules validate transitions with detailed failure information')}</li>\n <li><strong>{t('workflows.checkoutDemo.features.startPreconditions.label', 'START Step Pre-conditions:')}</strong>{t('workflows.checkoutDemo.features.startPreconditions.body', ' Validate business rules before workflow can start (e.g., cart not empty) with localized error messages')}</li>\n </ul>\n <p className=\"mt-2\">\n <Link href=\"/backend/definitions\" className=\"text-blue-800 hover:text-blue-900 underline\">\n {t('workflows.checkoutDemo.features.viewAllWorkflowsLink', 'View all workflows \u2192')}\n </Link>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["error"]
7
7
  }