@camunda/play 6.1.0 → 6.1.1-rc.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play.js","sources":["../src/modules/utils/getExtensionElements.ts","../src/modules/utils/getExtensionElement.ts","../src/modules/utils/getZeebeProperty.ts","../src/modules/utils/getExampleData.ts","../src/modules/utils/isValidJSONObject.ts","../src/modules/utils/completedJobHistory.ts","../src/modules/utils/pickPrefillData.ts","../src/modules/services/TrackingService.ts","../src/modules/services/orchestrationClusterAPIMapper.ts","../src/modules/utils/build-document-form-data.ts","../src/modules/services/ZeebePlayService.ts","../src/modules/utils/constants.ts","../src/modules/stores/cluster.ts","../src/modules/stores/pollingHandler.ts","../src/modules/utils/firstProcessCompletionHelper.ts","../src/modules/stores/utils/shouldUpdateData.ts","../src/modules/utils/isMultiInstance.ts","../src/modules/utils/getTaskDefinitionType.ts","../src/modules/utils/getExecutionListener.ts","../src/modules/utils/collectCamundaConnectors.ts","../src/modules/utils/flowNodes.ts","../src/modules/utils/browser-detector.ts","../src/modules/utils/parseDiagramXML.ts","../src/modules/stores/elementInstances.ts","../src/modules/utils/getFormDefinition.ts","../src/modules/utils/model-parser-util.ts","../src/modules/utils/properties-panel-util.ts","../src/modules/utils/web-modeler-diagram-parser/get-executable-process.ts","../src/modules/utils/web-modeler-diagram-parser/called-element.ts","../src/modules/utils/getFormDetails.ts","../src/modules/stores/playEnvironment/collectRelatedFiles.ts","../src/modules/stores/playEnvironment/deployment.ts","../src/modules/utils/generateFileName.ts","../src/modules/stores/playEnvironment/parseErrorString.ts","../src/modules/utils/removeBioc.ts","../src/modules/stores/playEnvironment/index.ts","../src/modules/stores/flowNodeSelection.ts","../src/modules/utils/pluralSuffix.ts","../src/modules/stores/modifications.ts","../src/modules/utils/isWithinEventSubprocess.ts","../src/modules/stores/diagram.ts","../src/modules/utils/retryWrapper.ts","../src/modules/stores/rerun/fetchUserTask.ts","../src/modules/stores/rerun/waitForActiveFlowNodeInstance.ts","../src/modules/stores/rerun/fetchIncidentKeyForFlowNodeInstance.ts","../src/modules/utils/userActionHistory.ts","../src/modules/utils/waitForNewInstance.ts","../src/modules/utils/isValidJSON.ts","../src/modules/stores/variables.ts","../src/modules/stores/utils/canActivateEventSubProcess.ts","../src/modules/stores/utils/isCandidateActive.ts","../src/modules/stores/statistics.ts","../src/modules/stores/messageSubscriptions.ts","../src/modules/stores/signals.ts","../src/modules/stores/rerun/waitForCandidate.ts","../src/modules/stores/rerun/index.ts","../src/modules/utils/translate-scenarios/translate-to-test-scenario-file.ts","../src/modules/utils/translate-scenarios/parse-test-scenario-file.ts","../src/modules/utils/scenarioHistory.ts","../src/modules/utils/get-message-from-error.ts","../src/modules/stores/scenarios.ts","../src/modules/stores/processInstance.ts","../src/modules/stores/incidents.ts","../src/modules/stores/userTasks.ts","../src/modules/stores/jobs.ts","../src/modules/stores/childInstances.ts","../src/modules/stores/sequenceFlows.ts","../src/modules/stores/instances.ts","../src/modules/stores/decisionInstances.ts","../src/modules/hooks/usePlayInitialization.ts","../src/modules/PlayContext.tsx","../src/modules/components/StateIcon/styled.tsx","../src/modules/components/StateIcon/index.tsx","../src/modules/primitives/Button/styled.tsx","../src/modules/primitives/Button/index.tsx","../src/modules/primitives/Loader/Loader.styled.tsx","../src/modules/primitives/Loader/Loader.tsx","../src/modules/primitives/IconButton/IconButton.styled.tsx","../src/modules/primitives/Input/Input.styled.tsx","../src/modules/primitives/Input/Input.tsx","../src/modules/primitives/Tooltip/Tooltip.styled.tsx","../src/modules/primitives/Tooltip/Tooltip.tsx","../src/modules/primitives/Dropdown/styled.tsx","../src/modules/primitives/Dropdown/ListItem.tsx","../src/modules/primitives/Dropdown/Dropdown.tsx","../src/Instance/InstanceHeader/styled.tsx","../src/Instance/InstanceHeader/ModificationInfoBanner/styled.tsx","../src/Instance/InstanceHeader/ModificationInfoBanner/index.tsx","../src/modules/stores/bottomBar.ts","../src/modules/components/TooltipWrapper/index.tsx","../src/Instance/InstanceHeader/SaveScenario/getButtonState/index.ts","../src/Instance/InstanceHeader/ScenarioCoverage/styled.tsx","../src/Instance/InstanceHeader/ScenarioCoverage/index.tsx","../src/Instance/InstanceHeader/SaveScenario/SaveSenarioModal/styled.tsx","../src/Instance/InstanceHeader/SaveScenario/SaveSenarioModal/index.tsx","../src/Instance/InstanceHeader/SaveScenario/index.tsx","../src/modules/components/DefinitionTooltip/index.tsx","../src/modules/components/DefinitionTooltip/Link.tsx","../src/Instance/InstanceHeader/UpdateScenario/getButtonState/index.ts","../src/Instance/InstanceHeader/UpdateScenario/UpdateScenarioModal.tsx","../src/Instance/InstanceHeader/UpdateScenario/index.tsx","../src/Instance/InstanceHeader/get-header-columns.ts","../src/Instance/InstanceHeader/Skeleton.tsx","../src/modules/components/ComposedModal/styled.tsx","../src/modules/components/ComposedModal/index.tsx","../src/modules/components/BroadcastSignal/BroadcastSignalModal/styled.tsx","../src/modules/loadMonaco.tsx","../src/modules/components/JSONEditor/styled.tsx","../src/modules/components/JSONEditor/index.tsx","../src/modules/components/SaveExampleData/styled.tsx","../src/modules/utils/setExampleData.ts","../src/modules/components/SaveExampleData/index.tsx","../src/modules/components/ExampleDataSourceInformation/styled.tsx","../src/modules/components/ExampleDataSourceInformation/index.tsx","../src/modules/hooks/usePrefilledData/index.ts","../src/modules/components/BroadcastSignal/BroadcastSignalModal/index.tsx","../src/modules/components/BroadcastSignal/use-broadcast-signal.ts","../src/modules/components/BroadcastSignal/index.tsx","../src/modules/components/PublishMessage/PublishMessageModal/styled.tsx","../src/modules/components/PublishMessage/PublishMessageModal/index.tsx","../src/modules/components/PublishMessage/use-publish-message.ts","../src/modules/components/PublishMessage/index.tsx","../src/modules/hooks/useStartInstance/index.tsx","../src/modules/components/JSONEditorModal/index.tsx","../src/modules/components/ExampleDataEditorModal/index.tsx","../src/modules/components/TaskFormModal/styled.tsx","../src/modules/components/TaskFormModal/get-cached-and-example-data.ts","../src/modules/components/TaskFormModal/prefill-form.ts","../src/modules/components/TaskFormModal/use-task-form.ts","../src/modules/utils/extract-file-path.ts","../src/modules/utils/inject-file-metadata-into-data.ts","../src/modules/components/TaskFormModal/index.tsx","../src/modules/hooks/useStartInstance/get-form-body.ts","../src/modules/components/StartInstance/index.tsx","../src/modules/utils/generateButtonLabel.ts","../src/Instance/InstanceHeader/RestartInstance/Button.tsx","../src/Instance/InstanceHeader/RestartInstance/index.tsx","../src/Instance/InstanceHeader/index.tsx","../src/BottomBar/styled.tsx","../src/Instance/Variables/styled.tsx","../src/modules/utils/beautifyJSON.ts","../src/Instance/Variables/AddVariableModal/styled.tsx","../src/Instance/Variables/AddVariableModal/index.tsx","../src/Instance/Variables/Skeleton/styled.tsx","../src/Instance/Variables/Skeleton/index.tsx","../src/Instance/Variables/index.tsx","../src/Instance/InstanceHistory/styled.tsx","../src/Instance/BPMNIcon.tsx","../src/Instance/InstanceHistory/VariableModifiedTag/styled.tsx","../src/Instance/InstanceHistory/VariableModifiedTag/index.tsx","../src/Instance/InstanceHistory/InstanceTreeNode.tsx","../src/Instance/InstanceHistory/Skeleton/styled.tsx","../src/Instance/InstanceHistory/Skeleton/index.tsx","../src/Instance/InstanceHistory/index.tsx","../src/modules/utils/sanitizeName.ts","../src/modules/utils/buildSlug.ts","../src/modules/icons/Dropdown.svg","../src/modules/icons/EditForm.svg","../src/modules/icons/Envelope.svg","../src/modules/icons/Success.svg","../src/modules/icons/Rewind.svg","../src/modules/icons/CamundaChampion.svg","../src/modules/icons/Plus.svg","../src/modules/icons/Minus.svg","../src/modules/icons/Target.svg","../src/modules/icons/Map.svg","../src/modules/icons/DisableFullscreen.svg","../src/modules/icons/EnableFullscreen.svg","../src/modules/icons/AISparkle.svg","../src/modules/icons/Signal.svg","../src/modules/icons/ModelerWarning.svg","../src/modules/icons/WebModelerWarning.svg","../src/Definition/ErrorPanel/styled.tsx","../src/modules/utils/findConnectorElementsWithSecrets.ts","../src/modules/stores/connectors.ts","../src/modules/stores/problems.ts","../src/Definition/ErrorPanel/index.tsx","../src/Definition/Scenarios/styled.tsx","../src/Definition/Scenarios/EmptyState/styled.tsx","../src/Definition/Scenarios/ScenarioTopBar/OverallCoverage/index.tsx","../src/Definition/Scenarios/ScenarioTopBar/styled.tsx","../src/Definition/Scenarios/ScenarioTopBar/TestScenarioFileName/styled.tsx","../src/modules/utils/generate-test-scenario-file-link.ts","../src/Definition/Scenarios/ScenarioTopBar/TestScenarioFileName/index.tsx","../src/Definition/Scenarios/ScenarioTopBar/index.tsx","../src/Definition/Scenarios/EmptyState/index.tsx","../src/Definition/Scenarios/Skeleton/styled.tsx","../src/Definition/Scenarios/Skeleton/index.tsx","../src/Definition/Scenarios/ErrorState/styled.tsx","../src/Definition/Scenarios/ErrorState/index.tsx","../src/Definition/Scenarios/index.tsx","../src/modules/utils/formatStartTime.ts","../src/Definition/Processes/styled.tsx","../src/Definition/Processes/index.tsx","../src/BottomBar/index.tsx","../src/StartModal/play-intro.mp4","../src/StartModal/styled.tsx","../src/StartModal/getLoadingState.ts","../src/StartModal/index.tsx","../src/modules/bpmn-js/styled.ts","../src/modules/utils/isNonSelectableFlowNode.ts","../src/modules/bpmn-js/BpmnJS.ts","../src/PlayMode/Diagram/styled.tsx","../src/modules/components/ActionButton/styled.tsx","../src/modules/components/ActionButton/index.tsx","../src/modules/components/StartButtons/styled.tsx","../src/modules/components/StartButtons/index.tsx","../src/modules/components/TriggerMessageSubscriptionButton/index.tsx","../src/modules/utils/overlayPositions.ts","../src/Definition/StartInstanceButton/index.tsx","../src/modules/utils/getCalledProcessId.ts","../src/Instance/ChildInstanceButton/get-child-instance.ts","../src/Instance/ChildInstanceButton/index.tsx","../src/Instance/CompletedOverlay/styled.tsx","../src/Instance/CompletedOverlay/index.tsx","../src/Instance/IncidentButton/index.tsx","../src/Instance/SequenceFlowHighlighter.tsx","../src/modules/utils/generateErrorThrownMessage.ts","../src/modules/utils/notifyActionManuallyCompleted.ts","../src/Instance/JobCompleteButton/index.tsx","../src/Instance/RewindButton/styled.tsx","../src/modules/stores/rerun/waitForProcessInstance.ts","../src/Instance/RewindButton/validateRewindSuccessful.ts","../src/modules/stores/rewind/index.ts","../src/Instance/RewindButton/index.tsx","../src/modules/components/BroadcastSignalButton/index.tsx","../src/Instance/ViewDecisionInstanceButton.tsx","../src/modules/utils/getDecisionId.ts","../src/Instance/TriggerErrorButton/index.tsx","../src/modules/hooks/useUserTaskCompletion/index.ts","../src/Instance/OpenTaskFormButton/get-form-body.ts","../src/Instance/OpenTaskFormButton/index.tsx","../src/Instance/UserTaskCompleteButton/index.tsx","../src/PlayMode/DiagramOverlay/index.tsx","../src/modules/componentHierarchy.ts","../src/PlayMode/Diagram/DiagramControls/styled.ts","../src/PlayMode/Diagram/DiagramControls/index.tsx","../src/modules/components/Popover/styled.tsx","../src/modules/components/Popover/index.tsx","../src/Instance/ModificationDropdown/styled.tsx","../src/Instance/ModificationDropdown/ModificationButton/styled.tsx","../src/modules/components/ButtonTooltipWrapper/index.tsx","../src/Instance/ModificationDropdown/ModificationButton/index.tsx","../src/Instance/ModificationDropdown/index.tsx","../src/Definition/styled.tsx","../src/Definition/ConnectorSecretOverlay.tsx","../src/Definition/ProblemOverlay.tsx","../src/Definition/FlowNodeHighlighter.tsx","../src/PlayMode/Diagram/ClusterUnavailableNotification/styled.tsx","../src/PlayMode/Diagram/ClusterUnavailableNotification/index.tsx","../src/PlayMode/Diagram/index.tsx","../src/Instance/ProcessInstanceSuccessfullyCompletedModal/styled.tsx","../src/Instance/ProcessInstanceSuccessfullyCompletedModal/index.tsx","../src/PlayMode/NotificationSystem/index.ts","../src/PlayMode/LoadingOverlay/styled.tsx","../src/PlayMode/LoadingOverlay/index.tsx","../src/PlayMode/LoadingOverlay/getDescription.ts","../src/Instance/InstanceHeader/MigrationFromLegacyScenarios/styled.tsx","../src/Instance/InstanceHeader/MigrationFromLegacyScenarios/ScenariosMigratedModal.tsx","../src/Instance/InstanceHeader/MigrationFromLegacyScenarios/use-migrate-scenarios.ts","../src/Instance/InstanceHeader/MigrationFromLegacyScenarios/index.tsx","../src/PlayMode/index.tsx"],"sourcesContent":["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {is, getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {ModdleElement} from 'camunda-bpmn-js/lib/util/ExtensionElementsUtil';\n\nconst getExtensionElements = (\n element: ElementLike,\n type: string,\n): Array<ModdleElement> => {\n const bo = getBusinessObject(element);\n\n let elements = [];\n\n const extensionElements = bo.get('extensionElements');\n\n if (extensionElements !== undefined) {\n const extensionValues = extensionElements.get('values');\n\n if (extensionValues !== undefined) {\n elements = extensionValues.filter((e: unknown) => is(e, type));\n }\n }\n\n return elements;\n};\n\nexport {getExtensionElements};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElements} from './getExtensionElements';\n\nconst getExtensionElement = (element: ElementLike, type: string) => {\n const elements = getExtensionElements(element, type);\n\n if (elements.length === 0) {\n return;\n }\n\n return elements[0];\n};\n\nexport {getExtensionElement};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\n\nconst getZeebeProperty = (element: ElementLike, name: string) => {\n const extensionElement = getExtensionElement(element, 'zeebe:Properties');\n\n const properties = extensionElement?.get('properties');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return properties?.find((p: any) => p.get('name') === name);\n};\n\nexport {getZeebeProperty};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getZeebeProperty} from './getZeebeProperty';\n\nexport const EXAMPLE_JSON_PROPERTY_NAME = 'camundaModeler:exampleOutputJson';\n\nconst getExampleData = (element: ElementLike): string | undefined => {\n const property = getZeebeProperty(element, EXAMPLE_JSON_PROPERTY_NAME);\n\n if (property) {\n return property.get('value');\n }\n return undefined;\n};\n\nexport {getExampleData};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const isValidJSONObject = (str?: string | null) => {\n if (!str) {\n return false;\n }\n try {\n return typeof JSON.parse(str) === 'object';\n } catch {\n return false;\n }\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nfunction generateHistoryKey({\n processId,\n elementId,\n}: {\n processId?: string;\n elementId: string;\n}) {\n return `jobCompletion ${processId} ${elementId}`;\n}\n\nexport function setJobCompletionHistory({\n processId,\n elementId,\n variables,\n}: {\n processId?: string;\n elementId: string;\n variables: string;\n}) {\n localStorage.setItem(generateHistoryKey({processId, elementId}), variables);\n}\n\nexport function getJobCompletionHistory({\n processId,\n elementId,\n}: {\n processId?: string;\n elementId: string;\n}) {\n return localStorage.getItem(generateHistoryKey({processId, elementId}));\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExampleData} from 'modules/utils/getExampleData';\nimport {isValidJSONObject} from 'modules/utils/isValidJSONObject';\nimport {PrefillSource} from 'modules/types';\nimport {getJobCompletionHistory} from './completedJobHistory';\n\nfunction pickPrefillData({\n element,\n useCache,\n processId,\n}: {\n element: ElementLike;\n useCache: boolean;\n processId?: string;\n}): {prefillData: string; prefillSource: PrefillSource; processId?: string} {\n const exampleData = getExampleData(element);\n\n const rawCachedData = getJobCompletionHistory({\n processId,\n elementId: element.id,\n });\n\n const cachedData = isValidJSONObject(rawCachedData) ? rawCachedData : null;\n\n const hasCachedData = cachedData && useCache;\n const hasExampleData = exampleData && !hasCachedData;\n\n if (hasCachedData) {\n return {\n prefillData: cachedData,\n prefillSource: cachedData === exampleData ? 'bpmn' : 'cache',\n };\n }\n\n if (hasExampleData) {\n return {\n prefillData: exampleData,\n prefillSource: 'bpmn',\n };\n }\n\n return {prefillData: '', prefillSource: 'none'};\n}\n\nexport {pickPrefillData};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Dict} from 'mixpanel-browser';\nimport {Incident} from 'modules/types';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\n\ntype MixpanelTrack = ((event: string, data?: Dict) => void) | undefined;\n\nclass TrackingService {\n mixpanelTrack: MixpanelTrack = undefined;\n processId?: string = undefined;\n diagramId?: string = undefined;\n\n init = ({\n mixpanelTrack,\n processId,\n diagramId,\n }: {\n mixpanelTrack: MixpanelTrack;\n processId?: string;\n diagramId?: string;\n }) => {\n this.mixpanelTrack = mixpanelTrack;\n this.processId = processId;\n this.diagramId = diagramId;\n };\n\n trackDeployment({\n success,\n errorMessage,\n fileId,\n fileType,\n }: {\n success: boolean;\n errorMessage?: string;\n fileId?: string;\n fileType: string;\n }) {\n return this.mixpanelTrack?.('modeler:deploy:confirm', {\n success,\n fileId,\n fileType: fileType.toLowerCase(),\n errorMessage,\n from: 'play',\n });\n }\n\n trackDiagramErrors({\n fileId,\n fileType,\n count,\n }: {\n fileId?: string;\n fileType: string;\n count: number;\n }) {\n this.mixpanelTrack?.('modeler:diagramErrors:count', {\n from: 'play',\n type: 'DEPLOY',\n count,\n fileId,\n fileType: fileType.toUpperCase(),\n });\n }\n\n trackResolveIncident(process_id?: string) {\n return this.mixpanelTrack?.('single-operation', {\n operationType: 'RESOLVE_INCIDENT',\n process_id,\n from: 'play',\n });\n }\n\n trackIncident(incident: Incident, process_id?: string) {\n const incidentTrackingState = JSON.parse(\n localStorage.getItem('play-incidentTracking') || '{}',\n );\n\n if (incidentTrackingState[incident.key]) return;\n\n this.mixpanelTrack?.('incident:trigger', {\n error: incident.message,\n process_id,\n from: 'play',\n });\n\n incidentTrackingState[incident.key] = true;\n\n localStorage.setItem(\n 'play-incidentTracking',\n JSON.stringify(incidentTrackingState),\n );\n }\n\n trackRewindedInstanceStart() {\n return this.mixpanelTrack?.('bpmnelement:completed', {\n elementType: 'START_EVENT',\n from: 'play',\n is_from_rewind: true,\n fileId: this.diagramId,\n processId: this.processId,\n });\n }\n\n trackAPIError(path: string, status_code: number) {\n return this.mixpanelTrack?.('apiError', {\n from: 'play',\n path,\n status_code,\n });\n }\n\n trackIncidentAIModalOpened({\n areAIFeaturesEnabled,\n }: {\n areAIFeaturesEnabled: boolean;\n }) {\n return this.mixpanelTrack?.('docsAI:open', {\n enabled: areAIFeaturesEnabled,\n from: 'play',\n });\n }\n\n trackUserCompletesElement(element: ElementLike, data: string | undefined) {\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: this.processId,\n });\n const exampleDataUsed = data === prefillData ? prefillSource : 'manual';\n const elementType = getBusinessObject(element).$type;\n\n this.mixpanelTrack?.('bpmnelement:completed', {\n fileId: this.diagramId,\n processId: this.processId,\n elementType,\n exampleDataUsed,\n from: 'play',\n });\n }\n\n trackDiagramUpdated() {\n const payload = {\n fileId: this.diagramId!,\n from: 'play',\n fileType: 'bpmn',\n };\n\n return this.mixpanelTrack?.('modeler:edit:file', payload);\n }\n\n openOperate(url: string) {\n return this.mixpanelTrack?.('operate:open', {\n from: 'play',\n url,\n });\n }\n\n saveScenario({\n newTotalCoverage,\n coverageIncrease,\n }: {\n newTotalCoverage: string;\n coverageIncrease: string;\n }) {\n return this.mixpanelTrack?.('save-scenario', {\n from: 'play',\n newTotalCoverage,\n coverageIncrease,\n });\n }\n\n runScenarios(count: number) {\n return this.mixpanelTrack?.('run-scenarios', {\n from: 'play',\n count,\n });\n }\n\n applyModifictation(eventName: 'add-token' | 'cancel-token' | 'move-token') {\n return this.mixpanelTrack?.(eventName, {\n from: 'play',\n });\n }\n}\n\nexport default new TrackingService();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {DeploymentSuccessResponse} from 'modules/types';\n\nexport type C8DeploymentSuccessResponse = {\n deployments: Array<{\n processDefinition: {\n processDefinitionKey: number;\n processDefinitionVersion: number;\n };\n }>;\n};\n\nexport const mapDeployResourcesResponse = (\n response: C8DeploymentSuccessResponse,\n): DeploymentSuccessResponse => {\n return {\n deployments: response?.deployments?.map((item) => ({\n process: {\n processDefinitionKey: item?.processDefinition?.processDefinitionKey,\n version: item?.processDefinition?.processDefinitionVersion,\n },\n })),\n };\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {DocumentMetadata} from 'modules/types';\n\nexport const PICKER_KEY = 'pickerKey';\n\nexport function buildDocumentFormData(key: string, file: File): FormData {\n const metadata = {\n customProperties: {\n [PICKER_KEY]: key,\n },\n contentType: file.type ?? 'text/plain',\n fileName: file.name,\n } satisfies DocumentMetadata;\n\n const formData = new FormData();\n formData.append('files', file);\n formData.append('metadata', JSON.stringify(metadata));\n\n return formData;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport {\n ChildProcessInstanceDto,\n Incident,\n Job,\n MessageSubscription,\n ProcessInstanceDetail,\n UserTaskNode,\n FlowNodeInstanceDto,\n VariableDto,\n DeploymentSuccessResponse,\n DeploymentFailResponse,\n ActivateInstruction,\n TerminateInstruction,\n AuthConfig,\n Statistic,\n DecisionInstanceDto,\n ClusterDto,\n DocumentReference,\n} from 'modules/types';\nimport trackingService from './TrackingService';\nimport {isValidJSONObject} from 'modules/utils/isValidJSONObject';\nimport {\n C8DeploymentSuccessResponse,\n mapDeployResourcesResponse,\n} from './orchestrationClusterAPIMapper';\nimport {buildDocumentFormData} from 'modules/utils/build-document-form-data';\n\nclass ZeebePlayService {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handlePostRequest: any = undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleGetRequest: any = undefined;\n authConfig?: AuthConfig = undefined;\n shouldUseOrchestrationClusterAPI?: boolean = false;\n\n init = ({\n authConfig,\n handlePostRequest,\n handleGetRequest,\n shouldUseOrchestrationClusterAPI,\n }: {\n authConfig: AuthConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handlePostRequest: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleGetRequest: any;\n shouldUseOrchestrationClusterAPI?: boolean;\n }) => {\n this.authConfig = authConfig;\n this.handlePostRequest = handlePostRequest;\n this.handleGetRequest = handleGetRequest;\n this.shouldUseOrchestrationClusterAPI = shouldUseOrchestrationClusterAPI;\n };\n\n getPayloadOptions() {\n return {\n authType: this.authConfig?.type,\n ...this.authConfig?.config,\n shouldUseOrchestrationClusterAPI: this.shouldUseOrchestrationClusterAPI,\n };\n }\n\n async postWithErrorHandling<T>(\n path: string,\n body: object,\n contentType?: string,\n ): Promise<{success: boolean; response: T; status: number}> {\n try {\n let requestBody;\n\n if (body instanceof FormData) {\n requestBody = body;\n requestBody.append('config', JSON.stringify(this.getPayloadOptions()));\n contentType = contentType ?? 'multipart/form-data';\n } else {\n requestBody = {\n payload: {\n ...body,\n ...this.getPayloadOptions(),\n },\n };\n }\n\n const response = await this.handlePostRequest(\n path,\n requestBody,\n contentType,\n );\n return {success: true, response, status: response.status};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (response: any) {\n trackingService.trackAPIError(path, response.status);\n return {success: false, response, status: response.status};\n }\n }\n\n async getWithErrorHandling<T>(\n path: string,\n ): Promise<{success: boolean; response: T}> {\n try {\n const response = await this.handleGetRequest(path);\n return {success: true, response};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (response: any) {\n trackingService.trackAPIError(path, response.status);\n return {success: false, response};\n }\n }\n\n async getConnectorSecrets() {\n if (this.authConfig?.type === 'sm') {\n return {success: true, secrets: []};\n }\n\n const {success, response} = await this.getWithErrorHandling<object>(\n `/cloud/console/organizations/${this.authConfig?.config.organizationId}/clusters/${this.authConfig?.config.clusterId}/connectorSecrets`,\n );\n const secrets = Object.entries(response).map(\n ([secretName, secretValue]) => {\n return {name: secretName, value: secretValue};\n },\n );\n return {success, secrets};\n }\n\n async getClusterDetails() {\n if (this.authConfig === undefined || this.authConfig.type === 'sm') {\n return {success: false};\n }\n\n const {success, response} = await this.getWithErrorHandling<ClusterDto[]>(\n `/cloud/console/organizations/${this.authConfig.config.organizationId}/clusters?useCache=false`,\n );\n\n const clusterId = this.authConfig.config.clusterId;\n\n if (!success) {\n return {success: false};\n }\n\n return {\n success: true,\n cluster: response.find(({uuid}) => uuid === clusterId),\n };\n }\n\n async setConnectorSecret({name, value}: {name: string; value: string}) {\n // Method will be obsolete since a workaround will be used https://github.com/camunda/play/issues/221\n return {success: false};\n }\n\n async terminateProcessInstance(processInstanceKey?: number) {\n // TODO\n return {success: false};\n }\n\n async deployResources(resources: Array<{name: string; content: string}>) {\n if (this.shouldUseOrchestrationClusterAPI) {\n return this.deployResourcesC8(resources);\n }\n\n const {response, success} = await this.postWithErrorHandling<\n DeploymentSuccessResponse | DeploymentFailResponse\n >('/play/deploy-resources', {resources});\n\n return {\n response,\n success,\n };\n }\n\n async deployResourcesC8(resources: Array<{name: string; content: string}>) {\n const {response, success} = await this.postWithErrorHandling<\n C8DeploymentSuccessResponse | DeploymentFailResponse\n >('/play/deploy-resources', {resources});\n\n return {\n response: success\n ? mapDeployResourcesResponse(response as C8DeploymentSuccessResponse)\n : response,\n success,\n };\n }\n\n async startInstance({\n bpmnProcessId,\n variables,\n }: {\n bpmnProcessId?: string;\n variables: string;\n }) {\n const {success, response, status} = await this.postWithErrorHandling<{\n processInstanceKey?: number;\n }>('/play/start-instance', {\n bpmnProcessId,\n variables: JSON.parse(variables),\n });\n\n return {\n instanceId: response.processInstanceKey,\n success,\n status,\n };\n }\n\n async fetchJobs({instanceKey}: {instanceKey?: number}) {\n // TODO: https://github.com/camunda/play/issues/225\n return {jobs: [] as Job[], success: false};\n }\n\n async fetchFlowNodeInstances(processInstanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<{\n items: Array<FlowNodeInstanceDto>;\n total: number;\n }>('/play/get-flownode-instances', {\n processInstanceKey,\n });\n\n return {\n flowNodeInstances: response.items,\n success,\n };\n }\n\n async fetchChildInstances({instanceKey}: {instanceKey?: number}) {\n const {response, success} = await this.postWithErrorHandling<{\n items: Array<ChildProcessInstanceDto>;\n }>('/play/get-child-instances', {\n parentProcessInstanceKey: instanceKey,\n });\n\n return {\n childInstances: response.items,\n success,\n };\n }\n\n async fetchInstances(processDefinitionKey?: number) {\n const {response, success} = await this.postWithErrorHandling<\n {items: Array<ProcessInstanceDetail>; total: number} | undefined\n >('/play/get-process-instances', {\n processDefinitionKey,\n });\n\n return {\n processInstances: response?.items ?? [],\n totalCount: response?.total ?? 0,\n success,\n };\n }\n\n async fetchMessageSubscriptions({instanceKey}: {instanceKey?: number}) {\n //TODO https://github.com/camunda/play/issues/229\n\n return {\n messageSubscriptions: [] as MessageSubscription[],\n success: false,\n };\n }\n\n async fetchProcessMessageSubscriptions() {\n // TODO https://github.com/camunda/play/issues/230\n\n return {\n messageSubscriptions: [] as MessageSubscription[],\n success: false,\n };\n }\n\n async fetchUserTasks(instanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<\n Array<UserTaskNode> | undefined\n >('/play/get-user-tasks', {\n instanceId: instanceKey,\n });\n\n return {\n userTasks: success ? response : [],\n success,\n };\n }\n\n async fetchUserTaskForm(formId: string, processDefinitionKey: string) {\n const {response, success} = await this.postWithErrorHandling<{\n schema: string;\n }>('/play/get-user-task-form', {\n formId,\n processDefinitionKey,\n });\n\n return {\n schema: response.schema,\n success,\n };\n }\n\n async completeJob({\n processInstanceKey,\n taskDefinitionType,\n variables,\n elementId,\n }: {\n processInstanceKey?: number;\n taskDefinitionType?: string;\n variables: string;\n elementId: string;\n }) {\n const {success} = await this.postWithErrorHandling<{\n schema: string;\n }>('/play/complete-job', {\n processInstanceKey,\n taskDefinitionType,\n variables,\n elementId,\n });\n\n return {\n success,\n };\n }\n\n async completeUserTask({\n taskId,\n variables,\n isZeebeUserTask,\n }: {\n taskId?: string;\n variables: string;\n isZeebeUserTask: boolean;\n }) {\n const variablesPayload = isValidJSONObject(variables)\n ? JSON.parse(variables)\n : {};\n const {success, status} = await this.postWithErrorHandling(\n isZeebeUserTask\n ? `/play/complete-zeebe-user-task`\n : `/play/complete-user-task`,\n {\n variables: variablesPayload,\n taskId,\n },\n );\n\n return {success, status};\n }\n\n async throwError({\n taskDefinitionType,\n processInstanceKey,\n errorCode,\n elementId,\n }: {\n taskDefinitionType?: string;\n processInstanceKey?: number;\n errorCode: string;\n elementId: string;\n }) {\n const {success} = await this.postWithErrorHandling('/play/throw-error', {\n errorCode,\n errorMessage: '',\n processInstanceKey,\n taskDefinitionType,\n elementId,\n });\n\n return {success};\n }\n\n async publishMessage({\n messageName,\n correlationKey,\n variables,\n timeToLive,\n messageId,\n }: {\n messageName: string;\n correlationKey?: string;\n variables?: string;\n timeToLive?: string;\n messageId?: string;\n }) {\n const {success, status} = await this.postWithErrorHandling(\n '/play/publish-message',\n {\n messageName,\n correlationKey: correlationKey || undefined,\n variables: isValidJSONObject(variables) ? JSON.parse(variables!) : {},\n timeToLive: timeToLive || undefined,\n messageId: messageId || undefined,\n },\n );\n\n return {success, status};\n }\n\n async fetchVariablesByUserTask(taskId: string) {\n const {response, success} = await this.postWithErrorHandling<\n Array<{name: string; value: string}>\n >('/play/get-user-task-variables', {\n taskId,\n });\n\n return {\n variables: success ? response : [],\n success,\n };\n }\n\n async fetchProcessXml(processDefinitionKey: number) {\n const {response, success} = await this.postWithErrorHandling<string>(\n '/play/get-process-xml',\n {\n processDefinitionKey,\n },\n );\n\n return {\n response,\n success,\n };\n }\n\n async fetchInstanceDetails(instanceKey?: number) {\n const {response, success, status} =\n await this.postWithErrorHandling<ProcessInstanceDetail>(\n '/play/get-process-instance',\n {\n instanceId: instanceKey,\n },\n );\n\n return {\n statusCode: status,\n processInstance: response,\n success,\n };\n }\n\n async fetchIncidents(instanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<{\n items: Array<Incident>;\n }>('/play/get-incidents', {\n processInstanceKey: instanceKey,\n });\n\n return {\n incidents: response.items,\n success,\n };\n }\n\n async fetchVariables({instanceKey}: {instanceKey?: number}) {\n const {response, success} = await this.postWithErrorHandling<{\n items: Array<VariableDto>;\n }>('/play/get-variables', {\n processInstanceKey: instanceKey,\n });\n\n return {\n variables: response.items,\n success,\n };\n }\n\n async fetchVariable(variableKey?: number) {\n const {response, success} = await this.postWithErrorHandling<\n VariableDto | undefined\n >('/play/get-variable', {\n variableKey,\n });\n\n return {\n variable: response,\n success,\n };\n }\n\n async setVariables({\n elementInstanceKey,\n variablesString,\n }: {\n elementInstanceKey: number;\n variablesString: string;\n }) {\n const {success, status} = await this.postWithErrorHandling(\n '/play/set-variables',\n {\n elementInstanceKey,\n variables: JSON.parse(variablesString),\n },\n );\n\n return {success, status};\n }\n\n async updateRetries({jobKey, retries}: {jobKey: number; retries: number}) {\n const {success} = await this.postWithErrorHandling(\n '/play/update-job-retries',\n {\n jobKey,\n retries,\n },\n );\n return {success};\n }\n\n async resolveIncident(incidentKey: number) {\n const {success, status} = await this.postWithErrorHandling(\n '/play/resolve-incident',\n {\n incidentKey,\n },\n );\n return {success, status};\n }\n\n async fetchSequenceFlows(processInstanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<Array<string>>(\n '/play/get-sequence-flows',\n {\n processInstanceKey,\n },\n );\n\n return {\n sequenceFlows: Array.isArray(response) ? response : [],\n success,\n };\n }\n\n async fetchStatistics(processInstanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<\n Array<Statistic>\n >('/play/get-process-instance-statistics', {\n processInstanceKey,\n });\n\n return {\n statistics: Array.isArray(response) ? response : [],\n success,\n };\n }\n\n async fetchDecisionInstances(processInstanceKey?: number) {\n const {response, success} = await this.postWithErrorHandling<{\n items: Array<DecisionInstanceDto>;\n total: number;\n }>('/play/get-decision-instances', {\n processInstanceKey,\n });\n\n return {\n items: response.items,\n success,\n };\n }\n\n async modify({\n processInstanceKey,\n activateInstructions,\n terminateInstructions,\n }: {\n processInstanceKey?: number;\n activateInstructions?: ActivateInstruction[];\n terminateInstructions?: TerminateInstruction[];\n }) {\n const {success, status} = await this.postWithErrorHandling('/play/modify', {\n processInstanceKey,\n activateInstructions,\n terminateInstructions,\n });\n\n return {\n success,\n status,\n };\n }\n\n async broadcastSignal({\n signalName,\n variables = '{}',\n }: {\n signalName?: string;\n variables?: string;\n }) {\n const variablesPayload = isValidJSONObject(variables)\n ? JSON.parse(variables)\n : {};\n\n const {success} = await this.postWithErrorHandling(\n '/play/broadcast-signal',\n {\n signalName,\n variables: variablesPayload,\n },\n );\n\n return {\n success,\n };\n }\n\n async uploadDocuments({files}: {files: Map<string, File[]>}): Promise<{\n success: boolean;\n response: DocumentReference[];\n status: number;\n }> {\n //TODO: replace with uploadDocuments API when it's fixed. https://github.com/camunda/play/issues/1345\n const results = await Promise.all(\n Array.from(files.entries()).flatMap(([key, files]) => {\n return files.map((file) => {\n const formData = buildDocumentFormData(key, file);\n return this.postWithErrorHandling<DocumentReference>(\n '/play/upload-document',\n formData,\n );\n });\n }),\n );\n\n return {\n success: results.every((result) => result.success),\n response: results.flatMap((result) => result.response),\n status: Math.max(...results.map((result) => result.status), 200),\n };\n }\n}\n\nexport default new ZeebePlayService();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const AUTHORIZATION_ERROR_CODE = 403;\nexport const REQUEST_FAILURE = {\n title: 'Unable to process request',\n subtitle: 'Please try again',\n};\n\n// Shared between error notification and error state in scenarios panel for consistency\nexport const SCENARIOS_LOAD_FAILURE = 'Failed to load scenarios';\n\nexport const MISSING_PERMISSIONS = 'Missing permissions';\nexport const MISSING_PERMISSION_ACTION_PROPS = {\n action: {\n label: 'Learn more about authorizations',\n onClick: () => {\n window.open(\n 'https://docs.camunda.io/docs/next/components/modeler/web-modeler/play-your-process/#authorizations',\n '_blank',\n );\n },\n },\n};\n\nexport const ERROR_REASON_MAINTENANCE = 'MAINTENANCE_MODE';\nexport const HTTP_DEBOUNCE_DELAY = 1500;\nexport const ASSET_REFRESH_DELAY = 5000;\n\nexport const STATUS_ASSET_REFRESH = 230;\nexport const STATUS_UNAUTHORIZED = 401;\n\nexport const VARCHAR_MAX = 255;\nexport const BOTTOM_PANEL_HEADER_HEIGHT = 'var(--cds-spacing-08)';\nexport const STATUS_SERVICE_UNAVAILABLE = 503;\nexport const NEW_PROCESS_INSTANCE = 'Instance started';\nexport const ELEMENTS_SUPPORT_REWIND = [\n 'bpmn:ServiceTask',\n 'bpmn:UserTask',\n 'bpmn:ReceiveTask',\n 'bpmn:IntermediateCatchEvent',\n 'bpmn:SendTask',\n];\n\nexport const ELEMENTS_WITH_JOB_IMPLEMENTATION = [\n 'bpmn:ServiceTask',\n 'bpmn:SendTask',\n 'bpmn:ScriptTask',\n 'bpmn:BusinessRuleTask',\n 'bpmn:IntermediateThrowEvent',\n 'bpmn:EndEvent',\n];\n\nexport const JSON_OBJECT_PLACEHOLDER = `{\n \"variableName\": \"variableValue\"\n}`;\n\nexport const POLLING_INTERVAL = 1000;\nexport const UPDATE_TIMEOUT = 10000;\nexport const BPMN_DIAGRAM_DEFAULT_NAME = 'New BPMN Diagram';\nexport const ARROW_SIZE = 18;\nexport const DEFAULT_BINDING_TYPE = 'latest';\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n action,\n autorun,\n computed,\n IReactionDisposer,\n makeObservable,\n observable,\n} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {ClusterDto} from 'modules/types';\n\ntype State = {\n status: 'initial' | 'fetched';\n cluster?: ClusterDto;\n};\n\nconst DEFAULT_STATE: State = {\n status: 'initial',\n cluster: undefined,\n};\n\nconst POLLING_INTERVAL = 3000;\n\nclass Cluster {\n state: State = {...DEFAULT_STATE};\n organizationId?: string = undefined;\n clusterId?: string = undefined;\n pollingDisposer: null | IReactionDisposer = null;\n intervalId: ReturnType<typeof setInterval> | null = null;\n isPollRequestRunning: boolean = false;\n\n constructor() {\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n isClusterHealthy: computed,\n reset: action,\n });\n }\n\n init() {\n this.state = {...DEFAULT_STATE};\n\n this.pollingDisposer = autorun(() => {\n if (this.intervalId === null) {\n this.startPolling();\n }\n });\n }\n\n startPolling() {\n this.intervalId = setInterval(() => {\n this.poll();\n }, POLLING_INTERVAL);\n }\n\n async poll() {\n if (!this.isPollRequestRunning) {\n this.isPollRequestRunning = true;\n\n const {success, cluster} = await zeebePlayService.getClusterDetails();\n\n if (success) {\n this.handleSuccess(cluster);\n }\n\n this.isPollRequestRunning = false;\n }\n }\n\n handleSuccess = (cluster?: ClusterDto) => {\n this.state.status = 'fetched';\n this.state.cluster = cluster;\n };\n\n stopPolling() {\n const {intervalId} = this;\n\n if (intervalId !== null) {\n clearInterval(intervalId);\n this.intervalId = null;\n }\n }\n\n get isClusterHealthy() {\n const {cluster, status} = this.state;\n\n if (status === 'initial') {\n // Let's assume cluster is healthy until we actually retrieve the details. Otherwise, we might falsely show a \"cluster is unhealthy\" warning.\n return true;\n }\n\n if (cluster === undefined) {\n return false;\n }\n\n const {operate, tasklist, zeebe} = cluster.status;\n\n return (\n operate === 'Healthy' && tasklist === 'Healthy' && zeebe === 'Healthy'\n );\n }\n\n reset() {\n this.state = {...DEFAULT_STATE};\n this.pollingDisposer?.();\n this.stopPolling();\n }\n}\n\nexport const clusterStore = new Cluster();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {IReactionDisposer, action, autorun, makeObservable, when} from 'mobx';\nimport {POLLING_INTERVAL} from 'modules/utils/constants';\nimport {clusterStore} from './cluster';\n\nabstract class PollingHandler {\n boundCallback?: () => void;\n intervalId: ReturnType<typeof setInterval> | null = null;\n isPollRequestRunning: boolean = false;\n pollingDisposer: null | IReactionDisposer = null;\n fetchDataDisposer: null | IReactionDisposer = null;\n\n constructor() {\n makeObservable(this, {\n reset: action.bound,\n });\n }\n\n init() {\n this.fetchDataDisposer = when(this.initialDataFetchCondition, () => {\n this.fetchData();\n });\n\n this.pollingDisposer = autorun(() => {\n if (this.pollDataCondition() && clusterStore.isClusterHealthy) {\n if (this.intervalId === null) {\n this.startPolling(this.pollData);\n }\n } else {\n this.stopPolling();\n }\n });\n }\n\n abstract initialDataFetchCondition: () => boolean;\n abstract pollDataCondition: () => boolean;\n abstract fetchData: () => void;\n abstract pollData: () => void;\n abstract shouldRefreshDataAfterPollingStops: boolean;\n\n startPolling(callback: () => void) {\n this.intervalId = setInterval(() => {\n this.boundCallback = callback.bind(this);\n\n this.poll();\n }, POLLING_INTERVAL);\n }\n\n stopPolling() {\n const {intervalId} = this;\n\n if (intervalId !== null) {\n clearInterval(intervalId);\n this.intervalId = null;\n\n if (this.shouldRefreshDataAfterPollingStops) {\n setTimeout(() => {\n this.boundCallback?.();\n }, POLLING_INTERVAL);\n }\n }\n }\n\n async poll() {\n if (!this.isPollRequestRunning) {\n this.isPollRequestRunning = true;\n\n if (this.boundCallback) {\n await this.boundCallback();\n }\n this.isPollRequestRunning = false;\n }\n }\n\n reset() {\n this.stopPolling();\n this.pollingDisposer?.();\n this.fetchDataDisposer?.();\n }\n}\nexport {PollingHandler};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst getFirstProcessCompleted = () =>\n (\n localStorage.getItem('play-firstProcessCompleted') ?? 'false'\n ).toLowerCase() === 'true';\n\nconst setFirstProcessCompleted = () => {\n localStorage.setItem('play-firstProcessCompleted', 'true');\n};\n\nexport {getFirstProcessCompleted, setFirstProcessCompleted};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst shouldHandleResponse = ({\n requestedProcessInstanceKey,\n currentProcessInstanceKey,\n}: {\n requestedProcessInstanceKey?: number;\n currentProcessInstanceKey?: number;\n}) => {\n // API response should only be processed if the process instance key is still the same as the time we made the API request.\n return requestedProcessInstanceKey === currentProcessInstanceKey;\n};\n\nexport {shouldHandleResponse};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isMultiInstance(businessObject?: any) {\n return (\n businessObject?.loopCharacteristics?.$type ===\n 'bpmn:MultiInstanceLoopCharacteristics'\n );\n}\n\nexport {isMultiInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\n\nfunction getTaskDefinitionType(element: ElementLike) {\n const businessObject = getBusinessObject(element);\n return getExtensionElement(businessObject, 'zeebe:TaskDefinition')?.type;\n}\n\nexport {getTaskDefinitionType};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\n\nfunction getExecutionListener(element: ElementLike) {\n const businessObject = getBusinessObject(element);\n const executionListeners = getExtensionElement(\n businessObject,\n 'zeebe:ExecutionListeners',\n );\n\n if (\n executionListeners === undefined ||\n executionListeners.listeners === undefined\n ) {\n return undefined;\n }\n\n const {eventType, type} = executionListeners.listeners[0];\n\n return {type, eventType};\n}\n\nexport {getExecutionListener};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {connectors} from '@camunda/connectors-element-templates';\n\nexport function collectCamundaConnectors() {\n if (!Array.isArray(connectors))\n return {\n connectorIds: [],\n connectorJobTypes: [],\n inboundConnectorJobTypes: [],\n };\n\n const connectorIds = new Set<string>();\n const connectorJobTypes = new Set<string>();\n const inboundConnectorJobTypes = new Set<string>();\n\n connectors.forEach((connectorElementTemplates) => {\n if (Array.isArray(connectorElementTemplates)) {\n connectorElementTemplates.forEach((connectorElementTemplate) => {\n // Collect connector IDs\n if (connectorElementTemplate && connectorElementTemplate.id) {\n connectorIds.add(connectorElementTemplate.id);\n }\n\n // Collect job types\n for (const property of connectorElementTemplate?.properties || []) {\n const {binding, value} = property;\n if (\n binding?.property === 'type' &&\n 'zeebe:taskDefinition' === binding?.type\n ) {\n connectorJobTypes.add(value);\n break;\n }\n\n if (\n binding?.type === 'zeebe:property' &&\n binding?.name === 'inbound.type'\n ) {\n inboundConnectorJobTypes.add(value);\n break;\n }\n }\n });\n }\n });\n\n return {\n connectorIds: Array.from(connectorIds),\n connectorJobTypes: Array.from(connectorJobTypes),\n inboundConnectorJobTypes: Array.from(inboundConnectorJobTypes),\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {DiagramModel} from 'bpmn-moddle';\nimport {is, getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {Element} from 'bpmn-js/lib/model/Types';\nimport {\n hasEventDefinition,\n hasErrorEventDefinition,\n} from 'bpmn-js/lib/util/DiUtil.js';\nimport {ModdleElement} from 'camunda-bpmn-js/lib/util/ExtensionElementsUtil';\nimport {MessageSubscriptionCandidate, SignalCandidate} from 'modules/types';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {isNil} from 'lodash-es';\nimport {isMultiInstance} from './isMultiInstance';\nimport {ELEMENTS_WITH_JOB_IMPLEMENTATION} from './constants';\nimport {getTaskDefinitionType} from './getTaskDefinitionType';\nimport {getExecutionListener} from './getExecutionListener';\nimport {collectCamundaConnectors} from './collectCamundaConnectors';\nimport {getExtensionElement} from './getExtensionElement';\nimport {getZeebeProperty} from './getZeebeProperty';\n\nfunction isFlowNode(element: Element) {\n return is(element, 'bpmn:FlowNode');\n}\n\nfunction isBpmnError(element: Element) {\n return is(element, 'bpmn:Error');\n}\n\nfunction isErrorBoundaryEvent(element: Element) {\n return is(element, 'bpmn:BoundaryEvent') && hasErrorEventDefinition(element);\n}\n\nfunction isErrorStartEvent(element: Element) {\n return is(element, 'bpmn:StartEvent') && hasErrorEventDefinition(element);\n}\n\nfunction getFlowNodes(elementsById?: DiagramModel['elementsById']) {\n if (elementsById === undefined) {\n return [];\n }\n\n return Object.values(elementsById).filter((element) => isFlowNode(element));\n}\n\nfunction getBpmnErrors(elementsById?: DiagramModel['elementsById']) {\n if (elementsById === undefined) {\n return [];\n }\n\n return Object.values(elementsById).filter((element) => isBpmnError(element));\n}\n\nfunction getElementsWithJobWorker(elements?: ElementLike[]) {\n if (elements === undefined) {\n return [];\n }\n\n return elements.filter(\n (element) =>\n ELEMENTS_WITH_JOB_IMPLEMENTATION.includes(element.type) &&\n getTaskDefinitionType(element) !== undefined,\n );\n}\n\nfunction getElementsWithExecutionListeners(elements?: ElementLike[]) {\n if (elements === undefined) {\n return [];\n }\n\n return elements.filter(\n (element) => getExecutionListener(element) !== undefined,\n );\n}\n\nconst isErrorEvent = (element: Element) => {\n return isErrorBoundaryEvent(element) || isErrorStartEvent(element);\n};\n\nfunction getErrorEvents(elementsById?: DiagramModel['elementsById']) {\n if (elementsById === undefined) {\n return [];\n }\n\n return Object.values(elementsById).filter((element) => isErrorEvent(element));\n}\n\nfunction isStartEvent(element: ElementLike) {\n return is(element, 'bpmn:StartEvent');\n}\n\nfunction isMessageStartEvent(element: Element) {\n return (\n isStartEvent(element) &&\n hasEventDefinition(element, 'bpmn:MessageEventDefinition')\n );\n}\n\nfunction isSignalStartEvent(element: Element) {\n return (\n isStartEvent(element) &&\n hasEventDefinition(element, 'bpmn:SignalEventDefinition')\n );\n}\n\nfunction isMessageReceiveTask(element: Element) {\n return is(element, 'bpmn:ReceiveTask');\n}\n\nfunction isMessageBoundaryEvent(element: Element) {\n return (\n is(element, 'bpmn:BoundaryEvent') &&\n hasEventDefinition(element, 'bpmn:MessageEventDefinition')\n );\n}\n\nfunction isSignalBoundaryEvent(element: Element) {\n return (\n is(element, 'bpmn:BoundaryEvent') &&\n hasEventDefinition(element, 'bpmn:SignalEventDefinition')\n );\n}\n\nfunction isMessageEvent(element: Element) {\n return (\n isMessageStartEvent(element) ||\n isMessageBoundaryEvent(element) ||\n isIntermediateMessageCatchEvent(element)\n );\n}\n\nfunction isSignalEvent(element: Element) {\n return (\n isSignalStartEvent(element) ||\n isSignalBoundaryEvent(element) ||\n isIntermediateSignalCatchEvent(element)\n );\n}\n\nfunction isIntermediateMessageCatchEvent(element: Element) {\n return (\n is(element, 'bpmn:IntermediateCatchEvent') &&\n hasEventDefinition(element, 'bpmn:MessageEventDefinition')\n );\n}\n\nfunction isIntermediateSignalCatchEvent(element: Element) {\n return (\n is(element, 'bpmn:IntermediateCatchEvent') &&\n hasEventDefinition(element, 'bpmn:SignalEventDefinition')\n );\n}\n\nfunction isEventSubProcessMessageStartEvent(element: Element) {\n return isMessageStartEvent(element) && element.$parent?.triggeredByEvent;\n}\n\nfunction isEventSubProcessSignalStartEvent(element: Element) {\n return isSignalStartEvent(element) && element.$parent?.triggeredByEvent;\n}\n\nfunction findMessageRefForEvent(element: ModdleElement) {\n return element.eventDefinitions?.find((eventDefinition: ModdleElement) =>\n is(eventDefinition, 'bpmn:MessageEventDefinition'),\n )?.messageRef;\n}\n\nfunction findSignalRefForEvent(element: ModdleElement) {\n return element.eventDefinitions?.find((eventDefinition: ModdleElement) =>\n is(eventDefinition, 'bpmn:SignalEventDefinition'),\n )?.signalRef;\n}\n\nfunction findCorrelationKey(messageRef: ModdleElement) {\n return messageRef?.extensionElements?.values?.find(\n (extensionElement: ModdleElement) =>\n is(extensionElement, 'zeebe:subscription'),\n )?.correlationKey;\n}\n\nfunction getMessageSubscriptionCandidates(\n elementsById?: DiagramModel['elementsById'],\n): MessageSubscriptionCandidate[] {\n if (elementsById === undefined) {\n return [];\n }\n return Object.values(elementsById)\n .filter(\n (element) => isMessageEvent(element) || isMessageReceiveTask(element),\n )\n .map((element) => {\n const messageRef = element.messageRef ?? findMessageRefForEvent(element);\n let attachedToElementId;\n if (isIntermediateMessageCatchEvent(element)) {\n const sourceRef = element.incoming?.at(0)?.sourceRef;\n attachedToElementId = is(sourceRef, 'bpmn:EventBasedGateway')\n ? sourceRef?.id\n : undefined;\n }\n return {\n elementId: element.id,\n element: element,\n messageName: messageRef?.name,\n messageCorrelationKey: findCorrelationKey(messageRef),\n attachedToElementId: element.attachedToRef?.id ?? attachedToElementId,\n isSubProcessStartEvent: isEventSubProcessMessageStartEvent(element),\n };\n });\n}\n\nfunction getSignalCandidates(\n elementsById?: DiagramModel['elementsById'],\n): SignalCandidate[] {\n if (elementsById === undefined) {\n return [];\n }\n return Object.values(elementsById)\n .filter((element) => isSignalEvent(element))\n .map((element) => {\n const signalRef = element.signalRef ?? findSignalRefForEvent(element);\n let attachedToElementId;\n if (isIntermediateSignalCatchEvent(element)) {\n const sourceRef = element.incoming?.at(0)?.sourceRef;\n attachedToElementId = is(sourceRef, 'bpmn:EventBasedGateway')\n ? sourceRef?.id\n : undefined;\n }\n return {\n elementId: element.id,\n element: element,\n signalName: signalRef.name,\n attachedToElementId: element.attachedToRef?.id ?? attachedToElementId,\n isSubProcessStartEvent: isEventSubProcessSignalStartEvent(element),\n };\n });\n}\n\nfunction isConnectorElement(element: ElementLike) {\n const businessObject = getBusinessObject(element);\n const {connectorIds, connectorJobTypes, inboundConnectorJobTypes} =\n collectCamundaConnectors();\n\n const modelerTemplateValue = businessObject.get('modelerTemplate');\n\n if (!modelerTemplateValue) {\n return false;\n }\n\n if (connectorIds.includes(modelerTemplateValue)) {\n return true;\n }\n\n // Element templates built with connectors\n if (\n connectorJobTypes.includes(\n getExtensionElement(element, 'zeebe:TaskDefinition')?.type,\n )\n ) {\n return true;\n }\n\n // Element templates built with inbound connectors\n if (\n inboundConnectorJobTypes.includes(\n getZeebeProperty(element, 'inbound.type')?.value,\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction isAttachedToAnEventBasedGateway(\n businessObject: Element['businessObject'],\n) {\n const incomingSequenceFlows = businessObject.incoming ?? [];\n\n return incomingSequenceFlows.some((sequenceFlow: ModdleElement) => {\n return is(sequenceFlow.sourceRef, 'bpmn:EventBasedGateway');\n });\n}\n\nfunction isWithinMultiInstance(businessObject: Element['businessObject']) {\n return isMultiInstance(businessObject.$parent);\n}\n\nfunction isActivatable(\n businessObject: Element['businessObject'] | null | undefined,\n) {\n return (\n !isNil(businessObject) &&\n !is(businessObject, 'bpmn:StartEvent') &&\n !is(businessObject, 'bpmn:BoundaryEvent') &&\n !isAttachedToAnEventBasedGateway(businessObject) &&\n !isWithinMultiInstance(businessObject)\n );\n}\n\nexport {\n getFlowNodes,\n getBpmnErrors,\n getErrorEvents,\n isFlowNode,\n getMessageSubscriptionCandidates,\n getSignalCandidates,\n isMessageStartEvent,\n isSignalStartEvent,\n isEventSubProcessMessageStartEvent,\n isConnectorElement,\n isActivatable,\n isEventSubProcessSignalStartEvent,\n isStartEvent,\n getElementsWithJobWorker,\n getElementsWithExecutionListeners,\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\n/**\n * BrowserDetector\n *\n * This util checks the current browser name and version and offers a\n * convinient API to test for specific versions or browsers and whether\n * the current visitor uses a supported browser or not.\n */\nexport default class BrowserDetector {\n constructor() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n this.browser = {};\n //@ts-expect-error Property 'unsupportedBrowsers' does not exist on type 'BrowserDetector'.ts(2339)\n this.unsupportedBrowsers = {\n Chrome: 61,\n Firefox: 55,\n IE: 11,\n Edge: 15,\n Opera: 50,\n Safari: 10,\n };\n\n this._detectBrowser();\n }\n\n /**\n * Detects the current browser and its version number.\n *\n * @returns {Object} An object with keys for browser `name` and `version`.\n */\n _detectBrowser() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n this.browser = (function () {\n if (typeof navigator === 'undefined') return;\n // eslint-disable-next-line prefer-const\n let ua = navigator.userAgent,\n tem,\n M =\n ua.match(\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i,\n ) || [];\n if (/trident/i.test(M[1])) {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {name: 'IE', version: tem[1] || ''};\n }\n if (M[1] === 'Chrome') {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null)\n return {name: tem[1].replace('OPR', 'Opera'), version: tem[2]};\n }\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1]);\n return {name: M[0], version: M[1]};\n })();\n }\n\n /**\n * Checks if the current browser is Internet Explorer.\n *\n * @returns {Boolean}\n */\n get isIE() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n return this.browser.name === 'IE';\n }\n\n /**\n * Checks if the current browser is Edge.\n *\n * @returns {Boolean}\n */\n get isEdge() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n return this.browser.name === 'Edge';\n }\n\n /**\n * Checks if the current browser is from Microsoft (Edge\n * or Internet Explorer).\n *\n * @returns {Boolean}\n */\n get isMicrosoft() {\n return this.isIE || this.isEdge;\n }\n\n /**\n * Checks if the current browser is Firefox.\n *\n * @returns {Boolean}\n */\n get isFirefox() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n return this.browser.name === 'Firefox';\n }\n\n /**\n * Checks if the current browser is Chrome.\n *\n * @returns {Boolean}\n */\n get isChrome() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n return this.browser.name === 'Chrome';\n }\n\n /**\n * Checks if the current browser is Safari.\n *\n * @returns {Boolean}\n */\n get isSafari() {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n return this.browser.name === 'Safari';\n }\n\n /**\n * Checks if the current browser is from an Android device.\n *\n * @returns {Boolean}\n */\n get isAndroid() {\n return /Android/i.test(navigator.userAgent);\n }\n\n /**\n * Checks if the current browser is from a BlackBerry device.\n *\n * @returns {Boolean}\n */\n get isBlackBerry() {\n return /BlackBerry/i.test(navigator.userAgent);\n }\n\n /**\n * Checks if the current browser is from a Windows Mobile device.\n *\n * @returns {Boolean}\n */\n get isWindowsMobile() {\n return /IEMobile/i.test(navigator.userAgent);\n }\n\n /**\n * Checks if the current browser is Mobile Safari.\n *\n * @returns {Boolean}\n */\n get isIOS() {\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n }\n\n /**\n * Checks if the current browser is a mobile browser.\n *\n * @returns {Boolean}\n */\n get isMobile() {\n return (\n this.isAndroid || this.isBlackBerry || this.isWindowsMobile || this.isIOS\n );\n }\n\n /**\n * Checks if the current browser is supported by\n * our environment.\n *\n * @returns {Boolean}\n */\n isSupported() {\n if (\n Object.prototype.hasOwnProperty.call(\n //@ts-expect-error Property 'unsupportedBrowsers' does not exist on type 'BrowserDetector'.ts(2339)\n this.unsupportedBrowsers,\n\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n this.browser.name,\n )\n ) {\n //@ts-expect-error Property 'browser' does not exist on type 'BrowserDetector'.ts(2339)\n if (+this.browser.version > this.unsupportedBrowsers[this.browser.name]) {\n return true;\n }\n }\n\n return false;\n }\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport BpmnModdle from 'bpmn-moddle';\n// Todo: this does not use the Zeebe Model extension, which leads to some discrepancies in checking for types (e.g., zeebe:FormDefinition used by our viewer which has the extension vs. zeebe:formDefinition in this moddle object)\nconst moddle = new BpmnModdle();\n\nfunction parseDiagramXML(xml: string) {\n return moddle.fromXML(xml);\n}\n\nexport {parseDiagramXML};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, computed, makeObservable, observable, override} from 'mobx';\nimport {FlowNodeInstance, FlowNodeInstanceDto} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {isEqual} from 'lodash-es';\nimport {PollingHandler} from './pollingHandler';\nimport {diagramStore} from './diagram';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n elementInstances: FlowNodeInstance[];\n status: 'initial' | 'first-fetch' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n elementInstances: [],\n status: 'initial',\n};\n\nclass ElementInstances extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n completedElementInstances: computed,\n activeElementInstances: computed,\n elementInstances: computed,\n elementIds: computed,\n isInitialLoadComplete: computed,\n elementInstancesWithType: computed,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchFlowNodeInstances({});\n\n pollData = () =>\n this.fetchFlowNodeInstances({\n ignoreFailure: true,\n });\n\n fetchFlowNodeInstances = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n\n const {success, flowNodeInstances} =\n await zeebePlayService.fetchFlowNodeInstances(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(flowNodeInstances);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (flowNodeInstances: FlowNodeInstanceDto[]) => {\n const {processInstance} = processInstanceStore.state;\n\n if (processInstance === undefined) {\n return;\n }\n\n const elementInstances = flowNodeInstances.map((instance) => ({\n ...instance,\n scopeKey: instance.processInstanceKey,\n })) as FlowNodeInstance[];\n\n if (!isEqual(elementInstances, this.state.elementInstances)) {\n this.state.elementInstances = elementInstances;\n }\n\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n if (this.state.status === 'initial') {\n this.state.status = 'first-fetch';\n } else {\n this.state.status = 'fetching';\n }\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n get isInitialLoadComplete() {\n return !['initial', 'first-fetch'].includes(this.state.status);\n }\n\n get completedElementInstances() {\n return (\n this.state.elementInstances?.filter(\n (instance) => instance.state === 'COMPLETED',\n ) ?? []\n );\n }\n\n get activeElementInstances() {\n return (\n this.state.elementInstances?.filter(\n (instance) => instance.state === 'ACTIVE',\n ) ?? []\n );\n }\n\n get elementInstances() {\n return this.state.elementInstances ?? [];\n }\n\n get elementIds() {\n return this.elementInstances.map(({flowNodeId}) => flowNodeId);\n }\n\n get elementInstancesWithType() {\n return this.elementInstances.map(({flowNodeId}) => ({\n flowNodeId,\n elementType: diagramStore.flowNodes.find(({id}) => id === flowNodeId)\n ?.$type,\n }));\n }\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const elementInstancesStore = new ElementInstances();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {is, getBusinessObject} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {ModdleElement} from 'camunda-bpmn-js/lib/util/ExtensionElementsUtil';\n\nexport function getFormDefinition(\n element: ElementLike,\n): ModdleElement | undefined {\n const bo = getBusinessObject(element);\n const startEventExtensionElements = bo.get('extensionElements');\n const startEventFormDefinition = startEventExtensionElements\n ?.get('values')\n //@ts-expect-error Parameter 'elem' implicitly has an 'any' type.ts(7006)\n ?.find((elem) => is(elem, 'zeebe:FormDefinition'));\n return startEventFormDefinition;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {is, ModdleElement} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {DEFAULT_BINDING_TYPE} from './constants';\n\nexport const isBusinessRuleTask = (element: ElementLike) => {\n return is(element, 'bpmn:BusinessRuleTask');\n};\n\nconst getCalledDecision = (extensionElements: ModdleElement[]) => {\n //@ts-expect-error Parameter 'elem' implicitly has an 'any' type.ts(7006)\n return extensionElements?.get('values').filter((elem) => {\n return (\n elem.$type === 'zeebe:CalledDecision' ||\n elem.$type === 'zeebe:calledDecision'\n );\n })[0];\n};\n\nexport const getCalledDecisionDetails = (\n extensionElements: ModdleElement[],\n) => {\n const calledElement = getCalledDecision(extensionElements);\n\n return {\n decisionId: calledElement?.decisionId?.trim(),\n bindingType: calledElement?.bindingType ?? DEFAULT_BINDING_TYPE,\n };\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const isExpression = (str?: string) => {\n return str?.trim()?.startsWith('=');\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst BPMN_PROCESS_ELEMENT_TYPE = 'bpmn:Process';\n\n//@ts-expect-error Parameter 'definitions' implicitly has an 'any' type.ts(7006)\nexport default function getExecutableProcess(definitions) {\n if (!definitions) {\n throw new Error(\n 'You need to pass modeler definitions to get the processId of the executable process',\n );\n }\n\n //@ts-expect-error Variable 'executableProcess' implicitly has type 'any' in some locations where its type cannot be determined.ts(7034)\n let executableProcess, firstProcessFound;\n\n const rootElements = definitions.rootElements;\n\n if (!rootElements) {\n return;\n }\n\n //@ts-expect-error Parameter 'rootElement' implicitly has an 'any' type.ts(7006)\n rootElements.forEach((rootElement) => {\n if (rootElement.$type === BPMN_PROCESS_ELEMENT_TYPE) {\n //@ts-expect-error Variable 'firstProcessFound' implicitly has an 'any' type.ts(7005)\n if (!firstProcessFound) {\n firstProcessFound = rootElement;\n }\n //@ts-expect-error Variable 'executableProcess' implicitly has an 'any' type.ts(7005)\n if (!executableProcess) {\n if (rootElement.isExecutable) {\n executableProcess = rootElement;\n }\n }\n }\n });\n\n // if after iterating we did not got the processId of an executable process,\n // we use the processId of the first process we found\n if (!executableProcess) {\n executableProcess = firstProcessFound;\n }\n\n return executableProcess;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {DEFAULT_BINDING_TYPE} from '../constants';\nimport {ModdleElement} from 'bpmn-js/lib/util/ModelUtil.js';\n\nexport const isCalledElement = (type: string) => {\n return type === 'zeebe:CalledElement' || type === 'zeebe:calledElement';\n};\n\nexport const getCalledElement = (extensionElements: ModdleElement[]) => {\n //@ts-expect-error Parameter 'elem' implicitly has an 'any' type.ts(7006)\n return extensionElements?.get('values').filter((elem) => {\n return isCalledElement(elem.$type);\n })[0];\n};\n\nexport const getCalledProcessDetails = (extensionElements: ModdleElement[]) => {\n const calledElement = getCalledElement(extensionElements);\n\n return {\n processId: calledElement?.processId?.trim(),\n bindingType: calledElement?.bindingType ?? DEFAULT_BINDING_TYPE,\n };\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\nimport {DEFAULT_BINDING_TYPE} from './constants';\n\nfunction getFormDetails(element: ElementLike) {\n const formDefinition = getExtensionElement(element, 'zeebe:formDefinition');\n\n return {\n formId: formDefinition?.get('formId') ?? null,\n bindingType: formDefinition?.bindingType ?? DEFAULT_BINDING_TYPE,\n };\n}\n\nexport {getFormDetails};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {is} from 'bpmn-js/lib/util/ModelUtil.js';\nimport BPMNModdle from 'bpmn-moddle';\nimport {DeploymentHelpers, FileInfo, FileType} from 'modules/types';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {Element} from 'bpmn-js/lib/model/Types';\n\nimport {\n getCalledDecisionDetails,\n isBusinessRuleTask,\n} from 'modules/utils/model-parser-util';\nimport {isExpression} from 'modules/utils/properties-panel-util';\nimport {getCalledProcessDetails} from 'modules/utils/web-modeler-diagram-parser';\nimport {getFormDetails} from 'modules/utils/getFormDetails';\n\ntype FileHelpers = Pick<\n DeploymentHelpers,\n | 'fetchFileById'\n | 'fetchFilesByDecisionId'\n | 'fetchFilesByProcessId'\n | 'fetchFilesByFormId'\n> & {\n projectId?: string;\n elementBusinessObjects: Array<Element['businessObject']>;\n relatedFiles?: {[key: string]: Promise<FileInfo>};\n};\nfunction getFileFetchers({\n projectId,\n elementBusinessObjects,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n relatedFiles = {},\n}: FileHelpers) {\n const fileFetchers =\n elementBusinessObjects\n .reduce<\n {\n id: string;\n elementBusinessObject: ElementLike['businessObject'];\n type: FileType;\n bindingType: FileInfo['bindingType'];\n }[]\n >((fileReferences, elementBusinessObject) => {\n const {formId, bindingType} = getFormDetails(elementBusinessObject);\n if (formId !== null) {\n fileReferences.push({\n id: formId,\n elementBusinessObject,\n type: 'form',\n bindingType,\n });\n }\n\n if (isBusinessRuleTask(elementBusinessObject)) {\n const {decisionId, bindingType} = getCalledDecisionDetails(\n elementBusinessObject?.get('extensionElements'),\n );\n\n if (Boolean(decisionId) && !isExpression(decisionId)) {\n fileReferences.push({\n elementBusinessObject,\n id: decisionId,\n type: 'decision',\n bindingType,\n });\n }\n }\n\n if (is(elementBusinessObject, 'bpmn:CallActivity')) {\n const {processId: calledElementProcessId, bindingType} =\n getCalledProcessDetails(\n elementBusinessObject?.get('extensionElements'),\n );\n\n if (calledElementProcessId) {\n fileReferences.push({\n elementBusinessObject,\n id: calledElementProcessId,\n type: 'process',\n bindingType,\n });\n }\n }\n return fileReferences;\n }, [])\n .map(({id, elementBusinessObject, bindingType, type}) =>\n collectFile({\n projectId,\n type,\n bindingType,\n id,\n relatedFiles,\n elementBusinessObject,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n }),\n ) ?? [];\n\n return Promise.all(fileFetchers);\n}\n\nasync function collectRelatedFiles({\n projectId,\n elementBusinessObjects,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n relatedFiles = {},\n}: FileHelpers): Promise<Array<FileInfo>> {\n await getFileFetchers({\n projectId,\n elementBusinessObjects,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n relatedFiles,\n });\n\n return Promise.all(Object.values(relatedFiles));\n}\n\nfunction collectFile({\n projectId,\n type,\n bindingType,\n id,\n relatedFiles,\n elementBusinessObject,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n}: {\n projectId?: string;\n type: FileType;\n bindingType: FileInfo['bindingType'];\n id?: string;\n relatedFiles: {[key: string]: Promise<FileInfo>};\n elementBusinessObject: ElementLike['businessObject'];\n fetchFilesByDecisionId: (\n projectId: string | undefined,\n decisionId: string | undefined,\n ) => Promise<Array<{id: string; name: string; type: 'DMN'}>>;\n fetchFilesByProcessId: (\n projectId: string | undefined,\n processId: string | undefined,\n ) => Promise<Array<{id: string; name: string; type: 'BPMN'}>>;\n fetchFilesByFormId: (\n projectId: string | undefined,\n formId: string | undefined,\n ) => Promise<Array<{id: string; name: string; type: 'FORM'}>>;\n fetchFileById: (fileId: string) => Promise<{content: string}>;\n}) {\n const key = type + '_' + id;\n\n if (relatedFiles[key] !== undefined) return;\n\n relatedFiles[key] = new Promise((resolve) => {\n (async () => {\n let files: Array<{id: string; name: string; type: string}> = [];\n try {\n if (type === 'decision') {\n files = await fetchFilesByDecisionId(projectId, id);\n } else if (type === 'form') {\n files = await fetchFilesByFormId(projectId, id);\n } else {\n files = await fetchFilesByProcessId(projectId, id);\n }\n } catch (e) {\n console.error('Error fetching file', e);\n }\n\n let content: {content: string} | null = null;\n\n if (files?.[0]?.id) {\n content = await fetchFileById(files[0].id);\n }\n\n if (type === 'process' && content?.content) {\n // collect transitive files\n const bpmnModdle = new BPMNModdle();\n\n const bpmnModdleDefinitions = await bpmnModdle.fromXML(content.content);\n\n const elementBusinessObjects = Object.values(\n bpmnModdleDefinitions.elementsById,\n );\n\n await getFileFetchers({\n projectId,\n elementBusinessObjects,\n fetchFilesByDecisionId,\n fetchFilesByProcessId,\n fetchFilesByFormId,\n fetchFileById,\n relatedFiles,\n });\n }\n\n resolve({\n type,\n bindingType,\n id,\n elementBusinessObject,\n filename: files?.[0]?.name ?? null,\n fileId: files?.[0]?.id ?? null,\n fileType: files?.[0]?.type ?? null,\n content: content?.content ?? null,\n status: 'waiting',\n });\n })();\n });\n\n return relatedFiles[key];\n}\n\nexport {collectRelatedFiles};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\n//@ts-expect-error Parameter 'name' implicitly has an 'any' type.ts(7006)\nconst getDeployment = (name) => {\n return getDeployments()[name];\n};\n\nconst getDeployments = () => {\n return JSON.parse(localStorage.getItem('zeebePlayDeployments') || '{}');\n};\n\n//@ts-expect-error Parameter 'name' implicitly has an 'any' type.ts(7006)\nconst addDeployment = (name, id) => {\n const deployments = getDeployments();\n deployments[name] = id;\n localStorage.setItem('zeebePlayDeployments', JSON.stringify(deployments));\n};\n\nexport {getDeployment, getDeployments, addDeployment};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {FileType} from 'modules/types';\n\nfunction getFileExtension(fileType: FileType) {\n switch (fileType) {\n case 'decision':\n return 'dmn';\n case 'form':\n return 'form';\n case 'process':\n default:\n return 'bpmn';\n }\n}\n\nfunction generateFileName(fileName: string, fileType: FileType) {\n return `${fileName}.${getFileExtension(fileType)}`;\n}\n\nexport {generateFileName};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const parseErrorString = (errorString: string) => {\n const errors = [];\n\n if (errorString) {\n const index = errorString.indexOf('Element:');\n const hasElementErrors = index !== -1;\n if (hasElementErrors) {\n const lines = errorString.substring(index).split('\\n');\n if (Array.isArray(lines)) {\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n if (\n line?.includes('Element: ') &&\n line.split('Element: ').length === 2\n ) {\n const id = line.split('Element: ')[1];\n i++;\n while (lines[i]?.includes('ERROR: ')) {\n const lineWithError = lines[i];\n if (lineWithError.split('ERROR: ').length === 2) {\n const message = lineWithError.split('ERROR: ')[1];\n errors.push({category: 'error', id, message});\n i++;\n }\n }\n } else {\n i++;\n }\n }\n }\n } else {\n const lines = errorString.split('\\n');\n if (Array.isArray(lines)) {\n if (lines.length === 2) {\n errors.push({category: 'error', id: '', message: lines[1]});\n } else if (lines.length === 1) {\n errors.push({category: 'error', id: '', message: lines[0]});\n }\n }\n }\n }\n\n return errors;\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport function removeBioc(xmlString: string) {\n return xmlString.replaceAll(/ bioc:([^\"]+\")([^\"]+\")/gm, '');\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {IReactionDisposer, makeAutoObservable} from 'mobx';\nimport {collectRelatedFiles} from './collectRelatedFiles';\nimport {diagramStore} from '../diagram';\n\nimport {\n DeploymentFailResponse,\n DeploymentHelpers,\n DeploymentSuccessResponse,\n FileInfo,\n UpdateFunction,\n} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {addDeployment, getDeployment} from './deployment';\nimport {BPMN_DIAGRAM_DEFAULT_NAME} from 'modules/utils/constants';\nimport {generateFileName} from 'modules/utils/generateFileName';\nimport trackingService from 'modules/services/TrackingService';\nimport {parseErrorString} from './parseErrorString';\nimport {removeBioc} from 'modules/utils/removeBioc';\n\ntype DeployedProcess = {\n status: 'success' | 'server-error' | 'authorization-error' | 'diagram-error';\n errorMessage?: string;\n};\n\ntype UpdateError = {0: {reason: string}; status: number};\ntype FileInfoWithContent = Omit<FileInfo, 'content'> & {content: string};\n\ntype State = {\n isRedeployment: boolean;\n processedFiles?: Array<FileInfo>;\n deployedProcess?: DeployedProcess;\n status: 'initial' | 'deploying-files' | 'environment-created';\n processDefinitionKey?: number;\n};\n\nconst DEFAULT_STATE: State = {\n status: 'initial',\n isRedeployment: false,\n processedFiles: undefined,\n deployedProcess: undefined,\n processDefinitionKey: undefined,\n};\n\nclass PlayEnvironment {\n state: State = {...DEFAULT_STATE};\n disposer: null | IReactionDisposer = null;\n\n xmlToDisplay?: string;\n projectId?: string;\n folderId?: string;\n processId?: string;\n processName?: string;\n fetchFilesByProcessId?: DeploymentHelpers['fetchFilesByProcessId'];\n fetchFilesByDecisionId?: DeploymentHelpers['fetchFilesByDecisionId'];\n fetchFilesByFormId?: DeploymentHelpers['fetchFilesByFormId'];\n fetchFileById?: DeploymentHelpers['fetchFileById'];\n onDeploymentError?: DeploymentHelpers['onDeploymentError'];\n consoleSecretsUrl?: string;\n consoleDashboardPageUrl?: string;\n updateFileById?: UpdateFunction;\n currentDiagramRevision = 0;\n originAppInstanceId?: string;\n canUserSaveExampleData = false;\n diagramId?: string;\n authType?: 'saas' | 'sm';\n operateBaseUrl?: string;\n\n constructor() {\n makeAutoObservable(this);\n }\n\n init({\n xml,\n projectId,\n folderId,\n processId,\n processName,\n fetchFilesByProcessId,\n fetchFilesByDecisionId,\n fetchFileById,\n fetchFilesByFormId,\n onDeploymentError,\n consoleDashboardPageUrl,\n clusterId,\n currentDiagramRevision,\n updateFileById,\n originAppInstanceId,\n canUserSaveExampleData,\n diagramId,\n authType,\n operateBaseUrl,\n }: DeploymentHelpers & {\n xml?: string;\n processId?: string;\n folderId?: string;\n projectId?: string;\n processName?: string;\n consoleDashboardPageUrl: string;\n clusterId?: string;\n diagramId?: string;\n currentDiagramRevision: number;\n updateFileById: UpdateFunction;\n originAppInstanceId: string;\n canUserSaveExampleData: boolean;\n authType: 'saas' | 'sm';\n operateBaseUrl?: string;\n }) {\n this.xmlToDisplay = xml;\n this.processId = processId;\n this.folderId = folderId;\n this.projectId = projectId;\n this.processName = processName;\n this.fetchFilesByProcessId = fetchFilesByProcessId;\n this.fetchFilesByDecisionId = fetchFilesByDecisionId;\n this.fetchFileById = fetchFileById;\n this.fetchFilesByFormId = fetchFilesByFormId;\n this.onDeploymentError = onDeploymentError;\n this.consoleSecretsUrl = `${consoleDashboardPageUrl}/cluster/${clusterId}/secrets`;\n this.consoleDashboardPageUrl = consoleDashboardPageUrl;\n this.currentDiagramRevision = currentDiagramRevision;\n this.updateFileById = updateFileById;\n this.originAppInstanceId = originAppInstanceId;\n this.canUserSaveExampleData = canUserSaveExampleData;\n this.diagramId = diagramId;\n this.authType = authType;\n this.operateBaseUrl = operateBaseUrl;\n }\n\n get isEnvironmentCreated() {\n return this.state.status === 'environment-created';\n }\n\n get hasDiagramError() {\n return this.state.deployedProcess?.status === 'diagram-error';\n }\n\n get hasAuthorizationError() {\n return this.state.deployedProcess?.status === 'authorization-error';\n }\n\n resetXmlAndProcess = () => {\n this.setXmlAndProcess();\n };\n\n setXmlAndProcess = ({\n xml,\n processId,\n }: {xml?: string; processId?: string} = {}) => {\n this.xmlToDisplay = xml;\n this.processId = processId;\n };\n\n setIsRedeployment = (isRedeployment: boolean) => {\n this.state.isRedeployment = isRedeployment;\n };\n\n setDeployedProcess = (deployedProcess: DeployedProcess) => {\n this.state.deployedProcess = deployedProcess;\n };\n\n setProcessedFiles = (processedFiles?: Array<FileInfo>) => {\n this.state.processedFiles = processedFiles;\n };\n\n setStatus = (status: State['status']) => {\n this.state.status = status;\n };\n\n setProcessDefinitionKey = (processDefinitionKey: number) => {\n this.state.processDefinitionKey = processDefinitionKey;\n };\n\n setupEnvironment = async () => {\n this.setStatus('deploying-files');\n\n const content = removeBioc(this.xmlToDisplay!);\n\n try {\n const filesInfo = await collectRelatedFiles({\n projectId: this.projectId,\n elementBusinessObjects:\n diagramStore.state.elementsById === undefined\n ? []\n : Object.values(diagramStore.state.elementsById),\n fetchFilesByDecisionId: this.fetchFilesByDecisionId!,\n fetchFilesByProcessId: this.fetchFilesByProcessId!,\n fetchFilesByFormId: this.fetchFilesByFormId!,\n fetchFileById: this.fetchFileById!,\n });\n\n const unavailableFiles: FileInfo[] = filesInfo\n .filter(({content}) => content === null)\n .map((file) => ({\n ...file,\n status: 'not found',\n }));\n\n const deployedFiles = await this.deployFiles({\n filesInfo: filesInfo.filter(\n ({content}) => content !== null,\n ) as Array<FileInfoWithContent>,\n });\n\n const deployedProcess = await this.deployProcess(\n content,\n filesInfo.filter(\n ({bindingType, content}) =>\n bindingType === 'deployment' && content !== null,\n ) as Array<FileInfoWithContent>,\n );\n\n this.setDeployedProcess(deployedProcess);\n this.setProcessedFiles([...unavailableFiles, ...deployedFiles]);\n await diagramStore.fetchLinkedStartForm();\n this.setStatus('environment-created');\n } catch (e) {\n console.error('Uncaught file deployment error', e);\n }\n };\n\n updateFile = async (): Promise<{\n success: boolean;\n reason?: 'conflict' | 'serialization' | 'unknown';\n }> => {\n const xml = await diagramStore.toXml?.();\n if (xml?.error) {\n return {success: false, reason: 'serialization'};\n }\n const newXml = xml?.xml;\n\n const definitions = diagramStore.state.viewer?.getDefinitions();\n const diagramRelationId =\n definitions.$attrs['camunda:diagramRelationId'] ??\n definitions.diagramRelationId;\n\n const updatePayload = {\n content: newXml,\n revision: this.currentDiagramRevision,\n relationId: diagramRelationId,\n originAppInstanceId: this.originAppInstanceId,\n };\n\n try {\n const file = await this.updateFileById?.(this.diagramId!, updatePayload);\n trackingService.trackDiagramUpdated();\n this.currentDiagramRevision = file!.revision;\n\n return {success: true};\n } catch (e) {\n const status = (e as UpdateError)?.status;\n if (status === 409) {\n return {success: false, reason: 'conflict'};\n }\n return {success: false, reason: 'unknown'};\n }\n };\n\n deployFiles = async ({\n filesInfo = [],\n }: {\n filesInfo?: Array<FileInfoWithContent>;\n }): Promise<Array<FileInfoWithContent>> => {\n return Promise.all(\n filesInfo.map(async (file) => {\n if (file.bindingType === 'versionTag') {\n return {\n ...file,\n status: 'unsupported binding',\n };\n }\n\n if (file.bindingType === 'deployment') {\n // Files that have bindingType: deployment should be handled separately in deployProcess function.\n // More context: https://github.com/camunda/play/pull/759#discussion_r1834425665\n return {\n ...file,\n status: 'success',\n };\n }\n\n const {response, success} = await zeebePlayService.deployResources([\n {\n content: file.content,\n name: generateFileName(file.filename, file.type),\n },\n ]);\n\n if (success) {\n trackingService.trackDeployment({\n success: true,\n fileId: file.fileId ?? undefined,\n fileType: file.fileType,\n });\n } else {\n const errorResponse = response as DeploymentFailResponse;\n trackingService.trackDeployment({\n success: false,\n errorMessage: errorResponse.detail,\n fileId: file.fileId ?? undefined,\n fileType: file.fileType,\n });\n\n trackingService.trackDiagramErrors({\n count: parseErrorString(errorResponse.detail).length,\n fileId: file.fileId ?? undefined,\n fileType: file.fileType,\n });\n }\n return {\n ...file,\n status: success ? 'success' : 'deployment error',\n };\n }),\n );\n };\n\n deployProcess = async (\n content: string,\n dependentFiles: FileInfoWithContent[],\n ): Promise<DeployedProcess> => {\n const redeployment = Boolean(getDeployment(this.processId)); // if we already have a deployment for the current diagram, its a redeployment\n\n this.setIsRedeployment(redeployment);\n\n const {response, success} = await zeebePlayService.deployResources([\n {\n content,\n name: `${this.processName ?? BPMN_DIAGRAM_DEFAULT_NAME}.bpmn`,\n },\n ...dependentFiles.map((file) => ({\n content: file.content,\n name: generateFileName(file.filename, file.type),\n })),\n ]);\n\n if (success) {\n const successResponse = response as DeploymentSuccessResponse;\n\n const processDefinitionKey =\n successResponse.deployments[0].process.processDefinitionKey;\n\n addDeployment(this.processId, processDefinitionKey);\n\n trackingService.trackDeployment({\n success: true,\n fileId: this.diagramId,\n fileType: 'bpmn',\n });\n\n this.setProcessDefinitionKey(processDefinitionKey);\n return {status: 'success'};\n } else {\n const errorResponse = response as DeploymentFailResponse;\n\n trackingService.trackDeployment({\n success: false,\n errorMessage: errorResponse.detail,\n fileId: this.diagramId,\n fileType: 'bpmn',\n });\n\n trackingService.trackDiagramErrors({\n count: parseErrorString(errorResponse.detail).length,\n fileId: this.diagramId,\n fileType: 'bpmn',\n });\n const errorObject = [\n {\n detail: errorResponse.detail ?? 'Unknown error',\n },\n ];\n\n this.onDeploymentError?.(errorObject);\n\n if (errorResponse.status === 403) {\n return {status: 'authorization-error'};\n }\n\n return {status: 'diagram-error'};\n }\n };\n\n get fileProblems() {\n return (\n this.state.processedFiles?.filter((file) => file.status !== 'success') ??\n []\n );\n }\n\n get sanitizedOperateBaseUrl() {\n if (this.operateBaseUrl === undefined) {\n return;\n }\n\n return this.operateBaseUrl.endsWith('/')\n ? this.operateBaseUrl.slice(0, -1)\n : this.operateBaseUrl;\n }\n\n get hasLinkToOperate() {\n return (\n this.authType === 'saas' && this.sanitizedOperateBaseUrl !== undefined\n );\n }\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const playEnvironmentStore = new PlayEnvironment();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {IReactionDisposer, makeAutoObservable, when} from 'mobx';\nimport {processInstanceStore} from './processInstance';\nimport {elementInstancesStore} from './elementInstances';\n\ntype Selection = {\n flowNodeId?: string;\n flowNodeName?: string;\n flowNodeInstanceId?: number;\n flowNodeType?: string;\n isMultiInstance?: boolean;\n};\n\ntype State = {\n selection: Selection | null;\n};\n\nconst DEFAULT_STATE: State = {selection: null};\n\nclass FlowNodeSelection {\n state: State = {...DEFAULT_STATE};\n rootNodeSelectionDisposer: null | IReactionDisposer = null;\n\n constructor() {\n makeAutoObservable(this, {init: false});\n }\n\n init = () => {\n this.rootNodeSelectionDisposer = when(\n () => processInstanceStore.state.processInstance?.key !== undefined,\n () => this.clearSelection(),\n );\n };\n\n setSelection = (selection: Selection | null) => {\n this.state.selection = selection;\n };\n\n clearSelection = () => {\n this.setSelection(this.rootNode);\n };\n\n selectFlowNode = (selection: Selection) => {\n if (\n selection.flowNodeId === undefined ||\n (!this.areMultipleInstancesSelected && this.isSelected(selection))\n ) {\n this.clearSelection();\n } else {\n this.setSelection(selection);\n }\n };\n\n get selectedFlowNodeId() {\n return this.state.selection?.flowNodeId;\n }\n\n get areMultipleInstancesSelected(): boolean {\n if (this.state.selection === null) {\n return false;\n }\n\n const {flowNodeInstanceId, flowNodeId} = this.state.selection;\n return flowNodeId !== undefined && flowNodeInstanceId === undefined;\n }\n\n get rootNode() {\n return {\n flowNodeInstanceId: processInstanceStore.state.processInstance?.key,\n isMultiInstance: false,\n };\n }\n\n get isRootNodeSelected() {\n return (\n this.state.selection?.flowNodeInstanceId ===\n processInstanceStore.state.processInstance?.key\n );\n }\n\n get isFlowNodeInstanceSelected() {\n return (\n this.state.selection?.flowNodeInstanceId !== undefined &&\n !this.isRootNodeSelected\n );\n }\n\n isSelected = ({\n flowNodeId,\n flowNodeInstanceId,\n isMultiInstance,\n }: {\n flowNodeId?: string;\n flowNodeInstanceId?: number;\n isMultiInstance?: boolean;\n }) => {\n const {selection} = this.state;\n\n if (selection === null) {\n return false;\n }\n\n if (selection.isMultiInstance !== isMultiInstance) {\n return false;\n }\n\n if (selection.flowNodeInstanceId === undefined) {\n const elementInstances = elementInstancesStore.elementInstances.filter(\n ({flowNodeId}) => flowNodeId === selection.flowNodeId,\n );\n\n if (elementInstances.length > 1) {\n return (\n elementInstances[elementInstances.length - 1].key ===\n flowNodeInstanceId\n );\n }\n\n return selection.flowNodeId === flowNodeId;\n }\n\n return selection.flowNodeInstanceId === flowNodeInstanceId;\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const flowNodeSelectionStore = new FlowNodeSelection();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst pluralSuffix = (count: number, text: string) => {\n return Math.abs(count) === 1 ? `${text}` : `${text}s`;\n};\n\nexport {pluralSuffix};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {elementInstancesStore} from './elementInstances';\nimport {DisplayNotification} from 'modules/types';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {flowNodeSelectionStore} from './flowNodeSelection';\nimport {pluralSuffix} from 'modules/utils/pluralSuffix';\nimport {diagramStore} from './diagram';\nimport trackingService from 'modules/services/TrackingService';\n\ntype ModificationOption = 'add' | 'cancel-all' | 'move-all';\n\ntype State = {\n status: 'initial' | 'moving-token';\n sourceFlowNodeIdForMoveOperation: string | null;\n sourceFlowNodeInstanceKeyForMoveOperation: string | null;\n};\n\nconst DEFAULT_STATE: State = {\n status: 'initial',\n sourceFlowNodeIdForMoveOperation: null,\n sourceFlowNodeInstanceKeyForMoveOperation: null,\n};\n\nclass Modifications {\n state: State = {...DEFAULT_STATE};\n #displayNotification?: DisplayNotification = undefined;\n #isSelfManagedEnv?: boolean = false;\n\n constructor() {\n makeAutoObservable(this);\n }\n\n init = ({\n displayNotification,\n isSelfManagedEnv,\n }: {\n displayNotification?: DisplayNotification;\n isSelfManagedEnv: boolean;\n }) => {\n this.#displayNotification = displayNotification;\n this.#isSelfManagedEnv = isSelfManagedEnv;\n };\n\n get isMovingToken() {\n return this.state.status === 'moving-token';\n }\n\n get cancellableFlowNodes() {\n return elementInstancesStore.activeElementInstances.map(\n ({flowNodeId}) => flowNodeId,\n );\n }\n\n get activatableFlowNodes() {\n return diagramStore.flowNodes\n .filter((flowNode) => flowNode.isActivatable)\n .map(({id}) => id);\n }\n\n get modifiableFlowNodes() {\n if (flowNodeSelectionStore.isFlowNodeInstanceSelected) {\n return [];\n }\n if (this.isMovingToken) {\n return this.activatableFlowNodes.filter(\n (flowNodeId) =>\n flowNodeId !== this.state.sourceFlowNodeIdForMoveOperation,\n );\n } else {\n return Array.from(\n new Set([...this.activatableFlowNodes, ...this.cancellableFlowNodes]),\n );\n }\n }\n\n get canSelectedFlowNodeBeModified() {\n if (flowNodeSelectionStore.selectedFlowNodeId === undefined) {\n return false;\n }\n\n return this.modifiableFlowNodes.includes(\n flowNodeSelectionStore.selectedFlowNodeId,\n );\n }\n\n get availableModifications() {\n const options: ModificationOption[] = [];\n const {\n selectedFlowNodeId,\n state: {selection},\n } = flowNodeSelectionStore;\n\n if (\n selectedFlowNodeId === undefined ||\n !this.canSelectedFlowNodeBeModified\n ) {\n return options;\n }\n\n if (\n this.activatableFlowNodes.includes(selectedFlowNodeId) &&\n selection?.flowNodeInstanceId === undefined\n ) {\n options.push('add');\n }\n\n if (!this.cancellableFlowNodes.includes(selectedFlowNodeId)) {\n return options;\n }\n\n options.push('cancel-all');\n options.push('move-all');\n return options;\n }\n\n startMovingToken = (\n sourceFlowNodeId: string,\n sourceFlowNodeInstanceKey?: string,\n ) => {\n this.state.status = 'moving-token';\n this.state.sourceFlowNodeIdForMoveOperation = sourceFlowNodeId;\n this.state.sourceFlowNodeInstanceKeyForMoveOperation =\n sourceFlowNodeInstanceKey ?? null;\n };\n\n moveToken = async (targetFlowNodeId: string, targetFlowNodeName: string) => {\n if (targetFlowNodeId !== undefined) {\n const terminateInstructions = elementInstancesStore.state.elementInstances\n .filter(\n ({state, flowNodeId}) =>\n !['COMPLETED', 'TERMINATED'].includes(state) &&\n flowNodeId === this.state.sourceFlowNodeIdForMoveOperation,\n )\n .map(({key}) => ({\n elementInstanceKey: key,\n }));\n\n const {success, status} = await zeebePlayService.modify({\n processInstanceKey: processInstanceStore.state.processInstance?.key,\n terminateInstructions,\n activateInstructions: [\n {\n elementId: targetFlowNodeId,\n ancestorElementInstanceKey: -1,\n variableInstructions: [],\n },\n ],\n });\n\n if (success) {\n this.#displayNotification?.info({\n title: `Moving ${pluralSuffix(terminateInstructions.length, 'token')} to ${targetFlowNodeName}`,\n });\n trackingService.applyModifictation('move-token');\n } else {\n if (status === AUTHORIZATION_ERROR_CODE) {\n this.#displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${this.#isSelfManagedEnv ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to modify this instance.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n } else {\n this.#displayNotification?.error(REQUEST_FAILURE);\n }\n }\n }\n\n this.finishMovingToken();\n };\n\n finishMovingToken = () => {\n this.state.status = 'initial';\n this.state.sourceFlowNodeIdForMoveOperation = null;\n this.state.sourceFlowNodeInstanceKeyForMoveOperation = null;\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const modificationsStore = new Modifications();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {isEventSubProcess} from 'bpmn-js/lib/util/DiUtil.js';\n\nconst isWithinEventSubprocess = (element: ElementLike): boolean => {\n const parentElement = element.parent;\n\n if (parentElement === undefined || parentElement === null) {\n return false;\n }\n\n if (isEventSubProcess(parentElement.businessObject)) {\n return true;\n }\n\n return isWithinEventSubprocess(parentElement);\n};\n\nexport {isWithinEventSubprocess};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\n\nimport {\n getBpmnErrors,\n getFlowNodes,\n getMessageSubscriptionCandidates,\n isActivatable,\n getSignalCandidates,\n isStartEvent,\n getErrorEvents,\n getElementsWithJobWorker,\n getElementsWithExecutionListeners,\n} from 'modules/utils/flowNodes';\nimport BrowserDetector from 'modules/utils/browser-detector';\nimport ElementRegistry, {\n ElementLike,\n} from 'diagram-js/lib/core/ElementRegistry';\nimport GraphicsFactory from 'diagram-js/lib/core/GraphicsFactory';\nimport {parseDiagramXML} from '../utils/parseDiagramXML';\nimport {elementInstancesStore} from './elementInstances';\nimport {isLabel} from 'diagram-js/lib/util/ModelUtil.js';\nimport {getFormDefinition} from 'modules/utils/getFormDefinition';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {BpmnJS} from 'modules/bpmn-js/BpmnJS';\nimport {SaveXMLResult} from 'bpmn-js/lib/BaseViewer';\nimport {modificationsStore} from './modifications';\nimport {isWithinEventSubprocess} from '../utils/isWithinEventSubprocess';\nimport {isEqual} from 'lodash-es';\n\nconst browserDetector = new BrowserDetector();\n\ntype State = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n definitions?: any;\n elementRegistry?: ElementRegistry;\n graphicsFactory?: GraphicsFactory;\n elementsById?: {[key: string]: ElementLike} | undefined;\n isMinimapActive: boolean;\n isFullscreenActive: boolean;\n isLoaded: boolean;\n linkedStartForm: string | undefined;\n viewer?: BpmnJS;\n};\n\nconst DEFAULT_STATE: State = {\n definitions: undefined,\n elementsById: undefined,\n isMinimapActive: false,\n isFullscreenActive: false,\n isLoaded: false,\n linkedStartForm: undefined,\n viewer: undefined,\n elementRegistry: undefined,\n graphicsFactory: undefined,\n};\n\nclass Diagram {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDiagramDetails = async (xmlWithLinkedForms: string) => {\n try {\n //@ts-expect-error Property 'rootElement' does not exist on type 'Definitions'.ts(2339)\n\n const {rootElement: definitions, elementsById} =\n await parseDiagramXML(xmlWithLinkedForms);\n this.setDefinitions(definitions, elementsById);\n } catch (error) {\n console.error('Error parsing diagram XML', error);\n }\n };\n\n setDefinitions(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n definitions: any,\n elementsById: {[key: string]: ElementLike['businessObject']} | undefined,\n ) {\n if (!isEqual(this.state.definitions, definitions)) {\n this.state.definitions = definitions;\n }\n if (!isEqual(this.state.elementsById, elementsById)) {\n this.state.elementsById = elementsById;\n }\n }\n\n get flowNodes(): Array<{id: string; $type: string; isActivatable: boolean}> {\n return getFlowNodes(this.state.elementsById).map((flowNode) => ({\n ...flowNode,\n isActivatable: isActivatable(flowNode),\n }));\n }\n\n get messageSubscriptionCandidates() {\n return getMessageSubscriptionCandidates(this.state.elementsById);\n }\n\n get signalCandidates() {\n return getSignalCandidates(this.state.elementsById);\n }\n\n get errorEventDefinitions() {\n return getBpmnErrors(this.state.elementsById);\n }\n\n get elementsWithJobWorker() {\n return getElementsWithJobWorker(this.elements);\n }\n\n get elementsWithExecutionListeners() {\n return getElementsWithExecutionListeners(this.elements);\n }\n\n get diagramProblemCount() {\n return this.elementsWithExecutionListeners.length;\n }\n\n get errorEvents() {\n return getErrorEvents(this.state.elementsById).map(\n ({attachedToRef, eventDefinitions, id}) => {\n const errorId = eventDefinitions?.[0]?.errorRef?.id;\n const errorEvent = this.errorEventDefinitions.find(\n ({id}) => id === errorId,\n );\n return {\n attachedElementId: attachedToRef?.id ?? null,\n errorId,\n errorElementId: id,\n errorCode: errorEvent?.errorCode,\n errorName: errorEvent?.name,\n };\n },\n );\n }\n\n get errorBoundaryEvents() {\n return this.errorEvents.filter(\n ({attachedElementId}) => attachedElementId !== null,\n );\n }\n\n get errorStartEvents() {\n return this.errorEvents.filter(\n ({attachedElementId}) => attachedElementId === null,\n );\n }\n\n get startEventWithLinkedForm() {\n return this.state.elementRegistry\n ?.filter((element) => {\n return isStartEvent(element) && !isLabel(element);\n })\n ?.find((startEvent) => {\n const startEventFormDefinition = getFormDefinition(startEvent);\n return startEventFormDefinition?.formId !== undefined;\n });\n }\n\n get processName() {\n return this.state.definitions?.rootElements?.find(\n ({$type}: {$type: string}) => $type === 'bpmn:Process',\n )?.name;\n }\n\n fetchLinkedStartForm = async () => {\n if (this.startEventWithLinkedForm === undefined) {\n return;\n }\n\n const formId = getFormDefinition(this.startEventWithLinkedForm)?.formId;\n const formFile = await playEnvironmentStore.fetchFilesByFormId?.(\n playEnvironmentStore.projectId,\n formId,\n );\n // while there can be multiple forms with the same user defined Id, it is not possible to deploy a process (from web modeler )\n // that references such forms. Therefore, we can assume that there is only one form with the given formId\n const fileId = formFile?.at(0)?.id;\n if (!fileId) {\n return;\n }\n const formContent = await playEnvironmentStore.fetchFileById?.(fileId);\n this.state.linkedStartForm = formContent?.content ?? '{}';\n };\n\n getErrorBoundaryEventsForElement = (\n element?: ElementLike,\n errorBoundaryEvents: string[] = [],\n ): string[] => {\n if (element === undefined) {\n return errorBoundaryEvents;\n }\n\n const elementWithErrorBoundaryEvent = this.errorBoundaryEvents.find(\n ({attachedElementId}) => attachedElementId === element.id,\n );\n\n if (elementWithErrorBoundaryEvent !== undefined) {\n errorBoundaryEvents.push(elementWithErrorBoundaryEvent.errorId);\n }\n\n return this.getErrorBoundaryEventsForElement(\n element.parent,\n errorBoundaryEvents,\n );\n };\n\n getAvailableErrorEvents = (element?: ElementLike) => {\n if (element === undefined || element === null) {\n return [];\n }\n\n return [\n ...this.errorBoundaryEvents.filter(({errorId}) => {\n return this.getErrorBoundaryEventsForElement(element).includes(errorId);\n }),\n ...(isWithinEventSubprocess(element) ? [] : this.errorStartEvents),\n ].map(({errorCode, errorName, errorElementId}) => ({\n errorElementId,\n errorCode,\n errorName,\n }));\n };\n\n get elements() {\n return this.state.elementRegistry?.getAll();\n }\n\n get flowNodeIds() {\n return this.flowNodes.map(({id}) => id);\n }\n\n get selectableFlowNodeIds() {\n return Array.from(\n new Set(\n modificationsStore.isMovingToken\n ? modificationsStore.modifiableFlowNodes\n : elementInstancesStore.elementIds\n .filter((elementId) => this.flowNodeIds.includes(elementId))\n .concat(modificationsStore.modifiableFlowNodes),\n ),\n );\n }\n\n get viewer() {\n return this.state.viewer;\n }\n\n toggleMinimap = () => {\n this.state.isMinimapActive = !this.state.isMinimapActive;\n };\n\n /**\n * Forces a recalculation of the root container which\n * most of the times fixes a Safari viewport height bug.\n *\n * Shall only be used in Safari\n */\n forceRootResize = () => {\n const rootElement = document.querySelector('#root');\n //@ts-expect-error 'rootElement' is possibly 'null'.ts(18047)\n rootElement.style.height = '99.9vh';\n\n requestAnimationFrame(() => {\n //@ts-expect-error 'rootElement' is possibly 'null'.ts(18047)\n rootElement.style.height = '100vh';\n });\n };\n exitFullscreen() {\n this.state.isFullscreenActive = false;\n\n if (browserDetector.isSafari) {\n this.forceRootResize();\n }\n }\n\n startLoading = () => {\n this.state.isLoaded = false;\n };\n\n finishLoading = (viewer: BpmnJS) => {\n this.state.elementRegistry = viewer.getElementRegistry();\n this.state.viewer = viewer;\n this.state.graphicsFactory = viewer.getGraphicsFactory();\n this.state.isLoaded = true;\n };\n\n toXml = async (): Promise<SaveXMLResult | undefined> => {\n return this.state.viewer?.saveXML();\n };\n\n setIsLoaded = (isLoaded = true) => {\n this.state.isLoaded = isLoaded;\n };\n\n handleFullscreenToggle = () => {\n if (browserDetector.isSafari) {\n //@ts-expect-error Property 'webkitFullscreenEnabled' does not exist on type 'Document'.\n if (document.webkitFullscreenEnabled) {\n //@ts-expect-error Property 'webkitFullscreenElement' does not exist on type 'Document'.\n if (!document.webkitRequestFullscreen) {\n //@ts-expect-error Property 'webkitExitFullscreen' does not exist on type 'Document'.\n document.documentElement.webkitRequestFullscreen();\n this.state.isFullscreenActive = true;\n } else {\n //@ts-expect-error Property 'webkitExitFullscreen' does not exist on type 'Document'.\n document.webkitExitFullscreen();\n this.exitFullscreen();\n }\n }\n } else {\n if (document.fullscreenEnabled) {\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n this.state.isFullscreenActive = true;\n } else {\n document.exitFullscreen();\n this.exitFullscreen();\n }\n }\n }\n };\n\n focusOnElement = (elementId: string) => {\n this.state.viewer?.focusOnElement(elementId);\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const diagramStore = new Diagram();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {POLLING_INTERVAL} from './constants';\n\nfunction retryWrapper<T>(\n dynamicFunction: () => Promise<T | null>,\n): Promise<T | null> {\n return new Promise((resolve) => {\n let attempts = 0;\n const maxAttempts = 10;\n\n const interval = setInterval(async () => {\n const result = await dynamicFunction();\n if (result !== null) {\n clearInterval(interval);\n resolve(result);\n }\n\n attempts++;\n\n if (attempts >= maxAttempts) {\n clearInterval(interval);\n resolve(null);\n }\n }, POLLING_INTERVAL);\n });\n}\n\nexport {retryWrapper};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {UserTaskNode} from 'modules/types';\n\nconst fetchUserTask = ({\n instanceKey,\n elementId,\n}: {\n instanceKey?: number;\n elementId: string;\n}): Promise<UserTaskNode | null> => {\n return retryWrapper<UserTaskNode>(async () => {\n const {userTasks} = await zeebePlayService.fetchUserTasks(instanceKey);\n\n const userTask = userTasks?.find(\n ({taskDefinitionId, taskState}) =>\n taskDefinitionId === elementId && taskState !== 'COMPLETED',\n );\n\n if (userTask !== undefined) {\n return userTask;\n }\n\n return null;\n });\n};\n\nexport {fetchUserTask};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {FlowNodeInstanceDto} from 'modules/types';\n\nconst waitForActiveFlowNodeInstance = ({\n instanceKey,\n elementId,\n}: {\n instanceKey?: number;\n elementId: string;\n}): Promise<FlowNodeInstanceDto | null> => {\n return retryWrapper<FlowNodeInstanceDto>(async () => {\n const {flowNodeInstances} =\n await zeebePlayService.fetchFlowNodeInstances(instanceKey);\n\n const flowNodeInstance = flowNodeInstances?.find(\n ({flowNodeId, state}) =>\n flowNodeId === elementId && state !== 'COMPLETED',\n );\n\n if (flowNodeInstance !== undefined) {\n return flowNodeInstance;\n }\n\n return null;\n });\n};\n\nexport {waitForActiveFlowNodeInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {Incident} from 'modules/types';\n\nconst fetchIncidentForFlowNodeInstance = ({\n instanceKey,\n elementId,\n}: {\n instanceKey?: number;\n elementId: string;\n}): Promise<Incident | null> => {\n return retryWrapper<Incident>(async () => {\n const {incidents} = await zeebePlayService.fetchIncidents(instanceKey);\n const {flowNodeInstances} =\n await zeebePlayService.fetchFlowNodeInstances(instanceKey);\n\n const incident = incidents.find((incident) => {\n const elementInstance = flowNodeInstances?.find(\n ({incidentKey, flowNodeId}) => {\n return (\n incidentKey !== undefined &&\n incidentKey === incident.key &&\n flowNodeId === elementId\n );\n },\n );\n\n return (\n ['ACTIVE', 'MIGRATED'].includes(incident.state) &&\n elementInstance !== undefined\n );\n });\n\n return incident ?? null;\n });\n};\n\nexport {fetchIncidentForFlowNodeInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\ntype StartInstanceAction = {\n action: 'startInstance';\n elementId: string;\n type: 'start-event' | 'message-start-event' | 'broadcast-signal-event';\n variables?: string;\n};\n\ntype PublishMessageAction = {\n action: 'publishMessage';\n elementId: string;\n messageName: string;\n messageCorrelationKey?: string;\n variables?: string;\n timeToLive?: string;\n messageId?: string;\n};\n\ntype BroadcastSignalAction = {\n action: 'broadcastSignal';\n elementId: string;\n signalName: string;\n variables?: string;\n};\n\ntype CompleteJobAction = {\n action: 'completeJob';\n elementId: string;\n type: 'userTask' | 'serviceTask';\n taskDefinitionType?: string;\n variables?: string;\n};\n\ntype ThrowJobAction = {\n action: 'throwJob';\n elementId: string;\n taskDefinitionType?: string;\n errorCode: string;\n};\n\ntype ResolveIncidentAction = {\n action: 'resolveIncident';\n elementId: string;\n hasJob: boolean;\n};\n\ntype SetVariablesAction = {\n action: 'setVariables';\n variables: string;\n};\n\ntype Action =\n | StartInstanceAction\n | SetVariablesAction\n | PublishMessageAction\n | BroadcastSignalAction\n | CompleteJobAction\n | ThrowJobAction\n | ResolveIncidentAction\n | SetVariablesAction;\n\nfunction generateHistoryKey(processInstanceId: number) {\n const historyEntries = JSON.parse(\n localStorage.getItem('historyEntries') || '[]',\n );\n\n if (!historyEntries.includes(processInstanceId)) {\n historyEntries.push(processInstanceId);\n }\n\n while (historyEntries.length > 20) {\n const keyToDelete = historyEntries.shift();\n localStorage.removeItem('history ' + keyToDelete);\n }\n\n localStorage.setItem('historyEntries', JSON.stringify(historyEntries));\n\n const historyKey = `history ${processInstanceId}`;\n\n return historyKey;\n}\n\nfunction updateUserActionHistory(historyKey: string, state: Action) {\n const currentActionHistory = localStorage.getItem(historyKey) || '[]';\n\n const actions = JSON.parse(currentActionHistory) as Action[];\n\n localStorage.setItem(historyKey, JSON.stringify([...actions, state]));\n}\n\nfunction setUserActionHistory(historyKey: string, actions: Action[]) {\n localStorage.setItem(historyKey, JSON.stringify(actions));\n}\n\nfunction getUserActionHistory(storageKey: string) {\n return JSON.parse(localStorage.getItem(storageKey) || '[]') as Action[];\n}\n\nfunction isCompleteUserActionHistoryAvailable(storageKey: string) {\n const history = getUserActionHistory(storageKey);\n return history.length > 0 && history[0].action === 'startInstance';\n}\n\nexport {\n updateUserActionHistory,\n generateHistoryKey,\n getUserActionHistory,\n setUserActionHistory,\n isCompleteUserActionHistoryAvailable,\n};\n\nexport type {Action, StartInstanceAction};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ProcessInstanceDetail} from 'modules/types';\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\nfunction waitForNewInstance(\n currentInstances: ProcessInstanceDetail[],\n): Promise<number | null> {\n return retryWrapper(async () => {\n const {processInstances, success} = await zeebePlayService.fetchInstances(\n playEnvironmentStore.state.processDefinitionKey,\n );\n if (!success) {\n return null;\n } else {\n const newInstance = processInstances[0];\n if (newInstance && newInstance.key !== currentInstances[0]?.key) {\n return newInstance.key;\n } else {\n return null;\n }\n }\n });\n}\nexport {waitForNewInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const isValidJSON = (str?: string | null) => {\n if (str === undefined || str === null) {\n return false;\n }\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n IReactionDisposer,\n action,\n computed,\n makeObservable,\n observable,\n override,\n} from 'mobx';\nimport {VariableDto, Variable, BPMNIconType} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {flowNodeSelectionStore} from './flowNodeSelection';\nimport {elementInstancesStore} from './elementInstances';\nimport {processInstanceStore} from './processInstance';\nimport {PollingHandler} from './pollingHandler';\nimport {playEnvironmentStore} from './playEnvironment';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n variables: VariableDto[];\n status: 'initial' | 'first-fetch' | 'fetching' | 'fetched' | 'error';\n isUpdatingVariable: boolean;\n};\n\nconst DEFAULT_STATE: State = {\n variables: [],\n isUpdatingVariable: false,\n status: 'initial',\n};\n\nclass Variables extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n isPollRequestRunning: boolean = false;\n intervalId: null | ReturnType<typeof setInterval> = null;\n pollingDisposer: null | IReactionDisposer = null;\n fetchVariablesDisposer: null | IReactionDisposer = null;\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n variables: computed,\n handleSuccess: action,\n handleError: action,\n setIsUpdatingVariable: action,\n startFetching: action,\n scopeId: computed,\n isInitialLoadComplete: computed,\n reset: override,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchVariables({});\n\n pollData = () =>\n this.fetchVariables({\n ignoreFailure: true,\n });\n\n fetchVariables = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n const {success, variables} = await zeebePlayService.fetchVariables({\n instanceKey,\n });\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(variables);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n fetchVariable = async (variableKey: number) => {\n const {variable} = await zeebePlayService.fetchVariable(variableKey);\n\n return variable;\n };\n\n handleSuccess = (variables: VariableDto[] | undefined) => {\n if (!isEqual(variables, this.state.variables)) {\n this.state.variables = variables ?? [];\n }\n this.state.status = 'fetched';\n };\n\n setVariables = async ({\n instanceKey,\n scope,\n variablesString,\n }: {\n instanceKey?: number;\n scope?: number | null;\n variablesString: string;\n }) => {\n this.setIsUpdatingVariable(true);\n const {success, status} = await zeebePlayService.setVariables({\n elementInstanceKey: scope ?? instanceKey ?? 0,\n variablesString,\n });\n this.setIsUpdatingVariable(false);\n\n return {success, status};\n };\n\n setIsUpdatingVariable = (isUpdating: boolean) => {\n this.state.isUpdatingVariable = isUpdating;\n };\n\n startFetching = () => {\n if (this.state.status === 'initial') {\n this.state.status = 'first-fetch';\n } else {\n this.state.status = 'fetching';\n }\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n get isInitialLoadComplete() {\n return !['initial', 'first-fetch'].includes(this.state.status);\n }\n\n get variables() {\n const variables = this.state.variables.map<Variable>((variable) => {\n const elementInstance =\n elementInstancesStore.state.elementInstances?.find(\n (elementInstance) => {\n return elementInstance.key === variable.scopeKey;\n },\n );\n\n let scope = undefined;\n\n if (elementInstance !== undefined) {\n scope = {\n elementId: elementInstance.flowNodeId,\n elementName: elementInstance.flowNodeName ?? null,\n bpmnElementType: elementInstance.type,\n };\n } else if (variable.scopeKey === variable.processInstanceKey) {\n scope = {\n elementId: playEnvironmentStore.processId,\n elementName: null,\n bpmnElementType: 'PROCESS' as BPMNIconType,\n };\n }\n\n return {\n ...variable,\n scope,\n };\n });\n\n return variables;\n }\n\n get scopeId() {\n const {selection} = flowNodeSelectionStore.state;\n if (selection?.flowNodeInstanceId !== undefined) {\n return selection.flowNodeInstanceId;\n }\n\n const {elementInstances} = elementInstancesStore.state;\n\n const elementInstancesByElementId = elementInstances?.filter(\n (elementInstance) => elementInstance.flowNodeId === selection?.flowNodeId,\n );\n\n if (\n elementInstancesByElementId === undefined ||\n elementInstancesByElementId.length === 0\n ) {\n return null;\n }\n\n if (elementInstancesByElementId.length > 1) {\n return elementInstancesByElementId[elementInstancesByElementId.length - 1]\n .key;\n }\n\n return elementInstancesByElementId[0].key;\n }\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const variablesStore = new Variables();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Element} from 'bpmn-js/lib/model/Types';\n\nconst canActivateEventSubProcess = ({\n processId,\n element,\n isSubProcessStartEvent,\n activeElementIds,\n isProcessRunning,\n}: {\n processId?: string;\n element: Element;\n isSubProcessStartEvent: boolean;\n activeElementIds: string[];\n isProcessRunning: boolean;\n}) => {\n // A message/signal event can activate an event sub process if the bpmn process\n // is running and the event itself is a start event in an event sub process\n if (!isProcessRunning || !isSubProcessStartEvent) {\n return false;\n }\n // and the event's grandparent is active. That can be the root process,\n // but also another sub process\n const eventSubProcessId = element.$parent.id;\n const grandParentId = element.$parent?.$parent?.id;\n const isEventSubProcessActive =\n activeElementIds.includes(eventSubProcessId) ||\n eventSubProcessId === processId;\n const isGrandParentActive =\n activeElementIds.includes(grandParentId) || grandParentId === processId;\n if (element.isInterrupting) {\n // interrupting events can only be activated once as they steal all the tokens\n // from their scope (e.g, root process or containing sub process)\n // so they cannot be activated again if their event sub process is already active and\n // its parent is not active (as all tokens have been taken)\n return isGrandParentActive && !isEventSubProcessActive;\n } else {\n // non-interrupting events can repeatedly be activated\n // as long as their grandparent e.g., root process or sub process is active\n return isGrandParentActive;\n }\n};\n\nexport {canActivateEventSubProcess};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {MessageSubscriptionCandidate, SignalCandidate} from 'modules/types';\nimport {canActivateEventSubProcess} from './canActivateEventSubProcess';\n\nconst isCandidateActive = ({\n processId,\n isProcessRunning,\n candidate,\n activeElementIds,\n}: {\n processId?: string;\n isProcessRunning: boolean;\n candidate: SignalCandidate | MessageSubscriptionCandidate;\n activeElementIds: string[];\n}) => {\n return (\n activeElementIds.includes(candidate.elementId) ||\n (candidate.attachedToElementId &&\n activeElementIds.includes(candidate.attachedToElementId)) ||\n canActivateEventSubProcess({\n element: candidate.element,\n activeElementIds,\n isProcessRunning,\n isSubProcessStartEvent: candidate.isSubProcessStartEvent,\n processId,\n })\n );\n};\n\nexport {isCandidateActive};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, computed, makeObservable, observable, override} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {PollingHandler} from './pollingHandler';\nimport {Statistic} from 'modules/types';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n statistics: Array<Statistic>;\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n statistics: [],\n status: 'initial',\n};\n\nclass Statistics extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n completedElementIds: computed,\n activeElementIds: computed,\n activeElementIdsWithoutIncident: computed,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchStatistics({});\n\n pollData = () =>\n this.fetchStatistics({\n ignoreFailure: true,\n });\n\n fetchStatistics = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n\n const {success, statistics} =\n await zeebePlayService.fetchStatistics(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(statistics);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (statistics: Array<Statistic>) => {\n if (!isEqual(statistics, this.state.statistics)) {\n this.state.statistics = statistics ?? [];\n }\n\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n get completedElementIds() {\n return this.state.statistics\n .filter(({completed}) => Number(completed) > 0)\n .map(({activityId}) => activityId);\n }\n\n isElementProcessed = (elementId: string) => {\n return statisticsStore.state.statistics.some(\n ({activityId}) => activityId === elementId,\n );\n };\n\n get activeElementIds() {\n return this.state.statistics\n .filter(\n ({active, incidents}) => Number(active) > 0 || Number(incidents) > 0,\n )\n .map(({activityId}) => activityId);\n }\n\n get activeElementIdsWithoutIncident() {\n return this.state.statistics\n .filter(\n ({active, incidents}) => Number(active) > 0 && Number(incidents) === 0,\n )\n .map(({activityId}) => activityId);\n }\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const statisticsStore = new Statistics();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {computed, makeObservable} from 'mobx';\nimport {VariableDto} from 'modules/types';\nimport {isValidJSON} from 'modules/utils/isValidJSON';\nimport {\n isEventSubProcessMessageStartEvent,\n isMessageStartEvent,\n} from 'modules/utils/flowNodes';\nimport {diagramStore} from './diagram';\nimport {processInstanceStore} from './processInstance';\nimport {playEnvironmentStore} from './playEnvironment';\nimport {variablesStore} from './variables';\nimport {isCandidateActive} from './utils/isCandidateActive';\nimport {statisticsStore} from './statistics';\n\nconst generateKeyCandidate = (\n correlationDefinition: string | undefined,\n variables: VariableDto[],\n) => {\n if (!correlationDefinition) {\n return;\n }\n\n if (correlationDefinition.startsWith('=')) {\n const keyCandidate = correlationDefinition.substring(1);\n const valueCandidate = variables.find(\n (variable) => variable.name === keyCandidate,\n );\n if (valueCandidate?.value && isValidJSON(valueCandidate?.value)) {\n return JSON.parse(valueCandidate.value);\n } else {\n return correlationDefinition.substring(1);\n }\n }\n};\n\nclass MessageSubscriptions {\n constructor() {\n makeObservable(this, {\n startMessageSubscriptionCandidates: computed.struct,\n activeMessageSubscriptionCandidates: computed.struct,\n });\n }\n\n get activeMessageSubscriptionCandidates() {\n const {messageSubscriptionCandidates} = diagramStore;\n const {activeElementIdsWithoutIncident} = statisticsStore;\n const {variables} = variablesStore.state;\n const isProcessRunning =\n processInstanceStore.state.processInstance?.state === 'ACTIVE';\n\n return messageSubscriptionCandidates\n .filter((candidate) =>\n isCandidateActive({\n processId: playEnvironmentStore.processId,\n activeElementIds: activeElementIdsWithoutIncident,\n candidate,\n isProcessRunning,\n }),\n )\n .map((candidate) => ({\n ...candidate,\n keyCandidate: generateKeyCandidate(\n candidate.messageCorrelationKey,\n variables,\n ),\n }));\n }\n\n get startMessageSubscriptionCandidates() {\n return diagramStore.messageSubscriptionCandidates.filter(\n (candidate) =>\n isMessageStartEvent(candidate.element) &&\n !isEventSubProcessMessageStartEvent(candidate.element),\n );\n }\n}\n\nexport const messageSubscriptionsStore = new MessageSubscriptions();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {computed, makeObservable} from 'mobx';\nimport {\n isEventSubProcessSignalStartEvent,\n isSignalStartEvent,\n} from 'modules/utils/flowNodes';\nimport {diagramStore} from './diagram';\nimport {processInstanceStore} from './processInstance';\nimport {playEnvironmentStore} from './playEnvironment';\nimport {isCandidateActive} from './utils/isCandidateActive';\nimport {statisticsStore} from './statistics';\n\nclass Signals {\n constructor() {\n makeObservable(this, {\n activeSignalCandidates: computed.struct,\n startSignalCandidates: computed.struct,\n });\n }\n\n get activeSignalCandidates() {\n const {signalCandidates} = diagramStore;\n const {activeElementIdsWithoutIncident} = statisticsStore;\n const isRunning =\n processInstanceStore.state.processInstance?.state === 'ACTIVE';\n\n return signalCandidates.filter((candidate) =>\n isCandidateActive({\n processId: playEnvironmentStore.processId,\n activeElementIds: activeElementIdsWithoutIncident,\n candidate,\n isProcessRunning: isRunning,\n }),\n );\n }\n\n get startSignalCandidates() {\n return diagramStore.signalCandidates.filter(\n (candidate) =>\n isSignalStartEvent(candidate.element) &&\n !isEventSubProcessSignalStartEvent(candidate.element),\n );\n }\n}\n\nexport const signalsStore = new Signals();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {isCandidateActive} from '../utils/isCandidateActive';\nimport {playEnvironmentStore} from '../playEnvironment';\nimport {MessageSubscriptionCandidate, SignalCandidate} from 'modules/types';\n\nconst waitForCandidate = ({\n instanceKey,\n elementId,\n candidates,\n}: {\n instanceKey?: number;\n elementId: string;\n candidates: MessageSubscriptionCandidate[] | SignalCandidate[];\n}): Promise<boolean | null> => {\n return retryWrapper<boolean>(async () => {\n const {statistics} = await zeebePlayService.fetchStatistics(instanceKey);\n\n const {processInstance} =\n await zeebePlayService.fetchInstanceDetails(instanceKey);\n\n const hasActiveCandidate = candidates\n .filter((candidate) =>\n isCandidateActive({\n processId: playEnvironmentStore.processId,\n activeElementIds: statistics\n .filter(\n ({active, incidents}) =>\n Number(active) > 0 && Number(incidents) === 0,\n )\n .map(({activityId}) => activityId),\n candidate,\n isProcessRunning: processInstance.state === 'ACTIVE',\n }),\n )\n .some((e) => e.elementId === elementId);\n\n if (hasActiveCandidate) {\n return true;\n }\n\n return null;\n });\n};\n\nexport {waitForCandidate};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {fetchUserTask} from './fetchUserTask';\nimport {waitForActiveFlowNodeInstance} from './waitForActiveFlowNodeInstance';\nimport {fetchIncidentForFlowNodeInstance} from './fetchIncidentKeyForFlowNodeInstance';\nimport {\n Action,\n generateHistoryKey,\n setUserActionHistory,\n StartInstanceAction,\n} from 'modules/utils/userActionHistory';\nimport {waitForNewInstance} from 'modules/utils/waitForNewInstance';\nimport {playEnvironmentStore} from '../playEnvironment';\nimport {messageSubscriptionsStore} from '../messageSubscriptions';\nimport {signalsStore} from '../signals';\nimport {waitForCandidate} from './waitForCandidate';\nimport {diagramStore} from '../diagram';\n\n// This class will be reused by both the Rewind and Scenarios stores, as they share common logic\nclass Rerun {\n startNewInstance = async function startNewInstance(\n bpmnProcessId: string,\n variables = '{}',\n ) {\n const result = await zeebePlayService.startInstance({\n bpmnProcessId,\n variables,\n });\n\n return result.instanceId;\n };\n\n handleMessageEvent = async function handleMessageEvent({\n messageName,\n messageId,\n variables,\n messageCorrelationKey,\n timeToLive,\n elementId,\n isStartEvent,\n instanceKey,\n }: {\n messageName: string;\n messageId?: string;\n messageCorrelationKey?: string;\n variables?: string;\n timeToLive?: string;\n elementId: string;\n isStartEvent: boolean;\n instanceKey?: number;\n }) {\n if (!isStartEvent) {\n const doesMessageSubscriptionCandidateExist = await waitForCandidate({\n instanceKey,\n elementId,\n candidates: diagramStore.messageSubscriptionCandidates,\n });\n\n if (!doesMessageSubscriptionCandidateExist) {\n console.error('could not find active message subscription');\n return {success: false};\n }\n }\n\n await zeebePlayService.publishMessage({\n messageName,\n correlationKey: messageCorrelationKey,\n variables,\n timeToLive,\n messageId,\n });\n };\n\n handleSignalEvent = async function handleSignalEvent({\n signalName,\n variables,\n elementId,\n isStartEvent,\n instanceKey,\n }: {\n signalName: string;\n variables?: string;\n elementId: string;\n isStartEvent: boolean;\n instanceKey?: number;\n }) {\n if (!isStartEvent) {\n const doesSignalCandidateExist = await waitForCandidate({\n instanceKey,\n elementId,\n candidates: diagramStore.signalCandidates,\n });\n\n if (!doesSignalCandidateExist) {\n console.error('could not find active signal candidate');\n return {success: false};\n }\n }\n\n await zeebePlayService.broadcastSignal({\n signalName,\n variables,\n });\n };\n\n handleUserTask = async function handleUserTask({\n elementId,\n instanceKey,\n variables = '{}',\n }: {\n elementId: string;\n instanceKey?: number;\n variables?: string;\n }) {\n const userTask = await fetchUserTask({\n instanceKey,\n elementId: elementId,\n });\n\n if (userTask === null) {\n return {success: false};\n }\n\n return zeebePlayService.completeUserTask({\n taskId: userTask?.id,\n variables,\n isZeebeUserTask: userTask?.implementation === 'ZEEBE_USER_TASK',\n });\n };\n\n handleServiceTask = async function handleServiceTask({\n elementId,\n instanceKey,\n taskDefinitionType,\n variables = '{}',\n }: {\n elementId: string;\n instanceKey?: number;\n taskDefinitionType?: string;\n variables?: string;\n }) {\n const flowNodeInstance = await waitForActiveFlowNodeInstance({\n instanceKey,\n elementId,\n });\n\n if (flowNodeInstance === null) {\n return {success: false};\n }\n\n return zeebePlayService.completeJob({\n processInstanceKey: instanceKey,\n taskDefinitionType,\n variables,\n elementId,\n });\n };\n\n handleThrowError = async function handleThrowError({\n elementId,\n instanceKey,\n taskDefinitionType,\n errorCode = '',\n }: {\n elementId: string;\n instanceKey?: number;\n taskDefinitionType?: string;\n errorCode?: string;\n }) {\n const flowNodeInstance = await waitForActiveFlowNodeInstance({\n instanceKey,\n elementId,\n });\n\n if (flowNodeInstance === null) {\n return {success: false};\n }\n\n return zeebePlayService.throwError({\n taskDefinitionType,\n processInstanceKey: instanceKey,\n errorCode,\n elementId,\n });\n };\n\n handleResolveIncident = async function handleResolveIncident({\n elementId,\n instanceKey,\n hasJob,\n }: {\n elementId: string;\n instanceKey?: number;\n hasJob: boolean;\n }) {\n const incident = await fetchIncidentForFlowNodeInstance({\n instanceKey,\n elementId,\n });\n\n if (incident === null) {\n return {success: false};\n }\n\n if (hasJob) {\n await zeebePlayService.updateRetries({\n jobKey: incident.jobKey,\n retries: 1,\n });\n }\n\n return zeebePlayService.resolveIncident(incident.key);\n };\n\n handleSetVariables = async function handleSetVariables({\n instanceKey,\n scope,\n variables,\n }: {\n instanceKey?: number;\n scope?: number;\n variables: string;\n }) {\n return zeebePlayService.setVariables({\n elementInstanceKey: scope ?? instanceKey ?? 0,\n variablesString: variables,\n });\n };\n\n createNewInstance = async ({\n startActionType,\n bpmnProcessId,\n elementId,\n variables,\n }: {\n startActionType: StartInstanceAction['type'];\n bpmnProcessId: string;\n elementId: string;\n variables?: string;\n }) => {\n const {processInstances: currentInstances, success} =\n await zeebePlayService.fetchInstances(\n playEnvironmentStore.state.processDefinitionKey,\n );\n\n if (!success) {\n // If we are unable to fetch the current instances, we cannot determine if a new instance was created (particularly for publish messages or broadcast signals). In this case, we should return undefined, which will cause the re-run process to fail.\n return;\n }\n\n let newInstanceKey: number | undefined;\n\n if (startActionType === 'start-event') {\n newInstanceKey = await this.startNewInstance(bpmnProcessId, variables);\n } else if (startActionType === 'message-start-event') {\n const definitionMessage =\n elementId === undefined\n ? messageSubscriptionsStore.startMessageSubscriptionCandidates?.[0]\n : messageSubscriptionsStore.startMessageSubscriptionCandidates?.find(\n (candidate) => candidate.elementId === elementId,\n );\n\n if (definitionMessage === undefined) {\n newInstanceKey = await this.startNewInstance(bpmnProcessId, variables);\n } else {\n await this.handleMessageEvent({\n messageName: definitionMessage?.messageName,\n variables: variables,\n isStartEvent: true,\n elementId: definitionMessage.elementId,\n });\n\n newInstanceKey =\n (await waitForNewInstance(currentInstances)) ?? undefined;\n }\n } else if (startActionType == 'broadcast-signal-event') {\n const definitionSignal =\n elementId === undefined\n ? signalsStore.startSignalCandidates?.[0]\n : signalsStore.startSignalCandidates?.find(\n (candidate) => candidate.elementId === elementId,\n );\n\n if (definitionSignal === undefined) {\n newInstanceKey = await this.startNewInstance(bpmnProcessId, variables);\n } else {\n await this.handleSignalEvent({\n signalName: definitionSignal?.signalName,\n variables,\n isStartEvent: true,\n elementId: definitionSignal.elementId,\n });\n\n newInstanceKey =\n (await waitForNewInstance(currentInstances)) ?? undefined;\n }\n }\n\n return newInstanceKey;\n };\n\n repeatUserActions = async ({\n newInstanceKey,\n actions,\n untilElementId,\n breakOnFailure,\n }: {\n newInstanceKey: number;\n actions: Array<Action>;\n untilElementId?: string;\n breakOnFailure?: boolean;\n }) => {\n let response: {success: boolean} = {success: true};\n const newActions: Array<Action> = [];\n\n for (const action of actions) {\n if (action.action === 'startInstance') {\n newActions.push(action);\n continue;\n }\n\n if (\n untilElementId !== undefined &&\n action.action !== 'setVariables' &&\n action.elementId === untilElementId\n ) {\n break;\n }\n\n switch (action.action) {\n case 'completeJob': {\n if (action.type === 'userTask') {\n response = await this.handleUserTask({\n elementId: action.elementId,\n instanceKey: newInstanceKey,\n variables: action.variables,\n });\n } else {\n response = await this.handleServiceTask({\n elementId: action.elementId,\n taskDefinitionType: action.taskDefinitionType,\n instanceKey: newInstanceKey,\n variables: action.variables,\n });\n }\n\n break;\n }\n\n case 'publishMessage': {\n await this.handleMessageEvent({\n messageName: action.messageName,\n messageId: action.messageId,\n variables: action.variables,\n timeToLive: action.timeToLive,\n elementId: action.elementId,\n messageCorrelationKey: action.messageCorrelationKey,\n isStartEvent: false,\n instanceKey: newInstanceKey,\n });\n\n break;\n }\n\n case 'broadcastSignal': {\n await this.handleSignalEvent({\n signalName: action.signalName,\n variables: action.variables,\n isStartEvent: false,\n elementId: action.elementId,\n instanceKey: newInstanceKey,\n });\n\n break;\n }\n\n case 'throwJob': {\n response = await this.handleThrowError({\n elementId: action.elementId,\n taskDefinitionType: action.taskDefinitionType,\n instanceKey: newInstanceKey,\n errorCode: action.errorCode,\n });\n break;\n }\n\n case 'resolveIncident': {\n response = await this.handleResolveIncident({\n elementId: action.elementId,\n instanceKey: newInstanceKey,\n hasJob: action.hasJob,\n });\n break;\n }\n\n case 'setVariables': {\n await this.handleSetVariables({\n instanceKey: newInstanceKey,\n scope: newInstanceKey,\n variables: action.variables,\n });\n break;\n }\n }\n\n if (breakOnFailure && !response.success) {\n setUserActionHistory(generateHistoryKey(newInstanceKey), newActions);\n\n return {success: false};\n }\n\n newActions.push(action);\n }\n\n setUserActionHistory(generateHistoryKey(newInstanceKey), newActions);\n return {success: true};\n };\n}\n\nexport {Rerun};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Scenario} from 'modules/types';\nimport {Instruction, TestCase, TestScenarioFileContents} from './index';\nimport {Action} from '../userActionHistory';\n\nexport type TranslateResult = {\n isSuccess: boolean;\n testScenarioFile?: TestScenarioFileContents;\n errorMessage?: string;\n};\n\nexport function translateToTestScenarioFile(\n scenariosToTranslate: Array<Scenario>,\n processId: string,\n): TranslateResult {\n if (!scenariosToTranslate || !Array.isArray(scenariosToTranslate)) {\n return {\n isSuccess: false,\n errorMessage: 'Invalid scenarios: expected an array of scenarios',\n };\n }\n\n if (!processId || typeof processId !== 'string' || processId.trim() === '') {\n return {\n isSuccess: false,\n errorMessage: 'Invalid processId: expected a non-empty string',\n };\n }\n\n try {\n const testCases: Array<TestCase> = [];\n\n for (const scenario of scenariosToTranslate) {\n const testCaseResponse = translateToTestCase(scenario, processId);\n if (testCaseResponse.isSuccess) {\n testCases.push(testCaseResponse.testCase);\n } else {\n return {\n isSuccess: false,\n errorMessage: testCaseResponse.errorMessage,\n };\n }\n }\n\n return {\n isSuccess: true,\n testScenarioFile: {\n processId,\n testCases,\n },\n };\n } catch (error) {\n return {\n isSuccess: false,\n errorMessage: `Failed to translate scenarios: ${error instanceof Error ? error.message : 'Unknown error'}`,\n };\n }\n}\n\ntype InstructionResult =\n | {\n isSuccess: true;\n instruction: Instruction;\n }\n | {\n isSuccess: false;\n errorMessage: string;\n };\n\ntype TestCaseResult =\n | {\n isSuccess: true;\n testCase: TestCase;\n }\n | {\n isSuccess: false;\n errorMessage: string;\n };\n\nfunction translateToInstruction(\n action: Action,\n processId: string,\n): InstructionResult {\n if (action.action === 'startInstance') {\n if (action.type === 'start-event') {\n return {\n isSuccess: true,\n instruction: {\n type: 'create-process-instance',\n elementId: action.elementId,\n processDefinitionId: processId,\n ...(action.variables && {variables: action.variables}),\n },\n };\n } else if (action.type === 'message-start-event') {\n return {\n isSuccess: true,\n instruction: {\n type: 'create-process-instance-by-message',\n elementId: action.elementId,\n processDefinitionId: processId,\n messageName: '',\n ...(action.variables && {variables: action.variables}),\n },\n };\n } else if (action.type === 'broadcast-signal-event') {\n return {\n isSuccess: true,\n instruction: {\n type: 'create-process-instance-by-signal',\n elementId: action.elementId,\n processDefinitionId: processId,\n signalName: '',\n ...(action.variables && {variables: action.variables}),\n },\n };\n }\n } else if (action.action === 'completeJob') {\n if (action.type === 'userTask') {\n return {\n isSuccess: true,\n instruction: {\n type: 'complete-user-task',\n elementId: action.elementId,\n ...(action.variables && {variables: action.variables}),\n },\n };\n } else {\n return {\n isSuccess: true,\n instruction: {\n type: 'complete-job',\n jobType: action.taskDefinitionType || '',\n elementId: action.elementId,\n ...(action.variables && {variables: action.variables}),\n },\n };\n }\n } else if (action.action === 'setVariables') {\n return {\n isSuccess: true,\n instruction: {\n type: 'update-variables',\n variables: action.variables,\n },\n };\n } else if (action.action === 'broadcastSignal') {\n return {\n isSuccess: true,\n instruction: {\n type: 'broadcast-signal',\n elementId: action.elementId,\n signalName: action.signalName,\n ...(action.variables && {variables: action.variables}),\n },\n };\n } else if (action.action === 'publishMessage') {\n return {\n isSuccess: true,\n instruction: {\n type: 'publish-message',\n elementId: action.elementId,\n messageName: action.messageName,\n correlationKey: action.messageCorrelationKey || '',\n ...(action.variables && {variables: action.variables}),\n ...(action.timeToLive && {timeToLive: action.timeToLive}),\n ...(action.messageId && {messageId: action.messageId}),\n },\n };\n } else if (action.action === 'throwJob') {\n return {\n isSuccess: true,\n instruction: {\n type: 'throw-job-error',\n elementId: action.elementId,\n errorCode: action.errorCode || '',\n ...(action.taskDefinitionType && {jobType: action.taskDefinitionType}),\n },\n };\n } else if (action.action === 'resolveIncident') {\n return {\n isSuccess: true,\n instruction: {\n type: 'resolve-incident',\n elementId: action.elementId,\n hasJob: action.hasJob,\n },\n };\n }\n\n return {\n isSuccess: false,\n errorMessage: `Action type '${action.action}' cannot be saved to a test scenario file yet. Please contact support.`,\n };\n}\n\nfunction translateToTestCase(\n scenario: Scenario,\n processId: string,\n): TestCaseResult {\n const instructions: Array<Instruction> = [];\n for (const action of scenario.actions) {\n const instructionResponse = translateToInstruction(action, processId);\n\n if (instructionResponse.isSuccess) {\n instructions.push(instructionResponse.instruction);\n } else {\n return {\n isSuccess: false,\n errorMessage: instructionResponse.errorMessage,\n };\n }\n }\n\n return {\n isSuccess: true,\n testCase: {\n name: scenario.name,\n instructions,\n metadata: {\n processInstanceId: scenario.processInstanceId,\n coveredFlowNodes: scenario.coveredFlowNodes,\n coveredSequenceFlows: scenario.coveredSequenceFlows,\n },\n },\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Scenario} from 'modules/types';\nimport {isValidJSON} from '../isValidJSON';\nimport {Action} from '../userActionHistory';\nimport {Instruction, TestCase, TestScenarioFileContents} from './index';\n\nexport type ParseResult = {\n isSuccess: boolean;\n scenarios?: Array<Scenario>;\n errorMessage?: string;\n};\n\nexport function parseTestScenarioFile(jsonString: string): ParseResult {\n const isValidJson = isValidJSON(jsonString);\n if (!isValidJson) {\n return {\n isSuccess: false,\n errorMessage: 'Invalid JSON format',\n };\n }\n\n const parsed = JSON.parse(jsonString);\n const scenarioValidation = isTestScenarioValid(parsed);\n if (!scenarioValidation.isValid) {\n return {\n isSuccess: false,\n errorMessage: scenarioValidation.errorMessage,\n };\n }\n\n const scenarios: Array<Scenario> = [];\n\n for (let index = 0; index < parsed.testCases.length; index++) {\n const testCase = parsed.testCases[index];\n\n const testCaseValidation = validateTestCase(testCase);\n if (!testCaseValidation.isValid) {\n return {\n isSuccess: false,\n errorMessage: testCaseValidation.errorMessage,\n };\n }\n\n const scenario = translateFromTestCase({\n testCase,\n index,\n processId: parsed.processId,\n });\n scenarios.push(scenario);\n }\n\n return {\n isSuccess: true,\n scenarios,\n };\n}\n\nfunction isTestScenarioValid(parsed: TestScenarioFileContents): {\n isValid: boolean;\n errorMessage?: string;\n} {\n if (!parsed || typeof parsed !== 'object') {\n return {\n isValid: false,\n errorMessage: 'Invalid JSON structure: expected an object',\n };\n }\n\n if (!parsed.testCases || !Array.isArray(parsed.testCases)) {\n return {\n isValid: false,\n errorMessage: 'Invalid JSON structure: expected testCases array',\n };\n }\n\n return {isValid: true};\n}\n\nfunction validateTestCase(testCase: TestCase): {\n isValid: boolean;\n errorMessage?: string;\n} {\n if (!testCase.instructions || !Array.isArray(testCase.instructions)) {\n return {\n isValid: false,\n errorMessage: 'Invalid test case: missing or invalid instructions array',\n };\n }\n\n return {isValid: true};\n}\n\nfunction generateScenarioKey(name: string, processId?: string): string {\n const normalizedName = name\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '');\n\n if (processId) {\n return `${processId}-${normalizedName}`;\n }\n\n return normalizedName;\n}\n\nfunction generateScenarioName(testCase: TestCase, index: number): string {\n if (testCase.name && testCase.name.trim() !== '') {\n return testCase.name;\n }\n\n return `Scenario ${index + 1}`;\n}\n\nfunction translateFromInstruction(\n instruction: Instruction,\n): Action | undefined {\n const instructionType = instruction.type;\n\n switch (instruction.type) {\n case 'create-process-instance':\n return {\n elementId: instruction.elementId,\n action: 'startInstance',\n type: 'start-event',\n variables: instruction.variables,\n };\n\n case 'create-process-instance-by-message':\n return {\n action: 'startInstance',\n type: 'message-start-event',\n variables: instruction.variables,\n elementId: instruction.elementId,\n };\n\n case 'create-process-instance-by-signal':\n return {\n action: 'startInstance',\n type: 'broadcast-signal-event',\n variables: instruction.variables,\n elementId: instruction.elementId,\n };\n\n case 'update-variables':\n return {\n action: 'setVariables',\n variables: instruction.variables,\n };\n\n case 'complete-user-task':\n return {\n action: 'completeJob',\n elementId: instruction.elementId,\n type: 'userTask',\n variables: instruction.variables,\n };\n\n case 'complete-job':\n return {\n action: 'completeJob',\n elementId: instruction.elementId,\n type: 'serviceTask',\n taskDefinitionType: instruction.jobType,\n variables: instruction.variables,\n };\n\n case 'broadcast-signal':\n return {\n action: 'broadcastSignal',\n elementId: instruction.elementId,\n signalName: instruction.signalName,\n variables: instruction.variables,\n };\n\n case 'publish-message':\n return {\n action: 'publishMessage',\n elementId: instruction.elementId,\n messageName: instruction.messageName,\n messageCorrelationKey: instruction.correlationKey,\n variables: instruction.variables,\n ...(instruction.timeToLive && {timeToLive: instruction.timeToLive}),\n ...(instruction.messageId && {messageId: instruction.messageId}),\n };\n\n case 'throw-job-error':\n return {\n action: 'throwJob',\n elementId: instruction.elementId,\n taskDefinitionType: instruction.jobType,\n errorCode: instruction.errorCode,\n };\n\n case 'resolve-incident':\n return {\n action: 'resolveIncident',\n elementId: instruction.elementId,\n hasJob: instruction.hasJob,\n };\n\n default:\n console.warn(\n `Instruction type '${instructionType}' is not supported and will be skipped.`,\n );\n return undefined;\n }\n}\n\nfunction translateFromTestCase({\n testCase,\n index,\n processId,\n}: {\n testCase: TestCase;\n index: number;\n processId?: string;\n}): Scenario {\n const scenarioName = generateScenarioName(testCase, index);\n\n const scenarioKey = generateScenarioKey(scenarioName, processId);\n\n const actions = testCase.instructions\n .map((instruction) => translateFromInstruction(instruction))\n .filter((action) => action !== undefined);\n\n return {\n key: scenarioKey,\n name: scenarioName,\n actions,\n processInstanceId: testCase.metadata?.processInstanceId || 0,\n coveredFlowNodes: testCase.metadata?.coveredFlowNodes || [],\n coveredSequenceFlows: testCase.metadata?.coveredSequenceFlows || [],\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Scenario} from 'modules/types';\n\nexport function getScenarioHistory(bpmnProcessId: string) {\n const processScenarios: Array<Scenario> = JSON.parse(\n localStorage.getItem(`${bpmnProcessId} scenarios`) || '[]',\n );\n\n return processScenarios;\n}\n\nexport function archiveScenarioHistory(bpmnProcessId: string) {\n const processScenarios: Array<Scenario> = JSON.parse(\n localStorage.getItem(`${bpmnProcessId} scenarios`) || '[]',\n );\n\n localStorage.setItem(\n `archived-${bpmnProcessId} scenarios`,\n JSON.stringify(processScenarios),\n );\n\n localStorage.removeItem(`${bpmnProcessId} scenarios`);\n}\n\nexport function deleteScenarioFromHistory(\n bpmnProcessId: string,\n scenarioKey: string,\n) {\n const processScenarios: Array<Scenario> = JSON.parse(\n localStorage.getItem(`${bpmnProcessId} scenarios`) || '[]',\n );\n\n const filteredScenarios = processScenarios.filter(\n ({key}) => key !== scenarioKey,\n );\n\n localStorage.setItem(\n `${bpmnProcessId} scenarios`,\n JSON.stringify(filteredScenarios),\n );\n}\n\nexport function addScenario({\n bpmnProcessId,\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n}: {\n bpmnProcessId: string;\n} & Omit<Scenario, 'key'>) {\n const processScenarios = getScenarioHistory(bpmnProcessId);\n\n processScenarios.push({\n key: `${bpmnProcessId}-${name}`,\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n });\n\n localStorage.setItem(\n `${bpmnProcessId} scenarios`,\n JSON.stringify(processScenarios),\n );\n}\n\nexport function updateScenario({\n bpmnProcessId,\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n}: {\n bpmnProcessId: string;\n} & Omit<Scenario, 'key'>) {\n const processScenarios = getScenarioHistory(bpmnProcessId);\n\n const existingScenario = processScenarios.find(\n (scenario) => scenario.name === name,\n );\n\n if (existingScenario !== undefined) {\n const otherScenarios = processScenarios.filter(\n (scenario) => scenario.name !== name,\n );\n\n localStorage.setItem(\n `${bpmnProcessId} scenarios`,\n JSON.stringify([\n {\n ...existingScenario,\n processInstanceId,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n },\n ...otherScenarios,\n ]),\n );\n }\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport type ErrorWithMessage = {\n message: string;\n};\n\nexport function getErrorMessage(error: unknown) {\n const messageFromError = toErrorWithMessage(error)?.message;\n\n if (messageFromError) {\n return messageFromError;\n }\n\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n}\n\n// Adapted from https://kentcdodds.com/blog/get-a-catch-block-error-message-with-typescript\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as Record<string, unknown>).message === 'string'\n );\n}\n\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage | null {\n return isErrorWithMessage(maybeError) ? maybeError : null;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, computed, makeObservable, observable} from 'mobx';\nimport {diagramStore} from './diagram';\nimport {elementInstancesStore} from './elementInstances';\nimport {Rerun} from './rerun';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {Action, StartInstanceAction} from 'modules/utils/userActionHistory';\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport {\n CreateFunction,\n DisplayNotification,\n Scenario,\n TestScenarioFile,\n TestScenarioFileHelpers,\n UpdateFunction,\n} from 'modules/types';\nimport {\n parseTestScenarioFile,\n TranslateResult,\n translateToTestScenarioFile,\n} from 'modules/utils/translate-scenarios';\nimport {playEnvironmentStore} from './playEnvironment';\nimport {\n addScenario,\n deleteScenarioFromHistory,\n getScenarioHistory,\n updateScenario,\n} from 'modules/utils/scenarioHistory';\nimport {getErrorMessage} from '../utils/get-message-from-error';\nimport {SCENARIOS_LOAD_FAILURE} from 'modules/utils/constants';\n\ntype ScenarioRun = {\n status: 'Running' | 'Completed' | 'Failed';\n instanceKey?: number;\n};\n\ntype ScenarioRuns = {\n [name: string]: ScenarioRun;\n};\n\ntype State = {\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n hasMultipleTestFilesLinked: boolean;\n testScenarioFileMetadata?: {\n id: string;\n name: string;\n revision: number;\n };\n scenarios: Array<Scenario>;\n scenarioRuns: ScenarioRuns;\n selectedScenario?: Scenario;\n isProcessing: boolean;\n useLocalStorage: boolean;\n};\n\nconst DEFAULT_STATE: State = {\n status: 'initial',\n hasMultipleTestFilesLinked: false,\n testScenarioFileMetadata: undefined,\n scenarios: [],\n scenarioRuns: {},\n selectedScenario: undefined,\n isProcessing: false,\n useLocalStorage: false,\n};\n\nclass Scenarios extends Rerun {\n state: State = {...DEFAULT_STATE};\n\n fetchTestsByProcessId?: TestScenarioFileHelpers['fetchTestsByProcessId'];\n displayNotification?: DisplayNotification;\n createFile?: CreateFunction;\n updateFileById?: UpdateFunction;\n originAppInstanceId?: string;\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n loadScenarios: action,\n setScenarios: action,\n handleLoadSuccess: action,\n handleLoadError: action,\n allCoveredFlowNodes: computed,\n currentTotalCoverage: computed,\n coverageIncrease: computed,\n newTotalCoverage: computed,\n isAnyScenarioRunning: computed,\n coveredFlowNodeIdsForSelectedScenario: computed,\n isSingleScenarioSelected: computed,\n startRunningSingleScenario: action,\n updateSingleScenarioRun: action,\n saveTestScenarioFileMetadata: action,\n deleteScenario: action,\n setSelectedScenario: action,\n clearSelectedScenario: action,\n reset: action,\n setIsProcessing: action,\n setUseLocalStorage: action,\n });\n }\n\n #handleErrorWithNotification = ({\n title,\n subtitle,\n errorMessage,\n }: {\n title: string;\n subtitle?: string;\n errorMessage?: string;\n }) => {\n console.error(`Scenarios Store Error: ${title}`, {\n subtitle,\n errorMessage,\n });\n\n this.displayNotification?.error({\n title,\n subtitle,\n });\n };\n\n init = ({\n fetchTestsByProcessId,\n createFile,\n updateFileById,\n originAppInstanceId,\n displayNotification,\n }: {\n fetchTestsByProcessId: TestScenarioFileHelpers['fetchTestsByProcessId'];\n createFile: CreateFunction;\n updateFileById: UpdateFunction;\n originAppInstanceId: string;\n displayNotification?: DisplayNotification;\n }) => {\n this.fetchTestsByProcessId = fetchTestsByProcessId;\n this.createFile = createFile;\n this.updateFileById = updateFileById;\n this.displayNotification = displayNotification;\n this.originAppInstanceId = originAppInstanceId;\n };\n\n loadScenarios = async (processId: string): Promise<Scenario[]> => {\n if (this.state.useLocalStorage) {\n return this.#loadScenariosFromLocalStorage(processId);\n }\n\n let testScenarioFiles: TestScenarioFile[] = [];\n this.startFetching();\n\n try {\n testScenarioFiles =\n (await this.fetchTestsByProcessId?.(\n playEnvironmentStore.projectId!,\n processId,\n )) ?? [];\n } catch (error) {\n this.#handleErrorWithNotification({\n title: SCENARIOS_LOAD_FAILURE,\n subtitle: 'Network error',\n errorMessage: getErrorMessage(error),\n });\n this.handleLoadError([]);\n return [];\n }\n\n if (testScenarioFiles.length === 0) {\n this.handleLoadSuccess({\n scenarios: [],\n hasMultipleTestFilesLinked: false,\n });\n return [];\n }\n\n const [firstSortedTestScenarioFile] = testScenarioFiles.sort(\n this.#sortScenariosByNameDescending,\n );\n\n this.saveTestScenarioFileMetadata(\n firstSortedTestScenarioFile.id,\n firstSortedTestScenarioFile.name,\n firstSortedTestScenarioFile.revision,\n );\n\n const parseResult = parseTestScenarioFile(\n firstSortedTestScenarioFile.content,\n );\n\n if (!parseResult.isSuccess) {\n this.#handleErrorWithNotification({\n title: SCENARIOS_LOAD_FAILURE,\n subtitle: 'File content is invalid',\n errorMessage:\n parseResult.errorMessage +\n '. Content: ' +\n firstSortedTestScenarioFile.content,\n });\n\n this.handleLoadError([]);\n return [];\n }\n\n this.handleLoadSuccess({\n scenarios: parseResult.scenarios!,\n hasMultipleTestFilesLinked: testScenarioFiles.length > 1,\n });\n\n return parseResult.scenarios!;\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleLoadError = (scenarios: Scenario[]) => {\n this.state.status = 'error';\n this.setScenarios(scenarios);\n };\n\n handleLoadSuccess = ({\n scenarios,\n hasMultipleTestFilesLinked,\n }: {\n scenarios: Array<Scenario>;\n hasMultipleTestFilesLinked: boolean;\n }) => {\n this.state.status = 'fetched';\n this.state.hasMultipleTestFilesLinked = hasMultipleTestFilesLinked;\n this.setScenarios(scenarios);\n };\n\n setScenarios = (scenarios: Scenario[]) => {\n this.state.scenarios = scenarios;\n };\n\n createTestScenarioFile = async ({\n projectId,\n folderId,\n processId,\n scenarios,\n shouldDisplayNotificationOnFailure = true,\n }: {\n projectId: string;\n folderId?: string;\n processId: string;\n scenarios: Scenario[];\n shouldDisplayNotificationOnFailure?: boolean;\n }) => {\n const translateResult = translateToTestScenarioFile(scenarios, processId);\n\n if (!translateResult.isSuccess) {\n if (shouldDisplayNotificationOnFailure) {\n this.#handleErrorWithNotification({\n title: 'Failed to create test scenario file',\n subtitle: 'Please contact support',\n errorMessage:\n translateResult.errorMessage +\n ' Scenarios: ' +\n JSON.stringify(scenarios),\n });\n }\n return {isSuccess: false};\n }\n\n const trimmedProcessName = playEnvironmentStore.processName?.trim();\n\n const fileName = trimmedProcessName\n ? trimmedProcessName + ' test scenarios'\n : 'Test scenarios';\n\n let fileId;\n\n try {\n const createdFile = await this.createFile!({\n name: fileName,\n type: 'TESTS',\n content: JSON.stringify(translateResult.testScenarioFile, null, 2),\n projectId,\n ...(folderId && {folderId}),\n });\n\n if (createdFile) {\n this.saveTestScenarioFileMetadata(\n createdFile.id,\n fileName,\n createdFile.revision,\n );\n fileId = createdFile.id;\n }\n } catch (error) {\n if (shouldDisplayNotificationOnFailure) {\n this.#handleErrorWithNotification({\n title: 'Failed to create test scenario file',\n subtitle: 'Please try again, or contact support',\n errorMessage: getErrorMessage(error),\n });\n }\n return {isSuccess: false, errorMessage: getErrorMessage(error)};\n }\n\n return {\n isSuccess: true,\n fileName,\n fileId,\n };\n };\n\n addScenario = async ({\n processId,\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n }: {\n processId: string;\n } & Omit<Scenario, 'key'>) => {\n if (this.state.useLocalStorage) {\n this.#addScenarioToLocalStorage(processId, {\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n });\n return;\n }\n\n this.setIsProcessing(true);\n const testScenarios = await this.loadScenarios(processId);\n\n if (this.state.testScenarioFileMetadata?.id === undefined) {\n await this.createTestScenarioFile({\n processId,\n projectId: playEnvironmentStore.projectId!,\n folderId: playEnvironmentStore.folderId,\n scenarios: testScenarios,\n });\n }\n\n testScenarios.push({\n key: this.#getTestScenarioKey(processId, name),\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n });\n\n const translateResult = translateToTestScenarioFile(\n testScenarios,\n processId,\n );\n\n if (!translateResult.isSuccess) {\n this.#handleErrorWithNotification({\n title: 'Failed to add test scenario file',\n subtitle: 'Please contact support',\n errorMessage:\n translateResult.errorMessage +\n ' Scenarios: ' +\n JSON.stringify(testScenarios),\n });\n return;\n }\n\n try {\n await this.#updateFile(\n translateResult,\n this.state.testScenarioFileMetadata!.id,\n );\n this.setScenarios(testScenarios);\n } catch (error) {\n this.#handleErrorWithNotification({\n title: 'Failed to add scenario',\n subtitle: 'Failed to update test scenario file',\n errorMessage: getErrorMessage(error),\n });\n return;\n } finally {\n this.setIsProcessing(false);\n }\n };\n\n updateScenario = async ({\n processId,\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n }: {\n processId: string;\n } & Omit<Scenario, 'key'>) => {\n if (this.state.useLocalStorage) {\n this.#updateScenarioInLocalStorage(processId, {\n processInstanceId,\n name,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n });\n return;\n }\n\n this.setIsProcessing(true);\n const testScenarios = await this.loadScenarios(processId);\n\n if (this.state.testScenarioFileMetadata?.id === undefined) {\n await this.createTestScenarioFile({\n projectId: playEnvironmentStore.projectId!,\n processId,\n folderId: playEnvironmentStore.folderId,\n scenarios: testScenarios,\n });\n }\n\n const updatedScenario: Omit<Scenario, 'key'> = {\n name,\n processInstanceId,\n actions,\n coveredFlowNodes,\n coveredSequenceFlows,\n };\n\n const updatedScenarios: Scenario[] = testScenarios.find(\n (scenario) => scenario.name === name,\n )\n ? testScenarios.map((scenario) =>\n scenario.name === name ? {...scenario, ...updatedScenario} : scenario,\n )\n : [\n ...testScenarios,\n {key: this.#getTestScenarioKey(processId, name), ...updatedScenario},\n ];\n\n const translateResult = translateToTestScenarioFile(\n updatedScenarios,\n processId,\n );\n\n if (!translateResult.isSuccess) {\n this.#handleErrorWithNotification({\n title: 'Failed to update scenario',\n subtitle: 'Please contact support',\n errorMessage:\n translateResult.errorMessage +\n ' Scenarios: ' +\n JSON.stringify(updatedScenarios),\n });\n return;\n }\n\n // update the test scenario file\n try {\n await this.#updateFile(\n translateResult,\n this.state.testScenarioFileMetadata!.id,\n );\n this.setScenarios(updatedScenarios);\n } catch (error) {\n this.#handleErrorWithNotification({\n title: 'Failed to update scenario',\n subtitle: 'Failed to update test scenario file',\n errorMessage: getErrorMessage(error),\n });\n return;\n } finally {\n this.setIsProcessing(false);\n }\n };\n\n deleteScenario = async ({\n scenario,\n processId,\n }: {\n scenario: Scenario;\n processId: string;\n }) => {\n if (this.state.useLocalStorage) {\n this.#deleteScenarioFromLocalStorage(processId, scenario);\n return;\n }\n\n this.setIsProcessing(true);\n const testScenarios = await this.loadScenarios(processId);\n\n const filteredScenarios = testScenarios.filter(\n ({key}) => key !== scenario.key,\n );\n\n if (this.state.testScenarioFileMetadata?.id === undefined) {\n this.#handleErrorWithNotification({\n title: 'Failed to delete scenario',\n subtitle: 'Test scenario file not found',\n });\n return;\n }\n\n const translateResult = translateToTestScenarioFile(\n filteredScenarios,\n processId,\n );\n\n if (!translateResult.isSuccess) {\n this.#handleErrorWithNotification({\n title: 'Failed to delete scenario',\n subtitle: 'Please contact support',\n errorMessage:\n translateResult.errorMessage +\n ' Scenarios: ' +\n JSON.stringify(filteredScenarios),\n });\n return;\n }\n\n try {\n await this.#updateFile(\n translateResult,\n this.state.testScenarioFileMetadata.id,\n );\n this.setScenarios(filteredScenarios);\n delete this.state.scenarioRuns[scenario.name];\n } catch (error) {\n this.#handleErrorWithNotification({\n title: 'Failed to delete scenario',\n subtitle: 'Please try again, or contact support',\n errorMessage: getErrorMessage(error),\n });\n return;\n } finally {\n this.setIsProcessing(false);\n }\n };\n\n #getTestScenarioKey = (bpmnProcessId: string, name: string) => {\n return `${bpmnProcessId}-${name}`;\n };\n\n async #updateFile(\n translateResult: TranslateResult,\n testScenarioFileId: string,\n ) {\n const response = await this.updateFileById!(testScenarioFileId, {\n originAppInstanceId: this.originAppInstanceId,\n revision: this.state.testScenarioFileMetadata!.revision,\n content: JSON.stringify(translateResult.testScenarioFile, null, 2),\n });\n\n this.saveTestScenarioFileMetadata(\n testScenarioFileId,\n this.state.testScenarioFileMetadata!.name,\n response.revision,\n );\n }\n\n saveTestScenarioFileMetadata = (\n fileId: string,\n fileName: string,\n revision: number,\n ) => {\n this.state.testScenarioFileMetadata = {\n id: fileId,\n name: fileName,\n revision,\n };\n };\n\n get allCoveredFlowNodes() {\n return diagramStore.flowNodes\n .filter((flowNode) => {\n return this.state.scenarios.some(({coveredFlowNodes}) =>\n coveredFlowNodes?.some((coveredFlowNode) => {\n return (\n coveredFlowNode.flowNodeId === flowNode.id &&\n coveredFlowNode.elementType === flowNode.$type\n );\n }),\n );\n })\n .map((flowNode) => ({\n flowNodeId: flowNode.id,\n elementType: flowNode.$type,\n }));\n }\n\n get allCoveredSequenceFlows() {\n return this.state.scenarios.flatMap(\n ({coveredSequenceFlows}) => coveredSequenceFlows,\n );\n }\n\n get currentTotalCoverage() {\n return (\n (this.allCoveredFlowNodes.length / diagramStore.flowNodes.length) * 100\n );\n }\n\n get newTotalCoverage() {\n const currentCoveredFlowNodeIds = elementInstancesStore.elementIds;\n\n const newCoveredFlowNodeIds = Array.from(\n new Set([\n ...this.allCoveredFlowNodes.map(({flowNodeId}) => flowNodeId),\n ...currentCoveredFlowNodeIds,\n ]),\n );\n\n return (\n (newCoveredFlowNodeIds.length / diagramStore.flowNodeIds.length) * 100\n );\n }\n\n get coverageIncrease() {\n return Math.max(0, this.newTotalCoverage - this.currentTotalCoverage);\n }\n\n replay = async ({\n processId,\n actions,\n }: {\n processId: string;\n actions: Action[];\n }) => {\n const startInstanceAction = actions.find(\n ({action}) => action === 'startInstance',\n ) as StartInstanceAction;\n if (startInstanceAction === undefined) {\n return {isCompleted: false};\n }\n\n const newInstanceKey = await this.createNewInstance({\n startActionType: startInstanceAction.type,\n elementId: startInstanceAction.elementId,\n variables: startInstanceAction.variables,\n bpmnProcessId: processId,\n });\n\n if (newInstanceKey === undefined) {\n return {isCompleted: false};\n }\n\n const {success} = await this.repeatUserActions({\n newInstanceKey,\n actions,\n breakOnFailure: true,\n });\n\n if (!success) {\n return {\n isCompleted: false,\n processInstanceKeyForScenarioRun: newInstanceKey,\n };\n }\n\n const isCompleted = await this.isScenarioCompleted({\n instanceKey: newInstanceKey,\n });\n\n return {isCompleted, processInstanceKeyForScenarioRun: newInstanceKey};\n };\n\n startRunningSingleScenario = (name: string) => {\n if (this.state.scenarioRuns[name] === undefined) {\n this.state.scenarioRuns[name] = {\n status: 'Running',\n };\n\n return;\n }\n\n this.state.scenarioRuns[name] = {\n ...this.state.scenarioRuns[name],\n status: 'Running',\n };\n };\n\n runSingleScenario = async ({\n name,\n processId,\n actions,\n }: {\n name: string;\n processId: string;\n actions: Action[];\n }) => {\n this.startRunningSingleScenario(name);\n\n const {isCompleted, processInstanceKeyForScenarioRun} = await this.replay({\n processId,\n actions,\n });\n\n this.updateSingleScenarioRun(name, {\n status: isCompleted ? 'Completed' : 'Failed',\n instanceKey: processInstanceKeyForScenarioRun,\n });\n };\n\n updateSingleScenarioRun = (name: string, scenarioRun: ScenarioRun) => {\n this.state.scenarioRuns[name] = scenarioRun;\n };\n\n getScenarioRun = (name: string) => {\n return this.state.scenarioRuns[name];\n };\n\n isScenarioCompleted = ({\n instanceKey,\n }: {\n instanceKey?: number;\n }): Promise<boolean | null> => {\n return retryWrapper<boolean>(async () => {\n const {processInstance} =\n await zeebePlayService.fetchInstanceDetails(instanceKey);\n\n const isCompleted = processInstance.state === 'COMPLETED';\n\n if (!isCompleted) {\n return null;\n }\n\n return true;\n });\n };\n\n get isAnyScenarioRunning() {\n return Object.values(this.state.scenarioRuns).some(\n (scenario) => scenario.status === 'Running',\n );\n }\n\n setSelectedScenario = (scenario: Scenario) => {\n this.state.selectedScenario = scenario;\n };\n\n clearSelectedScenario = () => {\n this.state.selectedScenario = undefined;\n };\n\n get coveredFlowNodeIdsForSelectedScenario() {\n return diagramStore.flowNodes\n .filter((flowNode) => {\n return this.state.selectedScenario?.coveredFlowNodes?.some(\n ({flowNodeId, elementType}) =>\n flowNodeId === flowNode.id && elementType === flowNode.$type,\n );\n })\n .map(({id}) => id as string);\n }\n\n get isSingleScenarioSelected() {\n return this.state.selectedScenario !== undefined;\n }\n\n setIsProcessing = (isProcessing: boolean) => {\n this.state.isProcessing = isProcessing;\n };\n\n setUseLocalStorage = (useLocalStorage: boolean) => {\n this.state.useLocalStorage = useLocalStorage;\n };\n\n #loadScenariosFromLocalStorage = (processId: string): Scenario[] => {\n this.startFetching();\n const scenarios = getScenarioHistory(processId);\n this.handleLoadSuccess({scenarios, hasMultipleTestFilesLinked: false});\n return scenarios;\n };\n\n #addScenarioToLocalStorage = (\n processId: string,\n scenario: Omit<Scenario, 'key'>,\n ) => {\n addScenario({\n bpmnProcessId: processId,\n processInstanceId: scenario.processInstanceId,\n name: scenario.name,\n actions: scenario.actions,\n coveredFlowNodes: scenario.coveredFlowNodes,\n coveredSequenceFlows: scenario.coveredSequenceFlows,\n });\n\n const updatedScenarios = getScenarioHistory(processId);\n this.setScenarios(updatedScenarios);\n };\n\n #updateScenarioInLocalStorage = (\n processId: string,\n scenario: Omit<Scenario, 'key'>,\n ) => {\n updateScenario({\n bpmnProcessId: processId,\n processInstanceId: scenario.processInstanceId,\n name: scenario.name,\n actions: scenario.actions,\n coveredFlowNodes: scenario.coveredFlowNodes,\n coveredSequenceFlows: scenario.coveredSequenceFlows,\n });\n\n const updatedScenarios = getScenarioHistory(processId);\n this.setScenarios(updatedScenarios);\n };\n\n #deleteScenarioFromLocalStorage = (processId: string, scenario: Scenario) => {\n deleteScenarioFromHistory(processId, scenario.key);\n\n const updatedScenarios = getScenarioHistory(processId);\n this.setScenarios(updatedScenarios);\n delete this.state.scenarioRuns[scenario.name];\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n\n #sortScenariosByNameDescending = (\n a: TestScenarioFile,\n b: TestScenarioFile,\n ) => {\n const nameComparison = a.name.localeCompare(b.name);\n if (nameComparison !== 0) {\n return nameComparison;\n }\n\n // If names are identical, sort by changed (most recent first)\n if (a.changed && b.changed) {\n return b.changed - a.changed;\n }\n\n return 0;\n };\n}\n\nexport const scenariosStore = new Scenarios();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {PollingHandler} from './pollingHandler';\nimport {\n IReactionDisposer,\n action,\n makeObservable,\n observable,\n reaction,\n when,\n computed,\n override,\n} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {ProcessInstanceDetail} from 'modules/types';\nimport {\n AUTHORIZATION_ERROR_CODE,\n POLLING_INTERVAL,\n} from 'modules/utils/constants';\nimport {getFirstProcessCompleted} from 'modules/utils/firstProcessCompletionHelper';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\nimport {scenariosStore} from './scenarios';\n\nconst UNSAVED_SCENARIO_NAME = 'Not saved';\n\ntype State = {\n instanceKey: ProcessInstanceDetail['key'] | undefined;\n processInstance: ProcessInstanceDetail | undefined;\n status:\n | 'initial'\n | 'first-fetch'\n | 'fetching'\n | 'fetched'\n | 'auth-error'\n | 'error';\n isProcessManuallyCompleted: boolean;\n instanceType:\n | 'NEW_INSTANCE'\n | 'REWOUND_INSTANCE'\n | 'EXISTING_INSTANCE'\n | undefined;\n scenarioName: string;\n};\n\nconst DEFAULT_STATE: State = {\n instanceKey: undefined,\n processInstance: undefined,\n status: 'initial',\n isProcessManuallyCompleted: false,\n instanceType: undefined,\n scenarioName: UNSAVED_SCENARIO_NAME,\n};\n\nclass ProcessInstance extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n processManuallyCompletedDisposer: IReactionDisposer | null = null;\n scenarioNameDisposer: IReactionDisposer | null = null;\n refetchTimeout: NodeJS.Timeout | null = null;\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n setIsProcessManuallyCompleted: action,\n isCalledProcess: computed,\n setInstanceDetails: action,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n setScenarioName: action,\n reset: override,\n isRunning: computed,\n hasError: computed,\n isInstanceDetailPageVisible: computed,\n isInitialLoadComplete: computed,\n });\n }\n\n shouldRefreshDataAfterPollingStops = false;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.instanceKey !== undefined;\n\n pollDataCondition = () =>\n this.state.processInstance !== undefined &&\n this.state.processInstance.state !== 'COMPLETED' &&\n this.state.processInstance.state !== 'CANCELED' &&\n this.state.instanceKey !== undefined;\n\n fetchData = () => this.fetchInstanceDetails({refetchWhenNotFound: true});\n\n pollData = () => this.fetchInstanceDetails({ignoreFailure: true});\n\n init = () => {\n super.init();\n\n this.processManuallyCompletedDisposer = reaction(\n () => this.state.processInstance?.state,\n (state, previousState) => {\n if (\n previousState !== undefined &&\n previousState !== 'COMPLETED' &&\n state === 'COMPLETED' &&\n !getFirstProcessCompleted()\n ) {\n this.setIsProcessManuallyCompleted(true);\n }\n },\n );\n\n this.scenarioNameDisposer = when(\n () =>\n this.state.instanceKey !== undefined &&\n this.state.processInstance?.bpmnProcessId !== undefined,\n () => {\n const scenario = scenariosStore.state.scenarios.find(\n ({processInstanceId}) => processInstanceId === this.state.instanceKey,\n );\n\n this.setScenarioName(\n scenario === undefined ? UNSAVED_SCENARIO_NAME : scenario.name,\n );\n },\n );\n };\n\n setScenarioName = (name: string) => {\n this.state.scenarioName = name;\n };\n\n setIsProcessManuallyCompleted = (isProcessManuallyCompleted: boolean) => {\n this.state.isProcessManuallyCompleted = isProcessManuallyCompleted;\n };\n\n fetchInstanceDetails = async ({\n refetchWhenNotFound = false,\n ignoreFailure = false,\n }: {\n refetchWhenNotFound?: boolean;\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = this.state.instanceKey;\n this.startFetching();\n const {statusCode, success, processInstance} =\n await zeebePlayService.fetchInstanceDetails(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: this.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(processInstance);\n this.resetRefetch();\n } else if (statusCode === AUTHORIZATION_ERROR_CODE) {\n this.handleAuthError();\n } else {\n if (statusCode === 404 && refetchWhenNotFound) {\n this.handleRefetch();\n } else if (!ignoreFailure) {\n this.handleError();\n }\n }\n };\n\n handleRefetch = () => {\n this.refetchTimeout = setTimeout(() => {\n this.fetchInstanceDetails({refetchWhenNotFound: true});\n }, POLLING_INTERVAL);\n };\n\n resetRefetch = () => {\n if (this.refetchTimeout !== null) {\n clearTimeout(this.refetchTimeout);\n }\n };\n\n setInstanceDetails = ({\n instanceKey,\n instanceType,\n }: {\n instanceKey?: number;\n instanceType?: 'NEW_INSTANCE' | 'REWOUND_INSTANCE' | 'EXISTING_INSTANCE';\n }) => {\n this.state.instanceKey = instanceKey;\n this.state.instanceType = instanceType;\n };\n\n handleSuccess = (processInstance: ProcessInstanceDetail | undefined) => {\n if (!isEqual(this.state.processInstance, processInstance)) {\n this.state.processInstance = processInstance;\n }\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n if (['initial', 'first-fetch'].includes(this.state.status)) {\n this.state.status = 'first-fetch';\n } else {\n this.state.status = 'fetching';\n }\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n handleAuthError = () => {\n this.state.status = 'auth-error';\n };\n\n get hasError() {\n return this.state.status === 'error';\n }\n\n get isCalledProcess() {\n return this.state.processInstance?.parentKey !== undefined;\n }\n\n handlePolling = async (instanceKey: number) => {\n this.isPollRequestRunning = true;\n const {success, processInstance} =\n await zeebePlayService.fetchInstanceDetails(instanceKey);\n\n if (this.intervalId !== null && success && processInstance !== undefined) {\n this.handleSuccess(processInstance);\n }\n\n this.isPollRequestRunning = false;\n };\n\n get isRunning() {\n const {processInstance} = this.state;\n\n if (processInstance === undefined) {\n return false;\n } else {\n return ['ACTIVE', 'INCIDENT'].includes(processInstance.state);\n }\n }\n\n get isCompleted() {\n const {processInstance} = this.state;\n\n if (processInstance === undefined) {\n return false;\n } else {\n return processInstance.state === 'COMPLETED';\n }\n }\n\n get isInstanceDetailPageVisible() {\n return this.state.instanceKey !== undefined;\n }\n\n get isInitialLoadComplete() {\n return !['initial', 'first-fetch'].includes(this.state.status);\n }\n\n reset() {\n super.reset();\n this.processManuallyCompletedDisposer?.();\n this.scenarioNameDisposer?.();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const processInstanceStore = new ProcessInstance();\nexport {UNSAVED_SCENARIO_NAME};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, computed, makeObservable, observable, override} from 'mobx';\nimport {Incident} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport trackingService from 'modules/services/TrackingService';\nimport {processInstanceStore} from './processInstance';\nimport {elementInstancesStore} from './elementInstances';\nimport {PollingHandler} from './pollingHandler';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n incidents: Incident[];\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n incidents: [],\n status: 'initial',\n};\n\nclass Incidents extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n handleError: action,\n startFetching: action,\n reset: override,\n incidents: computed,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.incident ?? false;\n\n pollDataCondition = () =>\n processInstanceStore.state.processInstance?.incident ?? false;\n\n fetchData = () =>\n this.fetchIncidents({\n instanceKey: processInstanceStore.state.instanceKey,\n });\n\n pollData = () =>\n this.fetchIncidents({\n instanceKey: processInstanceStore.state.instanceKey,\n ignoreFailure: true,\n });\n\n get incidents() {\n const incidents = this.state.incidents.map((incident) => {\n const elementInstance =\n elementInstancesStore.state.elementInstances?.find(({incidentKey}) => {\n return incidentKey !== undefined && incidentKey === incident.key;\n });\n\n return {\n ...incident,\n elementInstance:\n elementInstance === undefined\n ? undefined\n : {\n key: elementInstance.incidentKey ?? 0,\n element: {\n elementId: elementInstance.flowNodeId,\n elementName: elementInstance.flowNodeName,\n bpmnElementType: elementInstance.type,\n },\n },\n };\n });\n return incidents;\n }\n\n fetchIncidents = async ({\n instanceKey,\n ignoreFailure = false,\n }: {\n instanceKey?: number;\n ignoreFailure?: boolean;\n }) => {\n this.startFetching();\n const {success, incidents} =\n await zeebePlayService.fetchIncidents(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(incidents);\n\n incidents?.forEach((incident) =>\n trackingService.trackIncident(\n incident,\n processInstanceStore.state.processInstance?.bpmnProcessId,\n ),\n );\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (incidents: Incident[] | undefined) => {\n if (!isEqual(incidents, this.state.incidents)) {\n this.state.incidents = incidents ?? [];\n }\n\n this.state.status = 'fetched';\n };\n\n updateRetries = async ({\n jobKey,\n numberOfRetries = 1,\n }: {\n jobKey: number;\n numberOfRetries?: number;\n }) => {\n const result = await zeebePlayService.updateRetries({\n jobKey,\n retries: numberOfRetries,\n });\n\n return result?.success !== false;\n };\n\n resolveIncident = async (incidentKey: number) => {\n return zeebePlayService.resolveIncident(incidentKey);\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n refreshIncidents = async ({instanceKey}: {instanceKey?: number}) => {\n const {success, incidents} =\n await zeebePlayService.fetchIncidents(instanceKey);\n\n if (success) {\n this.handleSuccess(incidents);\n }\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const incidentsStore = new Incidents();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable, override} from 'mobx';\nimport {UserTaskNode} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {PollingHandler} from './pollingHandler';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n userTasks: UserTaskNode[];\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n userTasks: [],\n status: 'initial',\n};\n\nclass UserTasks extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchUserTasks({});\n\n pollData = () =>\n this.fetchUserTasks({\n ignoreFailure: true,\n });\n\n fetchUserTasks = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n const {success, userTasks} =\n await zeebePlayService.fetchUserTasks(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(userTasks);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (userTasks: UserTaskNode[] | undefined) => {\n if (!isEqual(userTasks, this.state.userTasks)) {\n this.state.userTasks = userTasks ?? [];\n }\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const userTasksStore = new UserTasks();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {isValidJSON} from 'modules/utils/isValidJSON';\nimport {diagramStore} from './diagram';\nimport {statisticsStore} from './statistics';\nimport {getTaskDefinitionType} from 'modules/utils/getTaskDefinitionType';\n\ntype State = {\n status: 'initial';\n};\n\ntype ErrorThrowableJob = {\n errorName: string;\n errorCode: string;\n elementId: string;\n elementName: string;\n taskDefinitionType: string;\n};\n\nconst DEFAULT_STATE: State = {\n status: 'initial',\n};\n\nclass Jobs {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n makeAutoObservable(this);\n }\n\n completeJob = async ({\n taskDefinitionType,\n processInstanceKey,\n variables,\n elementId,\n }: {\n taskDefinitionType?: string;\n processInstanceKey?: number;\n variables?: string | null;\n elementId: string;\n }) => {\n const result = await zeebePlayService.completeJob({\n taskDefinitionType,\n processInstanceKey,\n variables: isValidJSON(variables) ? (variables as string) : '{}',\n elementId,\n });\n\n return result?.success !== false;\n };\n\n throwError = async ({\n taskDefinitionType,\n processInstanceKey,\n errorCode,\n elementId,\n }: {\n taskDefinitionType?: string;\n processInstanceKey?: number;\n errorCode: string;\n elementId: string;\n }) => {\n const result = await zeebePlayService.throwError({\n taskDefinitionType,\n processInstanceKey,\n errorCode,\n elementId,\n });\n\n return result?.success !== false;\n };\n\n get activeElementsWithJobWorker() {\n return diagramStore.elementsWithJobWorker.filter(({id}) =>\n statisticsStore.activeElementIdsWithoutIncident.includes(id),\n );\n }\n\n get errorThrowableJobsByErrorId() {\n return this.activeElementsWithJobWorker.reduce<{\n [key: string]: ErrorThrowableJob[];\n }>((errorThrowableJobsByErrorId, element) => {\n diagramStore\n .getAvailableErrorEvents(element)\n .forEach(({errorCode, errorName, errorElementId}) => {\n const businessObject = element.businessObject;\n\n const errorObject = {\n errorCode,\n errorName,\n elementId: businessObject.id,\n elementName: businessObject.name ?? businessObject.id,\n taskDefinitionType: getTaskDefinitionType(element),\n };\n\n if (errorThrowableJobsByErrorId[errorElementId] === undefined) {\n errorThrowableJobsByErrorId[errorElementId] = [errorObject];\n } else {\n errorThrowableJobsByErrorId[errorElementId].push(errorObject);\n }\n });\n\n return errorThrowableJobsByErrorId;\n }, {});\n }\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const jobsStore = new Jobs();\nexport type {ErrorThrowableJob};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable, override} from 'mobx';\nimport {ChildProcessInstanceDto} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {PollingHandler} from './pollingHandler';\nimport {processInstanceStore} from './processInstance';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n childInstances: ChildProcessInstanceDto[];\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n childInstances: [],\n status: 'initial',\n};\n\nclass ChildInstances extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchChildInstances({});\n\n pollData = () =>\n this.fetchChildInstances({\n ignoreFailure: true,\n });\n\n fetchChildInstances = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n const {success, childInstances} =\n await zeebePlayService.fetchChildInstances({\n instanceKey,\n });\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(childInstances);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (childInstances: ChildProcessInstanceDto[] | undefined) => {\n if (!isEqual(childInstances, this.state.childInstances)) {\n this.state.childInstances = childInstances ?? [];\n }\n\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const childInstancesStore = new ChildInstances();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable, override} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {PollingHandler} from './pollingHandler';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n sequenceFlows: Array<string>;\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n sequenceFlows: [],\n status: 'initial',\n};\n\nclass SequenceFlows extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchSequenceFlows({});\n\n pollData = () =>\n this.fetchSequenceFlows({\n ignoreFailure: true,\n });\n\n fetchSequenceFlows = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n\n const {success, sequenceFlows} =\n await zeebePlayService.fetchSequenceFlows(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(sequenceFlows);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (sequenceFlows: Array<string>) => {\n if (!isEqual(this.state.sequenceFlows, sequenceFlows)) {\n this.state.sequenceFlows = sequenceFlows;\n }\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const sequenceFlowsStore = new SequenceFlows();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable, override} from 'mobx';\nimport {ProcessInstanceDetail} from 'modules/types';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {PollingHandler} from './pollingHandler';\nimport {isEqual} from 'lodash-es';\n\ntype State = {\n processInstances: ProcessInstanceDetail[];\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n processInstances: [],\n status: 'initial',\n};\n\nclass Instances extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n processDefinitionKey?: number = undefined;\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n handleError: action,\n startFetching: action,\n reset: override,\n });\n }\n\n init(processDefinitionKey?: number) {\n super.init();\n this.processDefinitionKey = processDefinitionKey;\n }\n\n shouldRefreshDataAfterPollingStops = false;\n\n initialDataFetchCondition = () => true;\n\n pollDataCondition = () => true;\n\n fetchData = () => this.fetchInstances({});\n\n pollData = () =>\n this.fetchInstances({\n ignoreFailure: true,\n });\n\n fetchInstances = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n if (this.processDefinitionKey === undefined) {\n return;\n }\n\n this.startFetching();\n const {success, processInstances} = await zeebePlayService.fetchInstances(\n this.processDefinitionKey,\n );\n\n if (success) {\n this.handleSuccess(processInstances);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (processInstances: ProcessInstanceDetail[]) => {\n if (!isEqual(processInstances, this.state.processInstances)) {\n this.state.processInstances = processInstances;\n }\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const instancesStore = new Instances();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable, override} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from './processInstance';\nimport {PollingHandler} from './pollingHandler';\nimport {DecisionInstanceDto} from 'modules/types';\nimport {isEqual} from 'lodash-es';\nimport {shouldHandleResponse} from './utils/shouldUpdateData';\n\ntype State = {\n decisionInstances: Array<DecisionInstanceDto>;\n status: 'initial' | 'fetching' | 'fetched' | 'error';\n};\n\nconst DEFAULT_STATE: State = {\n decisionInstances: [],\n status: 'initial',\n};\n\nclass DecisionInstances extends PollingHandler {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n handleSuccess: action,\n startFetching: action,\n handleError: action,\n reset: override,\n });\n }\n\n shouldRefreshDataAfterPollingStops = true;\n\n initialDataFetchCondition = () =>\n processInstanceStore.state.processInstance?.key !== undefined;\n\n pollDataCondition = () => processInstanceStore.isRunning;\n\n fetchData = () => this.fetchDecisionInstances({});\n\n pollData = () =>\n this.fetchDecisionInstances({\n ignoreFailure: true,\n });\n\n fetchDecisionInstances = async ({\n ignoreFailure = false,\n }: {\n ignoreFailure?: boolean;\n }) => {\n const instanceKey = processInstanceStore.state.processInstance?.key;\n if (instanceKey === undefined) {\n return;\n }\n\n this.startFetching();\n\n const {success, items} =\n await zeebePlayService.fetchDecisionInstances(instanceKey);\n\n if (\n !shouldHandleResponse({\n requestedProcessInstanceKey: instanceKey,\n currentProcessInstanceKey: processInstanceStore.state.instanceKey,\n })\n ) {\n return;\n }\n\n if (success) {\n this.handleSuccess(items);\n } else if (!ignoreFailure) {\n this.handleError();\n }\n };\n\n handleSuccess = (decisionInstances: Array<DecisionInstanceDto>) => {\n if (!isEqual(decisionInstances, this.state.decisionInstances)) {\n this.state.decisionInstances = decisionInstances ?? [];\n }\n\n this.state.status = 'fetched';\n };\n\n startFetching = () => {\n this.state.status = 'fetching';\n };\n\n handleError = () => {\n this.state.status = 'error';\n };\n\n reset() {\n super.reset();\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const decisionInstancesStore = new DecisionInstances();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useState, useEffect, useCallback} from 'react';\nimport {reaction} from 'mobx';\n\nimport {incidentsStore} from 'modules/stores/incidents';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {userTasksStore} from 'modules/stores/userTasks';\nimport {variablesStore} from 'modules/stores/variables';\nimport {jobsStore} from 'modules/stores/jobs';\nimport {childInstancesStore} from 'modules/stores/childInstances';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {sequenceFlowsStore} from 'modules/stores/sequenceFlows';\nimport {instancesStore} from 'modules/stores/instances';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport {statisticsStore} from 'modules/stores/statistics';\nimport {decisionInstancesStore} from 'modules/stores/decisionInstances';\nimport {REQUEST_FAILURE} from 'modules/utils/constants';\nimport {diagramStore} from 'modules/stores/diagram';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {ContextType} from 'modules/PlayContext';\n\nexport default function usePlayInitialization({\n authType,\n clusterId,\n displayNotification,\n}: {\n authType: 'saas' | 'sm';\n clusterId?: string;\n displayNotification: ContextType['displayNotification'];\n}) {\n const [instanceKey, setInstanceKey] = useState(\n () => processInstanceStore.state.instanceKey,\n );\n const [processDefinitionKey, setProcessDefinitionKey] = useState(\n () => playEnvironmentStore.state.processDefinitionKey,\n );\n\n useEffect(\n () =>\n reaction(\n () => processInstanceStore.state.instanceKey,\n (instanceKey) => setInstanceKey(instanceKey),\n ),\n [],\n );\n\n useEffect(\n () =>\n reaction(\n () => playEnvironmentStore.state.processDefinitionKey,\n (processDefinitionKey) => setProcessDefinitionKey(processDefinitionKey),\n ),\n [],\n );\n\n useEffect(() => {\n if (authType === 'saas' && clusterId === undefined) {\n return;\n }\n\n if (instanceKey) {\n processInstanceStore.init();\n flowNodeSelectionStore.init();\n sequenceFlowsStore.init();\n statisticsStore.init();\n decisionInstancesStore.init();\n userTasksStore.init();\n elementInstancesStore.init();\n variablesStore.init();\n childInstancesStore.init();\n incidentsStore.init();\n } else {\n instancesStore.init(processDefinitionKey);\n }\n\n return () => {\n jobsStore.reset();\n incidentsStore.reset();\n userTasksStore.reset();\n variablesStore.reset();\n childInstancesStore.reset();\n elementInstancesStore.reset();\n flowNodeSelectionStore.reset();\n sequenceFlowsStore.reset();\n statisticsStore.reset();\n decisionInstancesStore.reset();\n instancesStore.reset();\n modificationsStore.reset();\n };\n }, [authType, clusterId, instanceKey, processDefinitionKey]);\n\n const reInitializePlay = useCallback(\n async ({\n processId,\n processDefinitionKey,\n processInstanceKey,\n }: {\n processId: string;\n processDefinitionKey: number;\n processInstanceKey: number;\n }) => {\n const {xmlToDisplay: existingXml, processId: existingProcessId} =\n playEnvironmentStore;\n const existingProcessInstanceKey = processInstanceStore.state.instanceKey;\n\n playEnvironmentStore.resetXmlAndProcess();\n diagramStore.reset();\n processInstanceStore.reset();\n processInstanceStore.setInstanceDetails({\n instanceKey: processInstanceKey,\n instanceType: 'EXISTING_INSTANCE',\n });\n const processXmlResponse =\n await zeebePlayService.fetchProcessXml(processDefinitionKey);\n\n if (!processXmlResponse.success) {\n displayNotification?.error(REQUEST_FAILURE);\n processInstanceStore.setInstanceDetails({\n instanceKey: existingProcessInstanceKey,\n instanceType: 'EXISTING_INSTANCE',\n });\n\n playEnvironmentStore.setXmlAndProcess({\n xml: existingXml,\n processId: existingProcessId,\n });\n return;\n }\n\n playEnvironmentStore.setXmlAndProcess({\n xml: processXmlResponse.response,\n processId,\n });\n },\n [displayNotification],\n );\n\n return {reInitializePlay};\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {createContext} from 'react';\nimport {DisplayNotification} from './types';\n\ntype ContextType = {\n featureFlags: {\n areAIFeaturesEnabled: boolean;\n isSaveExampleDataEnabled: boolean;\n isReplayScenariosEnabled: boolean;\n shouldUseOrchestrationClusterAPI: boolean;\n areUserTasksWithJobImplementationDeprecated: boolean;\n };\n isUserOrgOwnerOrAdmin?: boolean;\n organizationManagementPageUrl?: string;\n monacoLoaderConfig?: {\n paths?:\n | {\n vs?: string | undefined;\n }\n | undefined;\n };\n displayNotification?: DisplayNotification;\n switchToImplementMode?: (shouldOpenOutputTab?: boolean) => void;\n publishMessage?: ({\n elementId,\n messageName,\n correlationKey,\n variables,\n timeToLive,\n messageId,\n isStartEvent,\n }: {\n elementId: string;\n messageName: string;\n correlationKey?: string;\n variables?: string;\n timeToLive?: string;\n messageId?: string;\n isStartEvent: boolean;\n }) => Promise<{success: boolean; instanceId?: number; status?: number}>;\n broadcastSignal?: ({\n elementId,\n signalName,\n variables,\n isStartEvent,\n }: {\n elementId: string;\n signalName: string;\n variables?: string;\n isStartEvent: boolean;\n }) => Promise<{success: boolean; instanceId?: number}>;\n startInstance?: ({\n elementId,\n variables,\n }: {\n elementId: string;\n variables?: string;\n }) => Promise<{success: boolean; status?: number}>;\n reInitializePlay?: ({\n processId,\n processDefinitionKey,\n processInstanceKey,\n }: {\n processId: string;\n processDefinitionKey: number;\n processInstanceKey: number;\n }) => Promise<void>;\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport default createContext<ContextType>({\n featureFlags: {\n areAIFeaturesEnabled: false,\n isSaveExampleDataEnabled: false,\n isReplayScenariosEnabled: false,\n shouldUseOrchestrationClusterAPI: false,\n areUserTasksWithJobImplementationDeprecated: false,\n },\n});\nexport type {ContextType};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n WarningFilled as BaseWarningFilled,\n CheckmarkOutline as BaseCheckmarkOutline,\n RadioButtonChecked as BaseRadioButtonChecked,\n} from '@carbon/icons-react';\nimport styled from 'styled-components';\n\nexport const WarningFilled = styled(BaseWarningFilled)`\n fill: #da1e28;\n`;\n\nexport const CheckmarkOutline = styled(BaseCheckmarkOutline)`\n fill: #525252;\n`;\n\nexport const RadioButtonChecked = styled(BaseRadioButtonChecked)`\n fill: #24a148;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Error} from '@carbon/icons-react';\n\nimport {RadioButtonChecked, CheckmarkOutline, WarningFilled} from './styled';\nimport React from 'react';\n\nconst stateIconsMap = {\n ACTIVE: RadioButtonChecked,\n COMPLETED: CheckmarkOutline,\n INCIDENT: WarningFilled,\n CANCELED: Error,\n TERMINATED: Error,\n};\n\ntype Props = {\n state: 'ACTIVE' | 'COMPLETED' | 'CANCELED' | 'INCIDENT' | 'TERMINATED';\n size: 16 | 20 | 24;\n};\n\nconst StateIcon: React.FC<Props> = ({state, ...props}) => {\n const TargetComponent = stateIconsMap[state] || Error;\n return <TargetComponent {...props} data-testid={`state-${state}`} />;\n};\n\nexport {StateIcon};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const getChevronDown = (color = 'white') => {\n return `'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><polygon fill=\"${color}\" points=\"12.5 16.45 7.55 11.5 8.964 10.086 12.5 13.621 16.036 10.086 17.45 11.5\"/></svg>'`;\n};\n\ntype ButtonProps = {\n $variant: 'text' | 'secondary' | 'primary' | 'danger-primary';\n $size: 'small' | 'normal';\n $isDropdown: boolean;\n};\nexport const Wrapper = styled.button<ButtonProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n font-family: inherit;\n font-size: 14px;\n padding: 0 21px;\n cursor: pointer;\n text-decoration: none;\n outline: none;\n color: inherit;\n background-repeat: no-repeat;\n background-position: calc(100% - 10px) center;\n border-radius: 0;\n border-width: 1px;\n border-style: solid;\n border-color: transparent;\n\n .cds--btn::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &[disabled] {\n box-shadow: none;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .loader {\n position: absolute;\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n }\n\n ${({$variant, $isDropdown}) => {\n if ($variant === 'primary') {\n return `\n background-color: var(--cds-blue-60, #0f62fe);\n ${\n $isDropdown\n ? `background-image: url(${getChevronDown()}); padding-right: 40px;`\n : ''\n };\n color: white;\n font-weight: bold;\n\n &:not([disabled]):hover {\n background-color: var(--cds-blue-70, #0043ce);\n }\n\n &:not([disabled]):focus {\n border-color: var(--cds-blue-60);\n box-shadow: inset 0 0 0 1px var(--cds-blue-60, #0f62fe),inset 0 0 0 2px white\n }\n\n &:not([disabled]):active {\n background-color: var(--cds-blue-80, #002d9c)\n }\n\n &[disabled] {\n background-color: var(--cds-blue-40, #78a9ff);\n }\n `;\n } else if ($variant === 'danger-primary') {\n return `\n border-size: 1px;\n border-color: var(--cm-color-button-red3, #ff0a0a);\n background-color: var(--cm-color-red-base, #ff3d3d);\n color: white;\n font-weight: bold;\n `;\n } else if ($variant === 'secondary') {\n return `\n background-color: var(--silver-base-97);\n ${\n $isDropdown\n ? `background-image: url(${getChevronDown(\n 'hsl(0,0%,33%)',\n )}); padding-right: 40px;`\n : ''\n };\n color: var(--grey-darken-30);\n border: 1px solid var(--silver-darken-80);\n font-weight: bold;\n\n &:not([disabled]):hover, &:not([disabled]):focus {\n background-color: var(--silver-darken-94);\n border-color: var(--silver-darken-80);\n }\n\n &:not([disabled]):active {\n background-color: var(--silver-darken-87);\n border-color: var(--silver-darken-80);\n }\n\n &[disabled] {\n background-color: var(--silver-base-97);\n border-color: var(--silver-darken-87);\n color: var(--grey-lighten-56);\n }\n `;\n } else if ($variant === 'text') {\n return `\n font-weight: 500;\n background-color: transparent;\n ${\n $isDropdown\n ? `background-image: url(${getChevronDown('hsl(0,0%,33%)')});`\n : ''\n };\n border: none;\n padding: ${$isDropdown ? '0 35px 0 0' : '0'};\n margin: 0;\n `;\n }\n }}\n ${({$size}) => {\n if ($size == 'small') {\n return `\n height: 30px;\n border-radius: 2px;\n line-height: 26px;\n font-size: 13px;\n `;\n }\n\n return `\n height: 36px;\n line-height: 32px;\n border-radius: 3px;\n `;\n }}\n`;\n\nexport const Content = styled.div`\n display: flex;\n align-items: center;\n\n &.is-loading {\n opacity: 0.35;\n }\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {forwardRef} from 'react';\nimport {Loader} from '../index';\nimport * as Styled from './styled';\n\ntype Props = {\n children?: React.ReactNode;\n onClick: () => void;\n variant?: 'text' | 'secondary' | 'primary' | 'danger-primary';\n disabled?: boolean;\n size?: 'small' | 'normal';\n lightLoader?: boolean;\n loaderSize?: 'small' | 'normal';\n loading?: boolean;\n component?: 'button';\n dropdown?: boolean;\n};\n\nconst Button = forwardRef<HTMLButtonElement, Props>(\n (\n {\n children,\n component = 'button',\n dropdown = false,\n disabled = false,\n loading = false,\n lightLoader = false,\n loaderSize = 'normal',\n size = 'normal',\n variant = 'primary',\n\n ...props\n },\n ref,\n ) => (\n <Styled.Wrapper\n as={component}\n ref={ref}\n $isDropdown={dropdown}\n disabled={loading || disabled}\n $size={size}\n $variant={variant}\n {...props}\n >\n {loading ? (\n <>\n <Loader className=\"loader\" light={lightLoader} size={loaderSize} />\n <Styled.Content className=\"is-loading\">{children}</Styled.Content>\n </>\n ) : (\n children\n )}\n </Styled.Wrapper>\n ),\n);\n\nexport default Button;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {keyframes} from 'styled-components';\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\ntype LoaderProps = {\n size?: 'small' | 'normal';\n light?: boolean;\n};\n\nexport const Loader = styled.span<LoaderProps>`\n display: inline-block;\n width: ${({size = 'small'}) => (size == 'small' ? '20px' : '40px')};\n height: ${({size = 'small'}) => (size == 'small' ? '20px' : '40px')};\n border-radius: 50%;\n border: ${({size = 'small'}) => (size == 'small' ? '2px' : '4px')} solid\n ${({light = false}) => (light ? 'white' : 'var(--cds-blue-60)')};\n border-bottom-color: transparent;\n animation: ${spin} 1.2s linear infinite;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport * as Styled from './Loader.styled';\n\nexport default Styled.Loader;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\ntype IconButtonProps = {\n noRadius?: boolean;\n isActive?: boolean;\n isHover?: boolean;\n size?: 'small' | 'normal';\n};\n\n// The `!important` modifier for the `isActive` state is needed\n// because we need to overwrite the Entity List's behavior of hiding\n// buttons when the row is not focused or hovered over.\nexport const IconButton = styled.button<IconButtonProps>`\n border-radius: ${({noRadius}) => (noRadius ? 'inherit' : '50%')};\n cursor: pointer;\n border: none;\n background-color: transparent;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n outline: none;\n color: inherit;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:not([disabled]):hover {\n background-color: rgba(0, 0, 0, 0.07);\n }\n\n &:not([disabled]):active {\n background-color: rgba(0, 0, 0, 0.16);\n }\n\n &[disabled] {\n color: var(--grey-lighten-56);\n cursor: not-allowed;\n }\n\n ${({isActive, isHover}) => {\n if (isActive)\n return `\n background-color: rgba(0, 0, 0, 0.16);\n opacity: 1 !important;\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.16);\n }\n `;\n\n if (isHover) return 'background-color: rgba(0, 0, 0, 0.07);';\n }}\n\n ${({size = 'normal'}) => {\n if (size == 'small') {\n return `\n height: 30px;\n width: 30px;\n `;\n }\n\n return `\n height: 36px;\n width: 36px;\n `;\n }}\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nexport const FormInput = styled.input`\n font: inherit;\n color: var(--grey-darken-33);\n width: 100%;\n\n border: 1px solid\n ${({\n //@ts-expect-error Property 'error' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, never>'.ts(2339)\n error,\n }) => (error ? 'var(--red-base-62)' : 'var(--silver-darken-80)')};\n margin: 0;\n height: 36px;\n padding: 8px 15px;\n background-color: white;\n transition: border 0.15s linear;\n border-radius: 3px;\n -webkit-tap-highlight-color: transparent;\n outline: none;\n box-sizing: border-box;\n\n &:disabled {\n background-color: var(--silver-base-97);\n cursor: not-allowed;\n }\n\n &:focus {\n border-color: var(--cds-blue-60);\n }\n\n &::-ms-reveal,\n &::-ms-clear {\n display: none;\n }\n`;\n\nexport const FormTextarea = styled.textarea`\n font: inherit;\n color: var(--grey-darken-33);\n width: 100%;\n border: 1px solid\n ${({\n //@ts-expect-error Property 'error' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, never>'.ts(2339)\n error,\n }) => (error ? 'var(--red-base-62)' : 'var(--silver-darken-80)')};\n margin: 0;\n padding: 8px 15px;\n min-height: 36px;\n ${({\n //@ts-expect-error Property 'grow' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, never>'.ts(2339)\n grow,\n }) => (grow ? 'max-height: 100px' : '')};\n background-color: white;\n line-height: 1.3;\n transition: border 0.15s linear;\n border-radius: 3px;\n -webkit-tap-highlight-color: transparent;\n outline: none;\n box-sizing: border-box;\n\n &:disabled {\n background-color: var(--silver-base-97);\n cursor: not-allowed;\n }\n\n &:focus {\n border-color: var(--cds-blue-60);\n }\n`;\n\nexport const FormLabel = styled.label`\n display: block;\n margin-bottom: var(--spacing-tiny);\n`;\n\nexport const FormError = styled.p`\n margin: 3px 0 0 0;\n font-size: 12px;\n color: var(--red-darken-52);\n`;\n\nexport const FormGroup = styled.div`\n width: 100%;\n position: relative;\n\n ${({\n //@ts-expect-error Property 'hasMarginBottom' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>'.ts(2339)\n hasMarginBottom,\n }) => hasMarginBottom && 'margin-bottom: 15px'};\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect, forwardRef} from 'react';\n\nimport {VARCHAR_MAX} from 'modules/utils/constants';\n\nimport * as Styled from './Input.styled';\n\ntype Props = {\n label?: string;\n error?: boolean;\n multiline?: boolean;\n hasMarginBottom?: boolean;\n grow?: boolean;\n type?: string;\n rows?: string;\n value?: string;\n placeholder?: string;\n};\n\nconst Input = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n error = false,\n multiline = false,\n grow = false,\n type = 'text',\n hasMarginBottom = false,\n ...props\n },\n ref,\n ) => {\n const randomId =\n label?.toLowerCase() +\n '-' +\n Math.random()\n .toString(36)\n .replace(/[^a-z]+/g, '')\n .substr(2, 10);\n\n const calculateHeight = (evt?: InputEvent) => {\n //@ts-expect-error 'ref' is possibly 'null'.ts(18047)\n const target = evt ? evt.target : ref.current;\n\n target.style.height = 'initial';\n\n const computed = window.getComputedStyle(target);\n const height =\n parseInt(computed.getPropertyValue('border-top-width'), 10) +\n target.scrollHeight +\n parseInt(computed.getPropertyValue('border-bottom-width'), 10);\n\n target.style.height = height + 'px';\n };\n\n const handleKeyUp = (evt: KeyboardEvent) => {\n if (evt.key == 'Enter') {\n calculateHeight();\n }\n };\n\n useEffect(() => {\n //@ts-expect-error Property 'current' does not exist on type '(instance: HTMLDivElement | null) => void'.ts(2339)\n if (multiline && ref && ref.current) {\n //@ts-expect-error Property 'current' does not exist on type '(instance: HTMLDivElement | null) => void'.ts(2339)\n const element = ref.current;\n\n element.addEventListener('input', calculateHeight);\n element.addEventListener('keyup', handleKeyUp);\n\n calculateHeight();\n\n return () => {\n element.removeEventListener('input', calculateHeight);\n element.removeEventListener('keyup', handleKeyUp);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n //@ts-expect-error Property 'hasMarginBottom' does not exist on type 'IntrinsicAttributes & FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>'.ts(2769)\n <Styled.FormGroup hasMarginBottom={hasMarginBottom}>\n {label && (\n <Styled.FormLabel htmlFor={randomId}>{label}</Styled.FormLabel>\n )}\n {multiline ? (\n //@ts-expect-error Type 'ForwardedRef<HTMLDivElement>' is not assignable to type 'LegacyRef<HTMLTextAreaElement> | undefined'.ts(2769)\n <Styled.FormTextarea\n {...props}\n grow={grow}\n id={label ? randomId : null}\n error={error}\n ref={ref}\n />\n ) : (\n //@ts-expect-error Type 'ForwardedRef<HTMLDivElement>' is not assignable to type 'LegacyRef<HTMLInputElement> | undefined'.ts(2769)\n <Styled.FormInput\n type={type}\n maxLength={VARCHAR_MAX}\n {...props}\n id={label ? randomId : null}\n error={error}\n ref={ref}\n />\n )}\n </Styled.FormGroup>\n );\n },\n);\n\nexport default Input;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {keyframes} from 'styled-components';\n\nconst ARROW_SIZE = 5;\n\nconst fade = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\ntype Props = {\n $align?: 'top' | 'bottom';\n $justify?: 'left' | 'center' | 'right';\n $position: {top: number; left: number};\n};\n\nexport const Wrapper = styled.div<Props>`\n position: fixed;\n top: ${({$position}) => `${$position.top}px`};\n left: ${({$position}) => `${$position.left}px`};\n border-radius: 4px;\n color: white;\n z-index: var(--z-tooltip);\n padding: 6px 8px;\n max-width: 380px;\n font-weight: 500;\n word-break: break-word;\n animation: ${fade} 0.2s ease-out forwards;\n\n ${({color}) => {\n return `\n background-color: ${getColor(color)};\n `;\n }}\n\n &::after {\n content: '';\n position: absolute;\n pointer-events: none;\n width: 0;\n height: 0;\n border: 5px solid transparent;\n\n ${({$align, color}) => {\n switch ($align) {\n case 'bottom':\n return `\n border-bottom-color: ${getColor(color)};\n bottom: 100%;\n `;\n default:\n return `\n border-top-color: ${getColor(color)};\n top: 100%;\n `;\n }\n }}\n\n ${({$justify}) => {\n switch ($justify) {\n case 'left':\n return `left: ${ARROW_SIZE}px;`;\n case 'right':\n return `right: ${ARROW_SIZE}px;`;\n default:\n return `\n left: 50%;\n transform: translateX(-50%);\n `;\n }\n }}\n }\n`;\n\nconst getColor = (\n //@ts-expect-error Parameter 'color' implicitly has an 'any' type.ts(7006)\n color,\n) => (color === 'blue' ? 'var(--cds-blue-60)' : 'var(--grey-darken-33)');\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Fragment,\n cloneElement,\n Children,\n useState,\n useEffect,\n useRef,\n} from 'react';\nimport {createPortal} from 'react-dom';\n//@ts-expect-error Module '\"prop-types\"' has no exported member 'PropTypes'.ts(2305)\nimport {PropTypes} from 'prop-types';\n\nimport * as Styled from './Tooltip.styled';\n\nconst ARROW_SIZE = 5;\n\n/**\n * Can be configured to show on hover (normal tooltip functionality) OR\n * show based on a timer\n *\n * The tooltip will show based on a timer if the `showAfter` prop is set. Otherwise,\n * it will be shown on hover. If the `hideAfter` prop is set along with `showAfter`, the tooltip\n * will also close based on a timer. In timer mode, clicking anywhere outside will always close the tooltip.\n *\n * The `showOnlyOnOverflow` prop can be set if the tooltip need to be shown only when the content\n * overflows (works only in hover mode).\n *\n */\n\n//@ts-expect-error Parameter 'Component' implicitly has an 'any' type.ts(7006)\nconst withSharedState = (Component) => {\n const wrapped = ({\n //@ts-expect-error Binding element 'children' implicitly has an 'any' type.ts(7031)\n children,\n showOnlyOnOverflow = false,\n interactive = false,\n ...props\n }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [anchorEl, setAnchorEl] = useState();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [timer, setTimer] = useState();\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const showTimer = 0;\n const hideTimer = 0;\n\n return () => {\n if (showTimer) {\n clearTimeout(showTimer);\n }\n if (hideTimer) {\n clearTimeout(hideTimer);\n }\n };\n }, []);\n\n children = Children.map(children, (child) => {\n // Each child can be the anchor element when hovered over\n return cloneElement(child, {\n //@ts-expect-error Argument of type 'EventTarget & HTMLElement' is not assignable to parameter of type 'SetStateAction<undefined>'.ts(2345)\n onMouseEnter: (evt) => setAnchorEl(evt.currentTarget),\n onMouseLeave: () => {\n if (interactive) {\n //@ts-expect-error Argument of type 'number' is not assignable to parameter of type 'SetStateAction<undefined>'.ts(2345)\n setTimer(setTimeout(setAnchorEl, 200));\n } else {\n //@ts-expect-error Expected 1 arguments, but got 0.ts(2554)\n setAnchorEl();\n }\n },\n });\n });\n\n let showTooltip = false;\n\n showTooltip = Boolean(anchorEl);\n if (showOnlyOnOverflow) {\n const isOverflowing =\n //@ts-expect-error 'anchorEl' is possibly 'undefined'.ts(18048)\n Boolean(anchorEl) && anchorEl.scrollWidth > anchorEl.clientWidth;\n showTooltip = isOverflowing;\n }\n\n return (\n <Fragment>\n {children}\n\n {showTooltip && (\n <Component\n anchorEl={anchorEl}\n setAnchorEl={setAnchorEl}\n timer={timer}\n {...props}\n />\n )}\n </Fragment>\n );\n };\n\n wrapped.propTypes = {\n interactive: PropTypes.bool,\n showOnlyOnOverflow: PropTypes.bool,\n };\n\n return wrapped;\n};\n\ntype TooltipProps = {\n title: React.ReactNode;\n children: React.ReactNode;\n align?: 'top' | 'bottom';\n justify?: 'left' | 'center' | 'right';\n interactive?: boolean;\n controlledByTimer?: boolean;\n color?: string;\n keepOpen?: boolean;\n onClose?: () => void;\n showOnlyOnOverflow?: boolean;\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nconst Tooltip: React.FC<TooltipProps> = ({\n //@ts-expect-error Binding element 'timer' implicitly has an 'any' type.ts(7031)\n timer,\n //@ts-expect-error Binding element 'setAnchorEl' implicitly has an 'any' type.ts(7031)\n setAnchorEl,\n //@ts-expect-error Binding element 'anchorEl' implicitly has an 'any' type.ts(7031)\n anchorEl,\n title,\n align = 'bottom',\n justify = 'center',\n controlledByTimer = false,\n color = 'grey',\n onClose,\n keepOpen = false,\n}) => {\n const [position, setPosition] = useState({top: 0, left: 0});\n const [alignment, setAlignment] = useState(align);\n const tooltip = useRef();\n\n useEffect(() => {\n const {top, bottom, left, width} = anchorEl.getBoundingClientRect();\n const insufficientSpaceAtBottom =\n //@ts-expect-error 'tooltip.current' is possibly 'undefined'.ts(18048)\n bottom + tooltip.current.offsetHeight + ARROW_SIZE > window.innerHeight;\n\n const getLeftPosition = () => {\n switch (justify) {\n case 'left':\n return left;\n case 'right':\n //@ts-expect-error 'tooltip.current' is possibly 'undefined'.ts(18048)\n return left + width - tooltip.current.offsetWidth;\n default:\n //@ts-expect-error 'tooltip.current' is possibly 'undefined'.ts(18048)\n return left - tooltip.current.offsetWidth / 2 + width / 2;\n }\n };\n\n const getTopPosition = () => {\n if (alignment == 'top' || insufficientSpaceAtBottom) {\n //@ts-expect-error 'tooltip.current' is possibly 'undefined'.ts(18048)\n return top - tooltip.current.offsetHeight - ARROW_SIZE - 5;\n }\n\n return bottom + ARROW_SIZE + 5;\n };\n\n if (insufficientSpaceAtBottom) {\n setAlignment('top');\n }\n\n setPosition({\n top: getTopPosition(),\n left: getLeftPosition(),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [anchorEl, anchorEl?.getBoundingClientRect().top]);\n\n // Close tooltip when clicked outside (in timer mode)\n useEffect(() => {\n if (controlledByTimer) {\n //@ts-expect-error Parameter 'e' implicitly has an 'any' type.ts(7006)\n const handleClick = (e) => {\n //@ts-expect-error 'tooltip.current' is possibly 'undefined'.ts(18048)\n if (tooltip.current.contains(e.target)) {\n return; // inside click\n }\n if (!keepOpen) {\n setAnchorEl(); // outside click\n }\n };\n document.addEventListener('mousedown', handleClick);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Call `onClose` method (if present) when closing, in timer mode\n useEffect(() => {\n if (controlledByTimer && onClose) {\n return () => {\n onClose();\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return createPortal(\n <Styled.Wrapper\n onMouseEnter={() => clearTimeout(timer)}\n onMouseLeave={() => !controlledByTimer && setAnchorEl()}\n $position={position}\n $justify={justify}\n $align={alignment}\n //@ts-expect-error Type 'MutableRefObject<undefined>' is not assignable to type 'LegacyRef<HTMLDivElement> | undefined'.ts(2769)\n ref={tooltip}\n color={color}\n role=\"tooltip\"\n aria-hidden={!anchorEl}\n >\n {title}\n </Styled.Wrapper>,\n document.body,\n );\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport default withSharedState(Tooltip);\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\nimport {MenuItemDivider} from '@carbon/react';\n\nexport const Dropdown = styled.ul`\n list-style: none;\n margin: 4px 0 0 0;\n position: fixed;\n z-index: var(--z-dropdown);\n border-radius: 3px;\n padding: 5px 0;\n min-width: 70px;\n max-width: 350px;\n\n border-radius: 5px;\n box-shadow: rgb(0 0 0 / 20%) 0px 1px 10px 0px;\n background: var(--silver-base-98);\n\n ${({\n //@ts-expect-error Property 'size' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLUListElement>, HTMLUListElement>, never>'.ts(2339)\n size,\n }) => {\n if (size == 'small') {\n return `\n font-size: 13px;\n\n li {\n padding: 5px 10px;\n }\n\n a {\n padding: 0;\n }\n `;\n }\n }}\n\n ${({\n //@ts-expect-error Property 'width' does not exist on type 'ExecutionContext & FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLUListElement>, HTMLUListElement>, never>'.ts(2339)\n width,\n }) => {\n if (width) {\n return `\n min-width: ${width}px;\n `;\n }\n }}\n\n hr {\n margin: 5px 0;\n height: 1px;\n border: none;\n background-color: var(--silver-darken-87);\n }\n`;\n\ntype ListItemProps = {\n $noPadding?: boolean;\n $isDangerous?: boolean;\n $isDisabled?: boolean;\n $isActive?: boolean;\n $isHover?: boolean;\n};\n\nexport const ListItem = styled.li<ListItemProps>`\n display: flex;\n align-items: center;\n padding: ${({$noPadding}) => ($noPadding ? '0' : '7px 20px')};\n position: relative;\n color: var(--grey-darken-23);\n white-space: nowrap;\n outline: none;\n font-size: 14px;\n transition: all 150ms linear 0s;\n border-radius: 3px;\n\n ${({$isDangerous}) => $isDangerous && 'color: var(--red-darken-42);'}\n\n ${({$isDisabled}) => {\n if ($isDisabled) {\n return `\n color: var(--grey-lighten-56);\n pointer-events: none;\n `;\n } else {\n return `\n cursor: pointer;\n\n &:hover,\n &:focus {\n background-color: var(--silver-darken-94);\n }\n\n &:active {\n background-color: var(--silver-darken-80);\n }\n `;\n }\n }}\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n ${({$isActive, $isHover}) => {\n if ($isActive)\n return `\n background-color: var(--silver-darken-94);\n\n &:hover, &:focus {\n background-color: var(--silver-darken-94);\n }\n `;\n\n if ($isHover) return 'background-color: var(--silver-darken-94);';\n }}\n\n &[disabled] {\n opacity: 0.5;\n pointer-events: none;\n }\n`;\n\nconst sharedLinkStyles = css`\n display: flex;\n align-items: center;\n padding: 7px 20px;\n color: inherit;\n white-space: nowrap;\n outline: none;\n text-decoration: none;\n`;\n\nexport const AnchorLink = styled.a`\n ${sharedLinkStyles}\n`;\n\nexport const ListGroupTitle = styled.div`\n padding: var(--spacing-tiny) var(--spacing-medium, 20px) 0px;\n color: var(--cm-color-ui-light6);\n font-family: var(--cm-font-text);\n font-size: 11px;\n`;\n\nexport const ListItemDivider = styled(MenuItemDivider)`\n &.cds--menu-item-divider {\n padding: 0;\n }\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Tooltip} from 'modules/primitives';\n\nimport * as Styled from './styled';\n\nexport default function ListItem({\n //@ts-expect-error Binding element 'children' implicitly has an 'any' type.ts(7031)\n children,\n //@ts-expect-error Binding element 'noPadding' implicitly has an 'any' type.ts(7031)\n noPadding,\n //@ts-expect-error Binding element 'disabled' implicitly has an 'any' type.ts(7031)\n disabled,\n ...props\n}) {\n return (\n <Styled.ListItem\n disabled={disabled}\n //@ts-expect-error Type 'string' is not assignable to type 'number'.ts(2769)\n tabIndex=\"0\"\n role=\"menuitem\"\n $noPadding={noPadding}\n {...props}\n >\n <Tooltip title={children} showOnlyOnOverflow>\n <div className=\"overflow-ellipsis\">{children}</div>\n </Tooltip>\n </Styled.ListItem>\n );\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {PureComponent, createRef} from 'react';\nimport {createPortal} from 'react-dom';\nimport PropTypes from 'prop-types';\n\nimport ListItem from './ListItem';\nimport * as Styled from './styled';\n\nexport default class Dropdown extends PureComponent {\n state = {};\n ref = createRef();\n\n //@ts-expect-error type-error\n componentDidUpdate(prevProps) {\n //@ts-expect-error Property 'open' does not exist on type 'Readonly<{}>'.ts(2339)\n if (prevProps.open == this.props.open) {\n return;\n }\n\n //@ts-expect-error Property 'open' does not exist on type 'Readonly<{}>'.ts(2339)\n if (this.props.open) {\n this.init();\n } else {\n this.reset();\n }\n }\n\n componentWillUnmount() {\n this.reset();\n }\n\n init() {\n document.body.addEventListener('click', this.handleBodyClick, true);\n window.addEventListener('keydown', this.handleKeyPress);\n window.addEventListener('scroll', this.handleClose);\n\n this.setState(this.position);\n }\n\n reset() {\n document.body.removeEventListener('click', this.handleBodyClick, true);\n window.removeEventListener('keydown', this.handleKeyPress);\n window.removeEventListener('scroll', this.handleClose);\n }\n\n //@ts-expect-error Parameter 'evt' implicitly has an 'any' type.ts(7006)\n handleBodyClick = (evt) => {\n if (\n evt.target.id !== 'runtime-download' &&\n !evt.target.closest('[data-dropdown]')\n ) {\n this.handleClose(evt);\n }\n };\n\n //@ts-expect-error Parameter 'evt' implicitly has an 'any' type.ts(7006)\n handleKeyPress = (evt) => {\n if (evt.key == 'Escape') {\n this.handleClose(evt);\n }\n };\n\n //@ts-expect-error Parameter 'evt' implicitly has an 'any' type.ts(7006)\n handleClose = (evt) => {\n evt.preventDefault();\n\n //@ts-expect-error Property 'onClose' does not exist on type 'Readonly<{}>'.ts(2339)\n if (typeof this.props.onClose === 'function') {\n evt.stopPropagation();\n\n //@ts-expect-error Property 'onClose' does not exist on type 'Readonly<{}>'.ts(2339)\n this.props.onClose(evt);\n }\n };\n\n get position() {\n const position = {};\n\n //@ts-expect-error Property 'anchorEl' does not exist on type 'Readonly<{}>'.ts(2339)\n if (this.props.anchorEl && this.props.open && this.ref.current) {\n //@ts-expect-error Property 'anchorEl' does not exist on type 'Readonly<{}>'.ts(2339)\n const coords = this.props.anchorEl.getBoundingClientRect();\n\n //@ts-expect-error Property 'align' does not exist on type 'Readonly<{}>'.ts(2339)\n if (this.props.align == 'left') {\n //@ts-expect-error Property 'width' does not exist on type 'Readonly<{}>'.ts(2339)\n if (document.body.offsetWidth - coords.right > this.props.width) {\n //@ts-expect-error Property 'left' does not exist on type '{}'.ts(2339)\n position.left = coords.left;\n } else {\n //@ts-expect-error Property 'right' does not exist on type '{}'.ts(2339)\n position.right = document.body.offsetWidth - coords.right;\n }\n } else {\n //@ts-expect-error Property 'width' does not exist on type 'Readonly<{}>'.ts(2339)\n if (coords.right < this.props.width) {\n //@ts-expect-error Property 'left' does not exist on type '{}'.ts(2339)\n position.left = coords.left;\n } else {\n //@ts-expect-error Property 'right' does not exist on type '{}'.ts(2339)\n position.right = document.body.offsetWidth - coords.right;\n }\n }\n\n if (\n document.body.offsetHeight - coords.bottom >\n //@ts-expect-error Property 'offsetHeight' does not exist on type '{}'.ts(2339)\n this.ref.current.offsetHeight\n ) {\n //@ts-expect-error Property 'top' does not exist on type '{}'.ts(2339)\n position.top = coords.bottom;\n } else {\n //@ts-expect-error Property 'top' does not exist on type '{}'.ts(2339)\n position.top = coords.top - this.ref.current.offsetHeight;\n }\n }\n return position;\n }\n\n render() {\n //@ts-expect-error Property 'open' does not exist on type 'Readonly<{}>'.ts(2339)\n if (!this.props.open) {\n return null;\n }\n\n return createPortal(\n <Styled.Dropdown\n //@ts-expect-error Property 'size' does not exist on type 'Readonly<{}>'.ts(2339)\n size={this.props.size}\n role=\"menu\"\n data-dropdown\n style={this.state}\n //@ts-expect-error Property 'data-test' does not exist on type 'Readonly<{}>'.ts(7053)\n data-test={this.props['data-test']}\n //@ts-expect-error Property 'width' does not exist on type 'Readonly<{}>'.ts(2339)\n width={this.props.width}\n //@ts-expect-error Type 'RefObject<unknown>' is not assignable to type 'LegacyRef<HTMLUListElement> | undefined'.\n ref={this.ref}\n >\n {/* @ts-expect-error Property 'children' does not exist on type 'Readonly<{}>'.ts(2339)*/}\n {this.props.children}\n </Styled.Dropdown>,\n document.body,\n );\n }\n}\n\n//@ts-expect-error Property 'propTypes' does not exist on type 'typeof Dropdown'.ts(2339)\nDropdown.propTypes = {\n onClose: PropTypes.func,\n anchorEl: PropTypes.object,\n align: PropTypes.string,\n open: PropTypes.bool.isRequired,\n size: PropTypes.string,\n width: PropTypes.number,\n};\n\n//@ts-expect-error Property 'defaultProps' does not exist on type 'typeof Dropdown'.ts(2339)\nDropdown.defaultProps = {\n open: false,\n size: 'normal',\n align: 'right',\n width: 200,\n};\n\n//@ts-expect-error Property 'ListItem' does not exist on type 'typeof Dropdown'.ts(2339)\nDropdown.ListItem = ListItem;\n//@ts-expect-error Property 'ListItemDivider' does not exist on type 'typeof Dropdown'.ts(2339)\nDropdown.ListItemDivider = Styled.ListItemDivider;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\n\nimport {Button} from 'modules/primitives';\n\nimport {\n SkeletonText as BaseSkeletonText,\n SkeletonIcon as BaseSkeletonIcon,\n} from '@carbon/react';\n\nconst Header = styled.header`\n width: 100%;\n background: white;\n\n display: flex;\n flex-direction: column;\n border-bottom: 1px solid var(--cds-border-subtle-01, #e0e0e0);\n height: var(--cds-spacing-09);\n`;\n\nconst Container = styled.div`\n display: grid;\n align-items: center;\n padding: 6px 10px;\n grid-template-columns: max-content auto max-content max-content;\n gap: var(--cds-spacing-05);\n`;\n\nconst Table = styled.table`\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n width: 768px;\n`;\n\nconst Th = styled.th`\n color: #525252;\n font-size: 12px;\n font-family: IBM Plex Sans;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0.32px;\n word-wrap: break-word;\n text-align: left;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n width: 176px;\n`;\n\nconst Td = styled.td`\n color: #525252;\n font-size: 14px;\n font-family: IBM Plex Sans;\n font-weight: 400;\n line-height: 18px;\n letter-spacing: 0.16px;\n word-wrap: break-word;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n width: 176px;\n`;\n\nexport const ScenarioNameContainer = styled.div`\n display: flex;\n align-items: baseline;\n gap: var(--cds-spacing-02);\n`;\n\nexport const ScenarioName = styled.span`\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n display: inline-block;\n`;\n\nconst ViewAllButton = styled(Button)`\n color: #0f62fe;\n font-size: 14px;\n font-family: IBM Plex Sans;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0.16px;\n word-wrap: break-word;\n height: 20px;\n`;\n\nconst ScenarioInfo = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n flex-grow: 1;\n`;\n\nconst CoverageContainer = styled.div`\n display: flex;\n align-items: center;\n padding: var(--cds-spacing-03);\n gap: var(--cds-spacing-02);\n`;\n\ntype SkeletonTextProps = {\n $shouldAlignRight?: boolean;\n};\n\nconst SkeletonText = styled(BaseSkeletonText)<SkeletonTextProps>`\n margin: 0;\n ${({$shouldAlignRight = false}) =>\n $shouldAlignRight &&\n css`\n margin-left: auto;\n `};\n`;\n\nconst SkeletonIcon = styled(BaseSkeletonIcon)`\n width: var(--cds-spacing-06);\n height: var(--cds-spacing-06);\n`;\n\nexport {\n Container,\n Header,\n Table,\n Th,\n Td,\n ViewAllButton,\n ScenarioInfo,\n CoverageContainer,\n SkeletonText,\n SkeletonIcon,\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\n\nconst Container = styled.div`\n display: flex;\n justify-content: center;\n ${styles.helperText01};\n background-color: var(--cds-notification-background-warning);\n border: 1px solid var(--cds-support-warning);\n box-shadow: 0 2px 6px var(--cds-shadow);\n`;\n\nconst Text = styled.div`\n padding: var(--cds-spacing-03);\n`;\n\nexport {Container, Text};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {Container, Text} from './styled';\nimport {Button} from '@carbon/react';\n\ntype Props = {\n text: string;\n button?: {\n onClick: () => void;\n label: string;\n };\n};\n\nconst ModificationInfoBanner: React.FC<Props> = ({text, button}) => {\n return (\n <Container>\n <Text>{text}</Text>\n {button && (\n <Button kind=\"ghost\" size=\"sm\" onClick={button.onClick}>\n {button.label}\n </Button>\n )}\n </Container>\n );\n};\n\nexport {ModificationInfoBanner};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\n\ntype Tab = 'scenarios' | 'instances' | 'problems';\n\ntype State = {\n activeTab: Tab;\n};\n\nconst DEFAULT_STATE: State = {\n activeTab: 'instances',\n};\n\nclass BottomBar {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n makeAutoObservable(this);\n }\n\n init(isReplayScenariosEnabled?: boolean) {\n if (isReplayScenariosEnabled) {\n bottomBarStore.setActiveTab('scenarios');\n }\n }\n\n setActiveTab = (tab: Tab) => {\n this.state.activeTab = tab;\n };\n\n reset() {\n this.state = {...DEFAULT_STATE};\n }\n}\n\nexport const bottomBarStore = new BottomBar();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Tooltip} from '@carbon/react';\nimport React from 'react';\n\nconst TooltipWrapper: React.FC<{\n children: React.ReactNode;\n isDisabled: boolean;\n text?: string;\n align?: React.ComponentProps<typeof Tooltip>['align'];\n}> = (props) => {\n const {children, text, align, isDisabled} = props;\n if (props.text !== undefined) {\n return (\n <Tooltip align={align} label={text} description={text}>\n <div>\n {React.isValidElement(children)\n ? React.cloneElement(children, {disabled: isDisabled} as Partial<\n typeof children.props\n >)\n : children}\n </div>\n </Tooltip>\n );\n }\n\n return props.children;\n};\n\nexport {TooltipWrapper};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n generateHistoryKey,\n isCompleteUserActionHistoryAvailable,\n} from 'modules/utils/userActionHistory';\n\nconst getButtonState = ({\n processInstanceKey,\n isCompleted,\n isScenarioSaved,\n canUserSaveScenario,\n}: {\n processInstanceKey: number;\n isCompleted: boolean;\n isScenarioSaved: boolean;\n canUserSaveScenario: boolean;\n}) => {\n if (isScenarioSaved) {\n return {\n isDisabled: true,\n text: 'Current scenario has been saved',\n };\n }\n\n if (!canUserSaveScenario) {\n return {\n isDisabled: true,\n text: \"You cannot save scenarios in this diagram's project. Contact your project admin to give you the necessary permissions.\",\n };\n }\n\n if (\n !isCompleteUserActionHistoryAvailable(\n generateHistoryKey(processInstanceKey),\n )\n ) {\n return {\n isDisabled: true,\n text: 'Not enough data to save a scenario. Re-run your instance and try again.',\n };\n }\n\n if (!isCompleted) {\n return {\n isDisabled: true,\n text: 'Complete the instance to save a scenario and replay this instance later to detect regressions.',\n };\n }\n\n return {\n isDisabled: false,\n text: 'Save a scenario to replay this instance later to detect regressions.',\n };\n};\n\nexport {getButtonState};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\n\ntype CoverageProps = {\n $isGreen?: boolean;\n $hasPrecedingPlusIcon?: boolean;\n};\n\nconst Coverage = styled.span<CoverageProps>`\n font-weight: bold;\n ${({$isGreen, $hasPrecedingPlusIcon}) => {\n return css`\n ${$isGreen && 'color: var(--cds-support-success);'}\n ${$hasPrecedingPlusIcon &&\n css`\n &:before {\n content: '+';\n }\n `}\n `;\n }}\n`;\n\nexport {Coverage};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Coverage} from './styled';\n\ntype Props = {\n isGreen?: boolean;\n hasPrecedingPlusIcon?: boolean;\n children?: React.ReactNode;\n};\n\nconst ScenarioCoverage: React.FC<Props> = ({\n isGreen,\n hasPrecedingPlusIcon,\n children,\n}) => {\n return (\n <Coverage $isGreen={isGreen} $hasPrecedingPlusIcon={hasPrecedingPlusIcon}>\n {children}\n </Coverage>\n );\n};\n\nexport {ScenarioCoverage};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {styles} from '@carbon/elements';\nimport styled from 'styled-components';\n\nconst Info = styled.p`\n ${styles.body01};\n`;\n\nexport {Info};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Callout, Link, Modal, Stack, TextInput} from '@carbon/react';\nimport {ScenarioCoverage} from 'Instance/InstanceHeader/ScenarioCoverage';\nimport {observer} from 'mobx-react';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {useState} from 'react';\nimport {Info} from './styled';\n\ntype Props = {\n title: string;\n onScenarioSaved: (name: string) => void;\n isOpen: boolean;\n onClose: () => void;\n topContent?: React.ReactNode;\n};\n\nconst SaveScenarioModal: React.FC<Props> = observer(\n ({title, isOpen, onScenarioSaved, onClose, topContent}) => {\n const [scenarioName, setScenarioName] = useState('');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n return (\n <Modal\n data-testid=\"save-scenario-modal\"\n open={isOpen}\n modalHeading={title}\n secondaryButtonText=\"Cancel\"\n primaryButtonText=\"Save\"\n onRequestSubmit={() => {\n onScenarioSaved(scenarioName);\n onClose();\n }}\n onRequestClose={onClose}\n preventCloseOnClickOutside\n primaryButtonDisabled={errorMessage !== null || scenarioName === ''}\n >\n <Stack gap={5}>\n {topContent}\n <Info>\n Save scenario to replay this instance later to detect regressions.\n </Info>\n <Info>\n This scenario increases the BPMN coverage of your scenario suite\n from{' '}\n <ScenarioCoverage>{`${scenariosStore.currentTotalCoverage.toFixed(0)}%`}</ScenarioCoverage>{' '}\n to{' '}\n <ScenarioCoverage\n isGreen\n >{`${scenariosStore.newTotalCoverage.toFixed(0)}%`}</ScenarioCoverage>\n . <br />\n <Link\n href=\"https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenario-coverage\"\n target=\"_blank\"\n >\n Learn more\n </Link>\n .\n </Info>\n\n <TextInput\n id=\"scenario-name\"\n labelText=\"Scenario name\"\n placeholder=\"My first scenario\"\n invalid={errorMessage !== null}\n invalidText={errorMessage}\n onChange={(event) => {\n const name = event.target.value;\n setScenarioName(name);\n\n const doesScenarioAlreadyExist =\n scenariosStore.state.scenarios.some(\n (scenario) => scenario.name === name,\n );\n\n if (doesScenarioAlreadyExist) {\n setErrorMessage(\n 'Scenario name is already in use. Please choose a new unique name',\n );\n return;\n }\n\n if (!/^[a-zA-Z0-9 _-]+$/.test(name) || name.trim() === '') {\n setErrorMessage(\n 'Scenario name can only contain letters, numbers, spaces or underscores/hyphens',\n );\n return;\n }\n\n setErrorMessage(null);\n }}\n />\n <Callout\n titleId=\"scenarios-usage\"\n kind=\"info\"\n lowContrast\n actionButtonLabel=\"Learn more\"\n onActionButtonClick={() => {\n window.open(\n 'https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenarios-limitations',\n '_blank',\n );\n }}\n subtitle=\"Scenarios will be saved to a test scenario file in your Web Modeler project. It cannot be run locally or in a pipeline.\"\n />\n </Stack>\n </Modal>\n );\n },\n);\n\nexport {SaveScenarioModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Button} from '@carbon/react';\nimport {observer} from 'mobx-react';\nimport {TooltipWrapper} from 'modules/components/TooltipWrapper';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {getButtonState} from './getButtonState';\nimport {useState} from 'react';\n\nimport {SaveScenarioModal} from './SaveSenarioModal';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype Props = {\n onScenarioSaved: (name: string) => void;\n isScenarioSaved?: boolean;\n};\n\nconst SaveScenario: React.FC<Props> = observer(\n ({onScenarioSaved, isScenarioSaved = false}) => {\n const {\n isCompleted,\n state: {processInstance},\n } = processInstanceStore;\n\n const {canUserSaveExampleData: canUserSaveScenario} = playEnvironmentStore;\n\n if (processInstance === undefined) {\n return null;\n }\n\n const [isSaveScenarioModalVisible, setIsSaveScenarioModalVisible] =\n useState(false);\n\n const {isDisabled, text} = getButtonState({\n processInstanceKey: processInstance.key,\n isCompleted,\n isScenarioSaved,\n canUserSaveScenario,\n });\n\n return (\n <>\n <TooltipWrapper align=\"bottom-end\" isDisabled={isDisabled} text={text}>\n <Button\n size=\"sm\"\n onClick={() => {\n setIsSaveScenarioModalVisible(true);\n }}\n >\n Save scenario\n </Button>\n </TooltipWrapper>\n <SaveScenarioModal\n title=\"Save scenario\"\n isOpen={isSaveScenarioModalVisible}\n onScenarioSaved={onScenarioSaved}\n onClose={() => {\n setIsSaveScenarioModalVisible(false);\n }}\n />\n </>\n );\n },\n);\n\nexport {SaveScenario};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nimport {DefinitionTooltip as BaseDefinitionTooltip} from '@carbon/react';\n\nconst DefinitionTooltip = styled(BaseDefinitionTooltip)`\n .cds--definition-tooltip {\n max-inline-size: 18rem;\n }\n`;\n\nexport {DefinitionTooltip};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Link as BaseLink} from '@carbon/react';\n\nconst Link = styled(BaseLink)`\n color: var(--cds-link-inverse) !important;\n`;\n\nexport {Link};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst getButtonState = ({\n isCompleted,\n isScenarioUpdated,\n canUserUpdateScenario,\n}: {\n isCompleted: boolean;\n isScenarioUpdated: boolean;\n canUserUpdateScenario: boolean;\n}) => {\n if (isScenarioUpdated) {\n return {\n isDisabled: true,\n text: 'Current scenario has been updated',\n };\n }\n\n if (!canUserUpdateScenario) {\n return {\n isDisabled: true,\n text: \"You cannot update scenarios in this diagram's project. Contact your project admin to give you the necessary permissions.\",\n };\n }\n\n if (!isCompleted) {\n return {\n isDisabled: true,\n text: 'Complete the instance to update the scenario.',\n };\n }\n\n return {\n isDisabled: false,\n text: 'Update the scenario to reflect recent process changes.',\n };\n};\n\nexport {getButtonState};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {InlineNotification, Modal} from '@carbon/react';\nimport {observer} from 'mobx-react';\n\ntype Props = {\n title: string;\n scenarioName: string;\n onScenarioUpdated: () => void;\n isOpen: boolean;\n onClose: () => void;\n};\n\nconst UpdateScenarioModal: React.FC<Props> = observer(\n ({title, scenarioName, isOpen, onScenarioUpdated, onClose}) => {\n return (\n <Modal\n size=\"sm\"\n data-testid=\"update-scenario-modal\"\n open={isOpen}\n modalHeading={title}\n secondaryButtonText=\"Cancel\"\n primaryButtonText=\"Update\"\n onRequestSubmit={() => {\n onScenarioUpdated();\n onClose();\n }}\n onRequestClose={onClose}\n preventCloseOnClickOutside\n >\n <InlineNotification\n kind=\"warning\"\n lowContrast\n hideCloseButton\n title=\"This change cannot be undone.\"\n subtitle={`You are about to update the scenario '${scenarioName}'.`}\n />\n </Modal>\n );\n },\n);\n\nexport {UpdateScenarioModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Button} from '@carbon/react';\nimport {observer} from 'mobx-react';\nimport {useState} from 'react';\nimport {TooltipWrapper} from 'modules/components/TooltipWrapper';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {getButtonState} from './getButtonState';\nimport {UpdateScenarioModal} from './UpdateScenarioModal';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype Props = {\n onScenarioUpdated: () => void;\n isScenarioUpdated?: boolean;\n scenarioName: string;\n};\n\nconst UpdateScenario: React.FC<Props> = observer(\n ({onScenarioUpdated, scenarioName, isScenarioUpdated = false}) => {\n const [isUpdateScenarioModalVisible, setIsUpdateScenarioModalVisible] =\n useState(false);\n\n const {canUserSaveExampleData: canUserUpdateScenario} =\n playEnvironmentStore;\n\n const {isDisabled, text} = getButtonState({\n isCompleted: processInstanceStore.isCompleted,\n isScenarioUpdated,\n canUserUpdateScenario,\n });\n\n return (\n <>\n <TooltipWrapper align=\"bottom-end\" isDisabled={isDisabled} text={text}>\n <Button\n size=\"sm\"\n onClick={() => {\n setIsUpdateScenarioModalVisible(true);\n }}\n >\n Update scenario\n </Button>\n </TooltipWrapper>\n <UpdateScenarioModal\n title=\"Update scenario\"\n scenarioName={scenarioName}\n isOpen={isUpdateScenarioModalVisible}\n onScenarioUpdated={onScenarioUpdated}\n onClose={() => {\n setIsUpdateScenarioModalVisible(false);\n }}\n />\n </>\n );\n },\n);\n\nexport {UpdateScenario};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const HEADER_COLUMN_WIDTH = '140px';\n\nexport const getHeaderColumns = ({\n isReplayScenariosEnabled,\n isCalledProcess,\n}: {\n isReplayScenariosEnabled: boolean;\n isCalledProcess: boolean;\n}) => {\n return [\n {\n name: 'Process Instance Key',\n skeletonWidth: HEADER_COLUMN_WIDTH,\n },\n ...(!isCalledProcess\n ? [\n {\n name: 'Process Instances',\n skeletonWidth: HEADER_COLUMN_WIDTH,\n },\n ]\n : []),\n ...(isCalledProcess\n ? [\n {\n name: 'Parent Process Instance Key',\n skeletonWidth: HEADER_COLUMN_WIDTH,\n },\n ]\n : []),\n ...(isReplayScenariosEnabled && !isCalledProcess\n ? [\n {\n name: 'Scenario',\n skeletonWidth: HEADER_COLUMN_WIDTH,\n },\n ]\n : []),\n ];\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {HEADER_COLUMN_WIDTH} from './get-header-columns';\nimport {\n Header,\n Container,\n Table,\n Th,\n Td,\n SkeletonText,\n SkeletonIcon,\n} from './styled';\n\ntype Props = {\n headerColumns: {name: string; skeletonWidth: string}[];\n isReplayScenariosEnabled: boolean;\n};\n\nconst Skeleton: React.FC<Props> = ({\n headerColumns,\n isReplayScenariosEnabled,\n}) => {\n return (\n <Header data-testid=\"instance-header-skeleton\">\n <Container>\n <SkeletonIcon />\n <Table>\n <thead>\n <tr>\n {headerColumns.map(({name}, index) => (\n <Th key={index}>{name}</Th>\n ))}\n </tr>\n </thead>\n <tbody>\n <tr>\n {headerColumns.map(({skeletonWidth}, index) => (\n <Td key={index}>\n <SkeletonText width={skeletonWidth} />\n </Td>\n ))}\n </tr>\n </tbody>\n </Table>\n {isReplayScenariosEnabled && (\n <SkeletonText\n data-testid=\"scenarios-skeleton\"\n width={HEADER_COLUMN_WIDTH}\n $shouldAlignRight\n />\n )}\n </Container>\n </Header>\n );\n};\n\nexport {Skeleton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n ModalHeader as BaseModalHeader,\n ModalBody as BaseModalBody,\n Button,\n} from '@carbon/react';\nimport styled, {css} from 'styled-components';\n\nconst ModalHeader = styled(BaseModalHeader)`\n h3 {\n font-weight: 400;\n }\n`;\n\ntype ModalBodyProps = {\n $enableContentOverflow: boolean;\n};\n\nconst ModalBody = styled(BaseModalBody)<ModalBodyProps>`\n ${({$enableContentOverflow}) =>\n $enableContentOverflow &&\n css`\n overflow: unset;\n `}\n`;\n\ntype SecondaryButtonProps = {\n $hasIcon: boolean;\n};\n\nconst SecondaryButton = styled(Button)<SecondaryButtonProps>`\n ${({$hasIcon}) =>\n $hasIcon &&\n css`\n padding-right: 15px;\n `}\n`;\n\nexport {ModalHeader, ModalBody, SecondaryButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Button,\n ComposedModal as BaseComposedModal,\n Modal,\n ModalFooter,\n} from '@carbon/react';\nimport {createPortal} from 'react-dom';\nimport {ModalHeader, ModalBody, SecondaryButton} from './styled';\n\ntype Props = {\n title?: string;\n readOnly?: boolean;\n size?: React.ComponentProps<typeof Modal>['size'];\n isVisible: boolean;\n isPrimaryButtonDisabled?: boolean;\n enableContentOverflow?: boolean;\n primaryButtonLabel: string;\n secondaryButton?: {\n label: string;\n id?: string;\n disabled?: boolean;\n title?: string;\n icon?: React.ReactNode;\n onClick: () => void;\n };\n ghostButton?: {\n label: string;\n onClick: () => void;\n };\n onClose?: () => void;\n onSubmit?: () => void;\n modalBody: React.ReactNode;\n dataTestId?: string;\n};\n\nconst ComposedModal: React.FC<Props> = ({\n title,\n size = 'md',\n readOnly = false,\n isVisible,\n isPrimaryButtonDisabled = false,\n enableContentOverflow = false,\n primaryButtonLabel,\n secondaryButton,\n ghostButton,\n onClose,\n onSubmit,\n modalBody,\n dataTestId,\n}) => {\n return createPortal(\n <BaseComposedModal\n open={isVisible}\n preventCloseOnClickOutside={!readOnly}\n onClose={onClose}\n size={size}\n aria-label={title}\n data-testid={dataTestId}\n >\n <ModalHeader title={title} closeModal={onClose} />\n <ModalBody tabIndex={0} $enableContentOverflow={enableContentOverflow}>\n {modalBody}\n </ModalBody>\n {!readOnly && (\n <ModalFooter>\n {ghostButton !== undefined && (\n <Button kind=\"ghost\" onClick={ghostButton.onClick}>\n {ghostButton.label}\n </Button>\n )}\n {secondaryButton !== undefined && (\n <SecondaryButton\n kind=\"secondary\"\n onClick={secondaryButton.onClick}\n renderIcon={() => secondaryButton.icon}\n id={secondaryButton.id}\n $hasIcon={secondaryButton.icon !== undefined}\n disabled={secondaryButton.disabled}\n title={secondaryButton.title}\n >\n {secondaryButton.label}\n </SecondaryButton>\n )}\n <Button\n kind=\"primary\"\n disabled={isPrimaryButtonDisabled}\n onClick={onSubmit}\n >\n {primaryButtonLabel}\n </Button>\n </ModalFooter>\n )}\n </BaseComposedModal>,\n document.querySelector(\"[data-test='zeebe-play']\") ?? document.body,\n );\n};\n\nexport {ComposedModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n FormLabel as BaseFormLabel,\n ActionableNotification as BaseActionableNotification,\n} from '@carbon/react';\nimport styled from 'styled-components';\n\nconst FormLabel = styled(BaseFormLabel)`\n margin-bottom: var(--cds-spacing-03, 8px);\n`;\n\nconst ActionableNotification = styled(BaseActionableNotification)`\n margin-top: var(--cds-spacing-06, 16px);\n max-width: unset;\n`;\n\nconst EditorContainer = styled.div`\n min-width: 0; // https://github.com/microsoft/monaco-editor/issues/3393\n`;\n\nexport {EditorContainer, FormLabel, ActionableNotification};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport 'monaco-editor/esm/vs/language/json/monaco.contribution.js';\nimport 'monaco-editor/esm/vs/editor/browser/coreCommands.js';\nimport 'monaco-editor/esm/vs/editor/contrib/find/browser/findController.js';\nimport {loader} from '@monaco-editor/react';\n\nfunction loadMonaco(monacoLoaderConfig?: {\n paths?:\n | {\n vs?: string | undefined;\n }\n | undefined;\n}) {\n loader.config(monacoLoaderConfig ?? {paths: {vs: '/min/vs'}});\n return loader.init();\n}\n\nexport {loadMonaco};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport BaseEditor from '@monaco-editor/react';\n\nconst MonacoPlaceholder = styled.div`\n position: absolute;\n white-space: pre-wrap;\n top: 0px;\n left: 64px;\n font-family:\n IBM Plex Mono,\n monospace;\n font-size: 13px;\n font-weight: 400;\n color: #a8a8a8;\n pointer-events: none;\n user-select: none;\n`;\n\nconst Editor = styled(BaseEditor)`\n .monaco-editor {\n .margin {\n background-color: #f4f4f4;\n }\n .monaco-editor-background {\n background-color: #f4f4f4;\n }\n }\n`;\n\nconst EditorContainer = styled.section`\n position: relative;\n min-width: 0; // https://github.com/microsoft/monaco-editor/issues/3393\n`;\n\nexport {MonacoPlaceholder, Editor, EditorContainer};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport PlayContext from 'modules/PlayContext';\nimport {loadMonaco} from 'modules/loadMonaco';\nimport * as monaco_editor from 'monaco-editor';\nimport {useContext, useEffect, useLayoutEffect, useState} from 'react';\nimport {MonacoPlaceholder, Editor, EditorContainer} from './styled';\n\nconst options: React.ComponentProps<typeof Editor>['options'] = {\n minimap: {\n enabled: false,\n },\n fontSize: 13,\n lineHeight: 20,\n fontFamily:\n '\"IBM Plex Mono\", \"Droid Sans Mono\", \"monospace\", monospace, \"Droid Sans Fallback\"',\n formatOnPaste: true,\n formatOnType: true,\n tabSize: 2,\n wordWrap: 'on',\n scrollBeyondLastLine: false,\n overviewRulerBorder: false,\n stickyScroll: {enabled: false},\n} as const;\n\ntype Props = {\n value: string;\n placeholder?: string;\n onChange?: (value: string) => void;\n readOnly?: boolean;\n onValidate?: (isValid: boolean) => void;\n onMount?: (editor: {\n showMarkers: () => void;\n hideMarkers: () => void;\n }) => void;\n height?: string;\n width?: string;\n hasJSONObjectValidation?: boolean;\n isVisible?: boolean;\n dataTestId?: string;\n};\n\nconst JSONEditor: React.FC<Props> = ({\n value,\n isVisible,\n placeholder,\n onChange,\n readOnly = false,\n onValidate = () => {},\n onMount = () => {},\n height = '30vh',\n width = '100%',\n hasJSONObjectValidation = false,\n dataTestId,\n}) => {\n const context = useContext(PlayContext);\n const monacoLoaderConfig = context.monacoLoaderConfig;\n\n const [monaco, setMonaco] = useState<typeof monaco_editor | null>(null);\n const isPlaceholderVisible = value === '' && placeholder !== undefined;\n\n useEffect(() => {\n loadMonaco(monacoLoaderConfig).then((monaco) => {\n setMonaco(monaco);\n });\n }, [monacoLoaderConfig]);\n\n useLayoutEffect(() => {\n if (isVisible && hasJSONObjectValidation) {\n monaco?.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemaValidation: 'error',\n schemaRequest: 'error',\n validate: true,\n schemas: [\n {\n uri: '',\n fileMatch: ['*'],\n schema: {\n type: 'object',\n },\n },\n ],\n });\n } else {\n monaco?.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemaValidation: 'error',\n schemaRequest: 'error',\n });\n }\n }, [monaco, hasJSONObjectValidation, isVisible]);\n\n if (monaco === null) {\n return null;\n }\n\n return (\n <EditorContainer>\n <Editor\n data-testid={dataTestId}\n options={{...options, readOnly}}\n language=\"json\"\n value={value}\n height={height}\n width={width}\n theme=\"light\"\n onChange={(value) => {\n onChange?.(value ?? '');\n }}\n onMount={(editor) => {\n editor.focus();\n\n onMount({\n showMarkers: () => {\n editor.trigger('', 'editor.action.marker.next', undefined);\n editor.trigger('', 'editor.action.marker.prev', undefined);\n },\n hideMarkers: () => {\n editor.trigger('', 'closeMarkersNavigation', undefined);\n },\n });\n }}\n onValidate={(markers) => {\n onValidate(markers.length === 0);\n }}\n />\n {isPlaceholderVisible && (\n <MonacoPlaceholder className=\"monaco-placeholder\">\n {placeholder}\n </MonacoPlaceholder>\n )}\n </EditorContainer>\n );\n};\n\nexport {JSONEditor};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Link as BaseLink} from '@carbon/react';\n\nexport const Container = styled.div`\n display: flex;\n min-height: var(--cds-layout-size-height-md);\n justify-content: space-between;\n`;\n\nexport const TextContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const Link = styled(BaseLink)`\n display: flex;\n width: fit-content;\n`;\n\nexport const ButtonContainer = styled.div`\n width: 40%;\n min-width: fit-content;\n margin-left: var(--cds-spacing-05);\n display: flex;\n justify-content: end;\n align-items: start;\n > * {\n width: max-content;\n }\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getBusinessObject, ModdleElement} from 'bpmn-js/lib/util/ModelUtil.js';\nimport {getExampleData} from 'modules/utils/getExampleData';\nconst EXAMPLE_JSON_PROPERTY_NAME = 'camundaModeler:exampleOutputJson';\nimport {isValidJSONObject} from 'modules/utils/isValidJSONObject';\n\nfunction updateExampleData(element: ElementLike, exampleData: string) {\n if (!isValidJSONObject(exampleData)) {\n return false;\n }\n\n const bo = getBusinessObject(element);\n\n if (getExampleData(bo) === exampleData) {\n return false;\n }\n\n const extensionElements = getOrCreateExtensionElement(bo);\n const zeebeProperties = getOrCreateZeebeProperties(extensionElements);\n const existingProperty = zeebeProperties.properties.find(\n (p: {name: string; value: unknown}) =>\n p.name === EXAMPLE_JSON_PROPERTY_NAME,\n );\n if (existingProperty) {\n existingProperty.value = exampleData;\n } else {\n const exampleProperty = zeebeProperties.$model.create('zeebe:Property', {\n name: EXAMPLE_JSON_PROPERTY_NAME,\n value: exampleData,\n });\n exampleProperty.$parent = zeebeProperties;\n zeebeProperties.properties.push(exampleProperty);\n }\n return true;\n}\n\nfunction getOrCreateExtensionElement(bo: ModdleElement) {\n let extensionElements = bo.get('extensionElements');\n\n if (extensionElements === undefined) {\n extensionElements = bo.$model.create('bpmn:ExtensionElements', {\n values: [],\n });\n extensionElements.$parent = bo;\n bo.extensionElements = extensionElements;\n }\n\n return extensionElements;\n}\n\nfunction getOrCreateZeebeProperties(extensionElements: ModdleElement) {\n let zeebeProperties = extensionElements\n .get('values')\n .find((v: ModdleElement) => v.$type === 'zeebe:Properties');\n\n if (!zeebeProperties) {\n zeebeProperties = extensionElements.$model.create('zeebe:Properties', {\n properties: [],\n });\n zeebeProperties.$parent = extensionElements;\n extensionElements.values.push(zeebeProperties);\n }\n\n return zeebeProperties;\n}\n\nfunction removeExampleDataFromProperties(\n zeebeProperties: Array<ModdleElement>,\n) {\n return zeebeProperties.filter(\n (p) => p.get('name') !== EXAMPLE_JSON_PROPERTY_NAME,\n );\n}\n\nfunction removeExampleData(element: ElementLike) {\n const bo = getBusinessObject(element);\n\n const exampleData = getExampleData(bo);\n if (exampleData === undefined) {\n return;\n }\n const extensionElements = bo.get('extensionElements');\n if (extensionElements === undefined) {\n return;\n }\n const zeebeProperties = extensionElements\n .get('values')\n .find((v: ModdleElement) => v.$type === 'zeebe:Properties');\n if (zeebeProperties === undefined) {\n return;\n }\n const properties = zeebeProperties.get('properties');\n zeebeProperties.properties = removeExampleDataFromProperties(properties);\n}\n\nexport {updateExampleData, removeExampleData};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n ActionableNotification,\n Button,\n InlineLoading,\n InlineNotification,\n Tooltip,\n} from '@carbon/react';\nimport {Container, Link, TextContainer, ButtonContainer} from './styled';\nimport {useContext, useState} from 'react';\nimport {updateExampleData} from 'modules/utils/setExampleData';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExampleData} from 'modules/utils/getExampleData';\nimport PlayContext from 'modules/PlayContext';\nimport {observer} from 'mobx-react';\nimport {isConnectorElement} from 'modules/utils/flowNodes';\n\ntype Props = {\n isValid: boolean;\n editedValue: string;\n element: ElementLike;\n onSuccess: () => void;\n tooltipTextForInvalid?: string;\n};\n\nconst SaveExampleData: React.FC<Props> = observer(\n ({\n isValid,\n editedValue,\n element,\n onSuccess,\n tooltipTextForInvalid = 'Please enter valid JSON to save',\n }) => {\n const [status, setStatus] = useState<\n 'success' | 'conflict' | 'error' | 'initial'\n >('initial');\n const openImplementTab = useContext(PlayContext)?.switchToImplementMode;\n\n if (\n !playEnvironmentStore.canUserSaveExampleData ||\n isConnectorElement(element)\n ) {\n return null;\n }\n\n const exampleData = getExampleData(element);\n const isDisabled =\n !isValid || editedValue === '' || editedValue === exampleData;\n const buttonText =\n exampleData !== undefined ? 'Update example data' : 'Save example data';\n let tooltipText;\n if (!isValid || editedValue === '') {\n tooltipText = tooltipTextForInvalid;\n } else if (isDisabled) {\n tooltipText = 'Please make changes to the example data to save';\n }\n const saveExampleData = async () => {\n const wasUpdated = updateExampleData(element, editedValue);\n const result = await playEnvironmentStore.updateFile();\n if (wasUpdated && result.success) {\n setStatus('success');\n onSuccess();\n } else if (\n wasUpdated &&\n !result.success &&\n result.reason === 'conflict'\n ) {\n setStatus('conflict');\n } else {\n setStatus('error');\n }\n };\n\n return (\n <>\n <Container>\n <TextContainer>\n <div>\n Save these variables as example data in the BPMN file for\n collaborative reuse\n </div>\n <Link\n href=\"https://docs.camunda.io/docs/components/modeler/data-handling/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Learn more\n </Link>\n </TextContainer>\n <ButtonContainer>\n {status === 'success' ? (\n <InlineLoading\n description=\"Saved successfully\"\n status=\"finished\"\n onSuccess={() => {\n setStatus('initial');\n }}\n />\n ) : isDisabled ? (\n <Tooltip align=\"bottom-end\" label={tooltipText}>\n <div>\n {/* revisit button implementation after\n https://github.com/camunda/play/issues/417 */}\n <Button\n kind=\"tertiary\"\n size=\"md\"\n onClick={saveExampleData}\n disabled={isDisabled}\n >\n {buttonText}\n </Button>\n </div>\n </Tooltip>\n ) : (\n <Button kind=\"tertiary\" size=\"md\" onClick={saveExampleData}>\n {buttonText}\n </Button>\n )}\n </ButtonContainer>\n </Container>\n {status === 'conflict' && (\n <ActionableNotification\n inline\n kind=\"error\"\n lowContrast\n hideCloseButton\n statusIconDescription=\"notification\"\n subtitle=\"Example data could not be saved. The diagram has been updated by another user. Got to Implement tab to see the latest version.\"\n title=\"File Conflict:\"\n onActionButtonClick={() => {\n openImplementTab?.(false);\n }}\n actionButtonLabel=\"Go to Implement\"\n />\n )}\n {status === 'error' && (\n <InlineNotification\n kind=\"error\"\n lowContrast\n hideCloseButton\n statusIconDescription=\"notification\"\n subtitle=\"An unknown error occurred. Please try again later\"\n title=\"Unknown Error:\"\n />\n )}\n </>\n );\n },\n);\n\nexport {SaveExampleData};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n color: var(\n --cds-text-secondary,\n #525252\n ); // revisit after https://github.com/camunda/play/issues/143\n min-height: var(\n --cds-spacing-06,\n 1.5rem\n ); // revisit after https://github.com/camunda/play/issues/143\n\n svg {\n fill: var(--cds-icon-secondary);\n margin-right: var(\n --cds-spacing-02,\n 0.25rem\n ); // revisit after https://github.com/camunda/play/issues/143\n }\n`;\nexport {Container};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Container} from './styled';\nimport {Information} from '@carbon/icons-react';\n\ntype Props = {\n originalSource: 'none' | 'cache' | 'bpmn';\n isDescriptionVisible: boolean;\n};\n\nconst ExampleDataSourceInformation: React.FC<Props> = ({\n originalSource,\n isDescriptionVisible,\n}) => {\n if (originalSource === 'none') {\n return null;\n }\n\n let description = '';\n\n if (originalSource === 'bpmn') {\n description = 'Prefilled from the BPMN’s example data';\n } else if (originalSource === 'cache') {\n description = 'Prefilled from a previous session';\n }\n\n return (\n <Container>\n {!isDescriptionVisible ? null : (\n <>\n <Information />\n {description}\n </>\n )}\n </Container>\n );\n};\n\nexport {ExampleDataSourceInformation};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useState, useCallback} from 'react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {isValidJSONObject} from 'modules/utils/isValidJSONObject';\n\nconst usePrefilledData = (element: ElementLike, processId?: string) => {\n const {prefillData, prefillSource: originalPrefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId,\n });\n const [editedValue, setEditedValueInternal] = useState(prefillData);\n const [prefillSource, setPrefillSource] = useState(originalPrefillSource);\n const [isDirty, setIsDirty] = useState(false);\n const isValid = isValidJSONObject(editedValue) || editedValue === '';\n\n const resetPrefill = () => {\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: false,\n processId,\n });\n setEditedValueInternal(prefillData);\n setPrefillSource(prefillSource);\n setIsDirty(false);\n };\n\n const setEditedValue = useCallback(\n (value: string) => {\n if (value !== editedValue) {\n setEditedValueInternal(value);\n setIsDirty(true);\n }\n },\n [editedValue],\n );\n\n return {\n editedValue,\n isValid,\n prefillSource,\n isDirty,\n setEditedValue,\n resetPrefill,\n };\n};\n\nexport {usePrefilledData};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useContext, useEffect, useRef, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {Form as CarbonForm, TextInput, Stack} from '@carbon/react';\nimport {U} from 'ts-toolbelt';\n\nimport PlayContext from 'modules/PlayContext';\nimport {\n JSON_OBJECT_PLACEHOLDER,\n NEW_PROCESS_INSTANCE,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {EditorContainer, FormLabel} from './styled';\nimport {JSONEditor} from 'modules/components/JSONEditor';\nimport {SaveExampleData} from 'modules/components/SaveExampleData';\nimport {ExampleDataSourceInformation} from 'modules/components/ExampleDataSourceInformation';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport trackingService from 'modules/services/TrackingService';\nimport {usePrefilledData} from 'modules/hooks/usePrefilledData';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {setJobCompletionHistory} from 'modules/utils/completedJobHistory';\n\ntype Props = {\n isOpen: boolean;\n isStartEvent: boolean;\n initialSignalName: string;\n onClose: () => void;\n element: ElementLike;\n};\n\ntype EditorFirstParam = Parameters<\n U.NonNullable<React.ComponentProps<typeof JSONEditor>['onMount']>\n>[0];\n\nconst BroadcastSignalModal: React.FC<Props> = observer(\n ({isOpen, initialSignalName, onClose, isStartEvent, element}) => {\n const context = useContext(PlayContext);\n const processInstance = processInstanceStore.state.processInstance;\n\n const [signalName, setSignalName] = useState(initialSignalName);\n const {\n editedValue: variables,\n isValid: isVariableValueValid,\n prefillSource,\n isDirty,\n setEditedValue: setVariables,\n resetPrefill,\n } = usePrefilledData(element, playEnvironmentStore.processId);\n\n const editorRef = useRef<EditorFirstParam | null>(null);\n\n useEffect(() => {\n if (isVariableValueValid) {\n editorRef.current?.hideMarkers();\n }\n }, [isVariableValueValid]);\n\n return (\n <ComposedModal\n title=\"Broadcast signal\"\n isVisible={isOpen}\n isPrimaryButtonDisabled={!isVariableValueValid}\n primaryButtonLabel=\"Broadcast\"\n secondaryButton={{label: 'Cancel', onClick: onClose}}\n ghostButton={{\n label: 'Reset',\n onClick: () => {\n setSignalName(initialSignalName);\n resetPrefill();\n },\n }}\n onClose={onClose}\n onSubmit={async () => {\n onClose();\n const result = await context.broadcastSignal?.({\n elementId: element.id,\n signalName,\n variables,\n isStartEvent,\n });\n\n if (!result?.success) {\n context.displayNotification?.error(REQUEST_FAILURE);\n } else {\n if (result?.success && processInstance !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstance.key), {\n action: 'broadcastSignal',\n signalName,\n variables,\n elementId: element.id,\n });\n }\n\n trackingService.trackUserCompletesElement(element, variables);\n\n if (isStartEvent) {\n context.displayNotification?.success({\n title: NEW_PROCESS_INSTANCE,\n });\n } else {\n context.displayNotification?.info({\n title: `Signal \"${signalName}\" broadcasted`,\n });\n }\n\n setJobCompletionHistory({\n processId: playEnvironmentStore.processId,\n elementId: element.id,\n variables: variables ?? '',\n });\n }\n }}\n modalBody={\n <CarbonForm>\n <Stack gap={5}>\n <Stack gap={2}>\n <FormLabel>Variables</FormLabel>\n <SaveExampleData\n isValid={isVariableValueValid}\n editedValue={variables}\n element={element}\n onSuccess={() => {\n resetPrefill();\n }}\n />\n <ExampleDataSourceInformation\n originalSource={prefillSource}\n isDescriptionVisible={!isDirty}\n />\n <EditorContainer>\n <JSONEditor\n height=\"10vh\"\n value={variables}\n isVisible={isOpen}\n placeholder={JSON_OBJECT_PLACEHOLDER}\n onChange={(value) => {\n const newValue = value ?? '';\n setVariables(newValue);\n }}\n onMount={(editor) => {\n editorRef.current = editor;\n }}\n hasJSONObjectValidation={true}\n />\n </EditorContainer>\n </Stack>\n <TextInput\n id=\"signal_name\"\n labelText=\"Signal name\"\n placeholder=\"signal name\"\n value={signalName}\n onChange={(evt) => {\n setSignalName(evt.target.value);\n }}\n />\n </Stack>\n </CarbonForm>\n }\n />\n );\n },\n);\n\nBroadcastSignalModal.displayName = 'BroadcastSignalModal';\nexport {BroadcastSignalModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useCallback, useContext, useState} from 'react';\nimport PlayContext from 'modules/PlayContext';\nimport {NEW_PROCESS_INSTANCE, REQUEST_FAILURE} from 'modules/utils/constants';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport trackingService from 'modules/services/TrackingService';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {SignalCandidate} from 'modules/types';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\n\nexport function useBroadcastSignal(element: ElementLike) {\n const {displayNotification, broadcastSignal: broadcastSignalCandidate} =\n useContext(PlayContext);\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const broadcastSignal = useCallback(\n async ({\n processId,\n signalCandidate,\n isStartEvent = false,\n processInstanceKey,\n }: {\n processId?: string;\n isStartEvent?: boolean;\n processInstanceKey?: number;\n signalCandidate: SignalCandidate;\n }) => {\n const {prefillData} = pickPrefillData({\n element,\n useCache: true,\n processId: processId,\n });\n\n const result = await broadcastSignalCandidate?.({\n elementId: element.id,\n signalName: signalCandidate.signalName,\n variables: prefillData,\n isStartEvent,\n });\n\n if (!result?.success) {\n displayNotification?.error(REQUEST_FAILURE);\n } else {\n if (result?.success && processInstanceKey !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstanceKey), {\n action: 'broadcastSignal',\n elementId: element.id,\n signalName: signalCandidate.signalName,\n variables: prefillData,\n });\n }\n trackingService.trackUserCompletesElement(element, prefillData);\n\n if (isStartEvent) {\n displayNotification?.success({\n title: NEW_PROCESS_INSTANCE,\n });\n } else {\n displayNotification?.info({\n title: `Signal \"${signalCandidate.signalName}\" broadcasted`,\n });\n }\n }\n },\n [broadcastSignalCandidate, displayNotification, element],\n );\n\n const broadcastSignalWithVariables = useCallback(() => {\n setIsModalOpen(true);\n }, []);\n\n return {\n isModalOpen,\n setIsModalOpen,\n broadcastSignal,\n broadcastSignalWithVariables,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {observer} from 'mobx-react';\n\nimport {SignalCandidate} from 'modules/types';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {BroadcastSignalModal} from './BroadcastSignalModal';\nimport {useBroadcastSignal} from './use-broadcast-signal';\n\ntype ChildProps = {\n broadcastSignal: ({\n processId,\n isStartEvent,\n processInstanceKey,\n signalCandidate,\n }: {\n processId?: string;\n isStartEvent?: boolean;\n processInstanceKey?: number;\n signalCandidate: SignalCandidate;\n }) => void;\n broadcastSignalWithVariables: () => void;\n};\n\ntype Props = {\n signalCandidate: SignalCandidate;\n isStartEvent?: boolean;\n element: ElementLike;\n children: (props: ChildProps) => React.ReactNode;\n};\n\nconst BroadcastSignal: React.FC<Props> = observer(\n ({children, signalCandidate, element, isStartEvent = false}) => {\n const {\n isModalOpen,\n setIsModalOpen,\n broadcastSignal,\n broadcastSignalWithVariables,\n } = useBroadcastSignal(element);\n\n return (\n <>\n {children({broadcastSignal, broadcastSignalWithVariables})}\n\n <BroadcastSignalModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n initialSignalName={signalCandidate.signalName}\n isStartEvent={isStartEvent}\n element={element}\n />\n </>\n );\n },\n);\n\nBroadcastSignal.displayName = 'BroadcastSignal';\nexport {BroadcastSignal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n FormLabel as BaseFormLabel,\n ActionableNotification as BaseActionableNotification,\n} from '@carbon/react';\nimport styled from 'styled-components';\n\nconst FormLabel = styled(BaseFormLabel)`\n margin-bottom: var(--cds-spacing-03, 8px);\n`;\n\nconst ActionableNotification = styled(BaseActionableNotification)`\n margin-top: var(--cds-spacing-06, 16px);\n max-width: unset;\n`;\n\nconst EditorContainer = styled.div`\n min-width: 0; // https://github.com/microsoft/monaco-editor/issues/3393\n`;\n\nexport {EditorContainer, FormLabel, ActionableNotification};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useContext, useEffect, useRef, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {Form as CarbonForm, TextInput, Stack} from '@carbon/react';\nimport {U} from 'ts-toolbelt';\n\nimport PlayContext from 'modules/PlayContext';\nimport {\n AUTHORIZATION_ERROR_CODE,\n JSON_OBJECT_PLACEHOLDER,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n NEW_PROCESS_INSTANCE,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {EditorContainer, FormLabel} from './styled';\nimport {JSONEditor} from 'modules/components/JSONEditor';\nimport {SaveExampleData} from 'modules/components/SaveExampleData';\nimport {ExampleDataSourceInformation} from 'modules/components/ExampleDataSourceInformation';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport trackingService from 'modules/services/TrackingService';\nimport {usePrefilledData} from 'modules/hooks/usePrefilledData';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {setJobCompletionHistory} from 'modules/utils/completedJobHistory';\n\ntype Props = {\n isOpen: boolean;\n isStartEvent: boolean;\n initialMessageName: string;\n initialCorrelationKey?: string;\n onClose: () => void;\n elementId: string;\n element: ElementLike;\n};\n\ntype EditorFirstParam = Parameters<\n U.NonNullable<React.ComponentProps<typeof JSONEditor>['onMount']>\n>[0];\n\nconst PublishMessageModal: React.FC<Props> = observer(\n ({\n isOpen,\n initialMessageName,\n initialCorrelationKey,\n onClose,\n elementId,\n isStartEvent,\n element,\n }) => {\n const context = useContext(PlayContext);\n const processInstance = processInstanceStore.state.processInstance;\n\n const [messageName, setMessageName] = useState(initialMessageName);\n const [correlationKey, setCorrelationKey] = useState(initialCorrelationKey);\n const [ttl, setTTL] = useState('');\n const [messageId, setMessageId] = useState('');\n const {\n editedValue: variables,\n isValid: isVariableValueValid,\n prefillSource,\n isDirty,\n setEditedValue: setVariables,\n resetPrefill,\n } = usePrefilledData(element, playEnvironmentStore.processId);\n\n const {authType} = playEnvironmentStore;\n\n const editorRef = useRef<EditorFirstParam | null>(null);\n\n useEffect(() => {\n if (isVariableValueValid) {\n editorRef.current?.hideMarkers();\n }\n }, [isVariableValueValid]);\n\n return (\n <ComposedModal\n title=\"Publish message\"\n isVisible={isOpen}\n isPrimaryButtonDisabled={!isVariableValueValid}\n primaryButtonLabel=\"Publish\"\n secondaryButton={{label: 'Cancel', onClick: onClose}}\n ghostButton={{\n label: 'Reset',\n onClick: () => {\n setMessageName(initialMessageName);\n setCorrelationKey(initialCorrelationKey ?? '');\n setTTL('');\n setMessageId('');\n resetPrefill();\n },\n }}\n onClose={onClose}\n onSubmit={async () => {\n onClose();\n const result = await context.publishMessage?.({\n elementId,\n messageName,\n correlationKey,\n variables,\n timeToLive: ttl,\n messageId,\n isStartEvent,\n });\n\n if (result?.status === AUTHORIZATION_ERROR_CODE) {\n context.displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${authType === 'sm' ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to publish the message.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n\n return;\n }\n\n if (!result?.success) {\n context.displayNotification?.error(REQUEST_FAILURE);\n } else {\n if (result?.success && processInstance !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstance.key), {\n action: 'publishMessage',\n elementId,\n messageName,\n messageCorrelationKey: correlationKey,\n variables,\n timeToLive: ttl,\n messageId,\n });\n }\n\n trackingService.trackUserCompletesElement(element, variables);\n\n if (isStartEvent) {\n context.displayNotification?.success({\n title: NEW_PROCESS_INSTANCE,\n });\n } else {\n context.displayNotification?.info({\n title: `Message \"${messageName}\" published`,\n subtitle: `Correlation key: ${correlationKey}`,\n });\n }\n\n setJobCompletionHistory({\n processId: playEnvironmentStore.processId,\n elementId: element.id,\n variables: variables ?? '',\n });\n }\n }}\n modalBody={\n <CarbonForm>\n <Stack gap={5}>\n <Stack gap={2}>\n <FormLabel>Variables</FormLabel>\n <SaveExampleData\n isValid={isVariableValueValid}\n editedValue={variables}\n element={element}\n onSuccess={() => {\n resetPrefill();\n }}\n />\n <ExampleDataSourceInformation\n originalSource={prefillSource}\n isDescriptionVisible={!isDirty}\n />\n <EditorContainer>\n <JSONEditor\n height=\"10vh\"\n value={variables}\n isVisible={isOpen}\n placeholder={JSON_OBJECT_PLACEHOLDER}\n onChange={(value) => {\n const newValue = value ?? '';\n setVariables(newValue);\n }}\n onMount={(editor) => {\n editorRef.current = editor;\n }}\n hasJSONObjectValidation={true}\n />\n </EditorContainer>\n </Stack>\n <Stack orientation=\"horizontal\">\n <TextInput\n id=\"message_name\"\n labelText=\"Message name\"\n placeholder=\"new order\"\n value={messageName}\n onChange={(evt) => {\n setMessageName(evt.target.value);\n }}\n />\n <TextInput\n id=\"correlation_key\"\n labelText=\"Message correlation key\"\n placeholder=\"order-key-123\"\n value={correlationKey}\n onChange={(evt) => {\n setCorrelationKey(evt.target.value);\n }}\n />\n </Stack>\n\n <TextInput\n id=\"message_id\"\n labelText=\"Message ID\"\n placeholder=\"tracking-id-123\"\n value={messageId}\n onChange={(evt) => {\n setMessageId(evt.target.value);\n }}\n />\n <TextInput\n id=\"ttl\"\n labelText=\"Message time-to-live (TTL)\"\n placeholder=\"PT5M\"\n value={ttl}\n onChange={(evt) => {\n setTTL(evt.target.value);\n }}\n helperText=\"Time duration defined as ISO 8601 durations format\"\n />\n </Stack>\n </CarbonForm>\n }\n />\n );\n },\n);\n\nPublishMessageModal.displayName = 'PublishMessageModal';\nexport {PublishMessageModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useCallback, useContext, useState} from 'react';\nimport PlayContext from 'modules/PlayContext';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n NEW_PROCESS_INSTANCE,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport trackingService from 'modules/services/TrackingService';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {MessageSubscriptionCandidate} from 'modules/types';\n\nexport function usePublishMessage({\n element,\n isSelfManagedEnv = false,\n}: {\n element: ElementLike;\n isSelfManagedEnv: boolean;\n}) {\n const {displayNotification, publishMessage: publishMessageCandidate} =\n useContext(PlayContext);\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const publishMessage = useCallback(\n async ({\n processId,\n messageSubscription,\n isStartEvent = false,\n processInstanceKey,\n }: {\n processId?: string;\n isStartEvent?: boolean;\n processInstanceKey?: number;\n messageSubscription: MessageSubscriptionCandidate;\n }) => {\n const {prefillData} = pickPrefillData({\n element,\n useCache: true,\n processId,\n });\n\n const result = await publishMessageCandidate?.({\n elementId: element.id,\n messageName: messageSubscription.messageName,\n correlationKey: messageSubscription.keyCandidate,\n variables: prefillData,\n isStartEvent,\n });\n\n if (result?.status === AUTHORIZATION_ERROR_CODE) {\n displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${isSelfManagedEnv ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to publish the message.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n\n return;\n }\n\n if (!result?.success) {\n displayNotification?.error(REQUEST_FAILURE);\n return;\n }\n\n if (result?.success && processInstanceKey !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstanceKey), {\n action: 'publishMessage',\n elementId: element.id,\n messageName: messageSubscription.messageName,\n messageCorrelationKey: messageSubscription.keyCandidate,\n variables: prefillData,\n });\n }\n trackingService.trackUserCompletesElement(element, prefillData);\n\n if (isStartEvent) {\n displayNotification?.success({\n title: NEW_PROCESS_INSTANCE,\n });\n } else {\n displayNotification?.info({\n title: `Message \"${messageSubscription.messageName}\" published`,\n subtitle: `Correlation key: ${messageSubscription.keyCandidate}`,\n });\n }\n },\n [publishMessageCandidate, displayNotification, element],\n );\n\n const publishMessageWithVariables = useCallback(() => {\n setIsModalOpen(true);\n }, []);\n\n return {\n isModalOpen,\n setIsModalOpen,\n publishMessage,\n publishMessageWithVariables,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {observer} from 'mobx-react';\n\nimport {MessageSubscriptionCandidate} from 'modules/types';\n\nimport {PublishMessageModal} from './PublishMessageModal';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {usePublishMessage} from './use-publish-message';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype ChildProps = {\n publishMessage: ({\n processId,\n isStartEvent,\n processInstanceKey,\n messageSubscription,\n }: {\n processId?: string;\n isStartEvent?: boolean;\n processInstanceKey?: number;\n messageSubscription: MessageSubscriptionCandidate;\n }) => void;\n publishMessageWithVariables: () => void;\n};\n\ntype Props = {\n messageSubscription: MessageSubscriptionCandidate;\n isStartEvent?: boolean;\n element: ElementLike;\n children: (props: ChildProps) => React.ReactNode;\n};\n\nconst PublishMessage: React.FC<Props> = observer(\n ({children, messageSubscription, element, isStartEvent = false}) => {\n const {authType} = playEnvironmentStore;\n\n const {\n isModalOpen,\n setIsModalOpen,\n publishMessage,\n publishMessageWithVariables,\n } = usePublishMessage({element, isSelfManagedEnv: authType === 'sm'});\n\n return (\n <>\n {children({publishMessage, publishMessageWithVariables})}\n\n <PublishMessageModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n initialMessageName={messageSubscription.messageName}\n initialCorrelationKey={\n isStartEvent ? '' : messageSubscription.keyCandidate\n }\n elementId={element.id}\n isStartEvent={isStartEvent}\n element={element}\n />\n </>\n );\n },\n);\n\nPublishMessage.displayName = 'PublishMessage';\nexport {PublishMessage};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useCallback, useContext, useState} from 'react';\nimport PlayContext from 'modules/PlayContext';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n NEW_PROCESS_INSTANCE,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport trackingService from 'modules/services/TrackingService';\nimport {setJobCompletionHistory} from 'modules/utils/completedJobHistory';\n\nexport function useStartInstance({\n element,\n isSelfManagedEnv = false,\n}: {\n element: ElementLike;\n isSelfManagedEnv: boolean;\n}) {\n const [isStartingInstance, setIsStartingInstance] = useState(false);\n const {displayNotification, startInstance: startProcessInstance} =\n useContext(PlayContext);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isFormModalOpen, setIsFormModalOpen] = useState(false);\n\n const startInstanceWithVariables = useCallback(() => {\n setIsModalOpen(true);\n }, []);\n\n const startInstanceWithForm = useCallback(() => {\n setIsFormModalOpen(true);\n }, []);\n\n const startInstance = useCallback(\n async ({\n variables,\n processId,\n successNotificationSubtitle,\n }: {\n variables: string;\n processId?: string;\n successNotificationSubtitle?: string;\n }) => {\n setIsStartingInstance(true);\n\n const response = await startProcessInstance?.({\n elementId: element.id,\n variables,\n });\n\n if (response?.status === AUTHORIZATION_ERROR_CODE) {\n displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${isSelfManagedEnv ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to start the instance.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n\n setIsStartingInstance(false);\n return;\n }\n\n if (!response?.success) {\n displayNotification?.error(REQUEST_FAILURE);\n setIsStartingInstance(false);\n return;\n }\n\n trackingService.trackUserCompletesElement(element, variables);\n setJobCompletionHistory({\n processId,\n elementId: element.id,\n variables,\n });\n\n displayNotification?.success({\n title: NEW_PROCESS_INSTANCE,\n subtitle: successNotificationSubtitle,\n });\n },\n [startProcessInstance, displayNotification, element],\n );\n\n return {\n isModalOpen,\n setIsModalOpen,\n isFormModalOpen,\n setIsFormModalOpen,\n isStartingInstance,\n startInstance,\n startInstanceWithForm,\n startInstanceWithVariables,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect, useRef, useState} from 'react';\nimport {JSONEditor} from 'modules/components/JSONEditor';\nimport {U} from 'ts-toolbelt';\nimport {Modal, Stack} from '@carbon/react';\nimport {ComposedModal} from '../ComposedModal';\n\ntype EditorFirstParam = Parameters<\n U.NonNullable<React.ComponentProps<typeof JSONEditor>['onMount']>\n>[0];\n\ntype Props = {\n value?: string;\n placeholder?: string;\n isVisible: boolean;\n onClose?: () => void;\n onReset?: () => void;\n onSubmit?: (value: string | undefined) => void;\n title?: string;\n readOnly?: boolean;\n size?: React.ComponentProps<typeof Modal>['size'];\n hasResetButton?: boolean;\n primaryButtonLabel: string;\n secondaryButtonLabel: string;\n isValidInput: (value: string) => boolean;\n hasJSONObjectValidation?: boolean;\n editorTopContent?: React.ReactNode;\n onChange?: (value: string) => void;\n clearOnReset?: boolean;\n};\n\nconst JSONEditorModal: React.FC<Props> = ({\n title,\n isValidInput,\n isVisible,\n primaryButtonLabel,\n secondaryButtonLabel,\n hasResetButton,\n value = '',\n placeholder,\n size = 'md',\n onClose,\n onReset,\n onSubmit,\n readOnly = false,\n hasJSONObjectValidation = false,\n editorTopContent = false,\n onChange,\n clearOnReset = true,\n}) => {\n const [editedValue, setEditedValue] = useState(value);\n const [isValid, setIsValid] = useState(true);\n const editorRef = useRef<EditorFirstParam | null>(null);\n\n useEffect(() => {\n if (isVisible) {\n setEditedValue(value);\n } else {\n setEditedValue('');\n setIsValid(true);\n }\n }, [isVisible, value]);\n\n useEffect(() => {\n if (isValid) {\n editorRef.current?.hideMarkers();\n }\n }, [isValid]);\n\n return (\n <ComposedModal\n title={title}\n readOnly={readOnly}\n size={size}\n isVisible={isVisible}\n isPrimaryButtonDisabled={!isValid}\n primaryButtonLabel={primaryButtonLabel}\n secondaryButton={{\n label: secondaryButtonLabel,\n onClick: () => {\n onClose?.();\n },\n }}\n ghostButton={\n hasResetButton\n ? {\n label: 'Reset',\n onClick: () => {\n onReset?.();\n if (clearOnReset) {\n setEditedValue('');\n }\n },\n }\n : undefined\n }\n onClose={onClose}\n onSubmit={() => {\n if (isValid) {\n onSubmit?.(editedValue === '' ? undefined : editedValue);\n } else {\n editorRef.current?.showMarkers();\n }\n }}\n modalBody={\n <Stack gap={5}>\n {editorTopContent}\n <JSONEditor\n value={editedValue}\n isVisible={isVisible}\n placeholder={placeholder}\n onChange={(value) => {\n const newValue = value ?? '';\n setEditedValue(newValue);\n setIsValid(isValidInput(newValue));\n onChange?.(newValue);\n }}\n readOnly={readOnly}\n onValidate={setIsValid}\n onMount={(editor) => {\n editorRef.current = editor;\n }}\n hasJSONObjectValidation={hasJSONObjectValidation}\n />\n </Stack>\n }\n />\n );\n};\n\nexport {JSONEditorModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {JSONEditorModal} from 'modules/components/JSONEditorModal';\nimport React, {useEffect, useState} from 'react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {SaveExampleData} from 'modules/components/SaveExampleData';\nimport {ExampleDataSourceInformation} from 'modules/components/ExampleDataSourceInformation';\nimport {JSON_OBJECT_PLACEHOLDER} from 'modules/utils/constants';\nimport {isValidJSONObject} from 'modules/utils/isValidJSONObject';\nimport {observer} from 'mobx-react';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype Props = {\n isVisible: boolean;\n onClose?: () => void;\n onSubmit?: (value: string | undefined) => void;\n title?: string;\n primaryButtonLabel: string;\n element: ElementLike;\n};\n\nconst isValidInput = (input: string) => {\n return isValidJSONObject(input) || input === '';\n};\n\nconst ExampleDataEditorModal: React.FC<Props> = observer(\n ({title, isVisible, primaryButtonLabel, onClose, onSubmit, element}) => {\n const [showCachedPrefillData, setShowCachedPrefillData] = useState(true);\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: showCachedPrefillData,\n processId: playEnvironmentStore.processId,\n });\n const [editedValue, setEditedValue] = useState(prefillData);\n const [originalPrefillSource, setOriginalPrefillSource] =\n useState(prefillSource);\n const isValid = isValidInput(editedValue);\n const [isDirty, setIsDirty] = useState(false);\n\n useEffect(() => {\n setEditedValue(prefillData);\n setOriginalPrefillSource(prefillSource);\n }, [prefillSource, prefillData]);\n\n return (\n <JSONEditorModal\n hasResetButton\n placeholder={JSON_OBJECT_PLACEHOLDER}\n title={title}\n isVisible={isVisible}\n onClose={onClose}\n onSubmit={onSubmit}\n clearOnReset={false}\n onReset={() => {\n setShowCachedPrefillData(false);\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: false,\n processId: playEnvironmentStore.processId,\n });\n setEditedValue(prefillData);\n setOriginalPrefillSource(prefillSource);\n setIsDirty(false);\n }}\n value={editedValue}\n primaryButtonLabel={primaryButtonLabel}\n secondaryButtonLabel=\"Cancel\"\n isValidInput={(value) => isValidInput(value)}\n onChange={(value) => {\n setEditedValue(value);\n setIsDirty(true);\n }}\n editorTopContent={\n <>\n <SaveExampleData\n isValid={isValid}\n editedValue={editedValue}\n element={element}\n onSuccess={() => {\n setOriginalPrefillSource('bpmn');\n setIsDirty(false);\n }}\n />\n <ExampleDataSourceInformation\n originalSource={originalPrefillSource}\n isDescriptionVisible={!isDirty}\n />\n </>\n }\n hasJSONObjectValidation\n />\n );\n },\n);\n\nexport {ExampleDataEditorModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nexport const Error = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n background-color: #fff1f1;\n border: 1px solid #da1e28;\n height: 3rem;\n padding: 1rem;\n width: 100%;\n gap: 1rem;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {getExampleData} from 'modules/utils/getExampleData';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getJobCompletionHistory} from 'modules/utils/completedJobHistory';\n\nexport const getCachedAndExampleData = ({\n element,\n processId,\n}: {\n element: ElementLike;\n processId?: string;\n}) => {\n const exampleData = getExampleData(element);\n const cachedData = getJobCompletionHistory({\n processId,\n elementId: element.id,\n });\n const cachedVariables = JSON.parse(cachedData || '{}');\n const variablesFromExampleData = JSON.parse(exampleData || '{}');\n\n return {cachedVariables, variablesFromExampleData};\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const prefillForm = (\n formVariableNames: string[],\n existingVariables: {[key: string]: unknown},\n) => {\n return formVariableNames.reduce(\n (acc: {[key: string]: unknown}, formVariableName) => {\n if (formVariableName in existingVariables) {\n acc[formVariableName] = existingVariables[formVariableName];\n }\n return acc;\n },\n {},\n );\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {Form, getSchemaVariables} from '@bpmn-io/form-js';\nimport {isEqual} from 'lodash-es';\nimport {\n Data as FormData,\n Errors as FormErrors,\n} from '@bpmn-io/form-js-viewer/dist/types/Form';\nimport {getCachedAndExampleData} from './get-cached-and-example-data';\nimport {prefillForm} from './prefill-form';\n\nexport function useTaskForm({\n element,\n getFormBody,\n formPrefillSettings = {sanitizePrefillData: false},\n}: {\n element: ElementLike;\n getFormBody: () => Promise<string | undefined>;\n formPrefillSettings?:\n | {\n sanitizePrefillData: boolean;\n userTaskJobId: string;\n }\n | {sanitizePrefillData: false};\n}) {\n const [hasFormLoadError, setHasFormLoadError] = useState(false);\n const [originalPrefillSource, setOriginalPrefillSource] = useState<\n 'none' | 'cache' | 'bpmn'\n >('none');\n const [formVariables, setFormVariables] = useState('');\n const [isFormContentValid, setIsFormContentValid] = useState(false);\n const [isDirty, setIsDirty] = useState(false);\n\n const formContainerRef = useRef<HTMLDivElement>(null);\n const taskForm = useRef<Form>();\n\n const getIsPrefilledFromExistingData = useCallback(\n (data: FormData, originalSource: 'none' | 'cache' | 'bpmn') => {\n const {cachedVariables, variablesFromExampleData} =\n getCachedAndExampleData({\n element,\n processId: playEnvironmentStore.processId,\n });\n\n const isPrefilledFromExampleData =\n originalSource === 'bpmn' && isEqual(data, variablesFromExampleData);\n\n const isPrefilledFromCache =\n originalSource === 'cache' && isEqual(data, cachedVariables);\n\n return isPrefilledFromExampleData || isPrefilledFromCache;\n },\n [element],\n );\n\n useEffect(() => {\n if (!formVariables) {\n return;\n }\n\n setIsDirty(\n !getIsPrefilledFromExistingData(\n JSON.parse(formVariables),\n originalPrefillSource,\n ),\n );\n }, [formVariables, originalPrefillSource, getIsPrefilledFromExistingData]);\n\n const handleFormChange = useCallback(\n ({data, errors}: {data: FormData; errors: FormErrors}) => {\n setIsFormContentValid(Object.keys(errors).length === 0);\n setFormVariables(JSON.stringify(data));\n },\n [],\n );\n\n const fetchVariables = useCallback(async () => {\n let processVariables = {};\n\n if (formPrefillSettings.sanitizePrefillData) {\n const {variables: variablesByUserTask, success} =\n await zeebePlayService.fetchVariablesByUserTask(\n formPrefillSettings.userTaskJobId,\n );\n\n if (!success) {\n console.error('Could not fetch user task variables');\n setHasFormLoadError(true);\n return;\n }\n\n processVariables = variablesByUserTask.reduce<{\n [key: string]: unknown;\n }>((variables, {name, value}) => {\n variables[name] = JSON.parse(value);\n return variables;\n }, {});\n }\n\n const {cachedVariables, variablesFromExampleData} = getCachedAndExampleData(\n {\n element,\n processId: playEnvironmentStore.processId,\n },\n );\n\n return {\n variablesFromExampleData,\n cachedVariables,\n processVariables,\n };\n }, [element, formPrefillSettings]);\n\n const getParsedForm = useCallback(async () => {\n let form = {};\n\n const formBody = await getFormBody();\n\n if (formBody === undefined) {\n setHasFormLoadError(true);\n return;\n }\n\n try {\n form = JSON.parse(formBody ?? '{}');\n } catch {\n setHasFormLoadError(true);\n return;\n }\n\n return form;\n }, [getFormBody]);\n\n const getPrefilledFormVariables = useCallback(\n async (\n {\n ignoreCachedVariables = false,\n parsedForm,\n }: {\n ignoreCachedVariables?: boolean;\n parsedForm: unknown;\n } = {\n ignoreCachedVariables: false,\n parsedForm: undefined,\n },\n ) => {\n const variables = await fetchVariables();\n\n if (!variables) {\n return;\n }\n\n const {variablesFromExampleData, cachedVariables, processVariables} =\n variables;\n\n const existingVariables = {\n ...variablesFromExampleData,\n ...(ignoreCachedVariables ? {} : cachedVariables),\n ...processVariables,\n };\n\n const prefilledFormVariables = formPrefillSettings.sanitizePrefillData\n ? prefillForm(getSchemaVariables(parsedForm), existingVariables)\n : existingVariables;\n\n let originalSource: 'none' | 'cache' | 'bpmn' = 'none';\n\n if (isEqual(prefilledFormVariables, variablesFromExampleData)) {\n originalSource = 'bpmn';\n } else if (\n !ignoreCachedVariables &&\n isEqual(prefilledFormVariables, cachedVariables)\n ) {\n originalSource = 'cache';\n }\n\n setOriginalPrefillSource(originalSource);\n setFormVariables(JSON.stringify(prefilledFormVariables));\n\n return prefilledFormVariables;\n },\n [fetchVariables, formPrefillSettings],\n );\n\n const prepareAndImportForm = useCallback(\n async (\n {\n ignoreCachedVariables = false,\n }: {\n ignoreCachedVariables: boolean;\n } = {ignoreCachedVariables: false},\n ) => {\n const parsedForm = await getParsedForm();\n\n if (parsedForm === undefined) {\n return;\n }\n\n const prefilledFormVariables = await getPrefilledFormVariables({\n parsedForm,\n ignoreCachedVariables,\n });\n\n const {warnings} = (await taskForm.current?.importSchema(\n parsedForm,\n prefilledFormVariables,\n )) ?? {warnings: []};\n\n setIsFormContentValid(warnings.length === 0);\n },\n [getParsedForm, getPrefilledFormVariables],\n );\n\n const renderForm = useCallback(async () => {\n const formViewer = new Form();\n taskForm.current = formViewer;\n\n if (formContainerRef.current === null) {\n setHasFormLoadError(true);\n return;\n }\n\n await prepareAndImportForm();\n\n formViewer.attachTo(formContainerRef.current);\n\n formViewer.on('changed', handleFormChange);\n }, [handleFormChange, prepareAndImportForm]);\n\n const resetForm = useCallback(async () => {\n prepareAndImportForm({ignoreCachedVariables: true});\n }, [prepareAndImportForm]);\n\n return {\n renderForm,\n resetForm,\n isDirty,\n isFormContentValid,\n originalPrefillSource,\n setOriginalPrefillSource,\n formVariables,\n hasFormLoadError,\n setHasFormLoadError,\n formContainerRef,\n taskForm,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nfunction flattenObject(\n data: unknown,\n basePath: string = '',\n): Map<string, unknown> {\n const result = new Map<string, unknown>();\n\n if (data === null || data === undefined) {\n return result;\n }\n\n if (typeof data !== 'object') {\n return result;\n }\n\n const entries = Array.isArray(data)\n ? data.map((val, index) => [index.toString(), val])\n : Object.entries(data);\n\n for (const [key, value] of entries) {\n let currentPath = key;\n\n if (basePath.length > 0) {\n currentPath = Array.isArray(data)\n ? `${basePath}[${key}]`\n : `${basePath}.${key}`;\n }\n\n if (value === null || value === undefined || typeof value !== 'object') {\n result.set(currentPath, value);\n } else {\n const nestedPaths = flattenObject(value, currentPath);\n\n for (const [nestedPath, nestedValue] of nestedPaths) {\n result.set(nestedPath, nestedValue);\n }\n }\n }\n\n return result;\n}\n\nexport function extractFilePath(data: unknown): Map<string, string> {\n const flattened = flattenObject(data);\n const filePaths = new Map<string, string>();\n\n for (const [path, value] of flattened.entries()) {\n if (typeof value === 'string' && value.startsWith('files::')) {\n filePaths.set(value, path);\n }\n }\n\n return filePaths;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {set} from 'lodash-es';\nimport {DocumentReference} from 'modules/types';\n\nexport function injectFileMetadataIntoData(options: {\n data: Record<string, unknown>;\n fileMetadata: Map<string, DocumentReference[]>;\n pathsToInject: Map<string, string>;\n}): Record<string, unknown> {\n const {data, fileMetadata, pathsToInject} = options;\n let result = structuredClone(data);\n\n pathsToInject.forEach((filepickerPath, fileKey) => {\n const metadata = fileMetadata.get(fileKey);\n\n if (metadata === undefined) {\n return;\n }\n\n result = set(result, filepickerPath, metadata);\n });\n\n return result;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Stack, Button as CarbonButton} from '@carbon/react';\nimport {Error} from './styled';\nimport {Renew} from '@carbon/icons-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {useTaskForm} from './use-task-form';\nimport {useEffect, useState} from 'react';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {SaveExampleData} from 'modules/components/SaveExampleData';\nimport {ExampleDataSourceInformation} from 'modules/components/ExampleDataSourceInformation';\nimport {Data as FormData} from '@bpmn-io/form-js-viewer/dist/types/Form';\nimport {extractFilePath} from 'modules/utils/extract-file-path';\nimport {injectFileMetadataIntoData} from 'modules/utils/inject-file-metadata-into-data';\nimport {DocumentReference} from 'modules/types';\nimport {PICKER_KEY} from 'modules/utils/build-document-form-data';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\n\ntype Props = {\n isVisible: boolean;\n onClose: () => void;\n onSubmit: (data: FormData) => void;\n element: ElementLike;\n getFormBody: () => Promise<string | undefined>;\n primaryButtonLabel: string;\n title: string;\n dataTestId?: string;\n formPrefillSettings?:\n | {\n sanitizePrefillData: boolean;\n userTaskJobId: string;\n }\n | {sanitizePrefillData: false};\n};\n\nexport const TaskFormModal: React.FC<Props> = ({\n isVisible,\n element,\n onClose,\n onSubmit,\n getFormBody,\n primaryButtonLabel,\n title,\n dataTestId,\n formPrefillSettings,\n}) => {\n const [isLoading, setIsLoading] = useState(false);\n const {\n renderForm,\n resetForm,\n isDirty,\n isFormContentValid,\n originalPrefillSource,\n setOriginalPrefillSource,\n formVariables,\n hasFormLoadError,\n setHasFormLoadError,\n formContainerRef,\n taskForm,\n } = useTaskForm({\n element,\n formPrefillSettings,\n getFormBody,\n });\n\n useEffect(() => {\n if (!isVisible && taskForm.current) {\n taskForm.current.detach();\n taskForm.current = undefined;\n return;\n }\n\n if (!isVisible || !formContainerRef.current || taskForm.current) {\n return;\n }\n\n renderForm();\n }, [renderForm, isVisible, formContainerRef, taskForm]);\n\n async function handleFileUpload(\n files: Map<string, File[]>,\n ): Promise<Map<string, DocumentReference[]>> {\n if (files.size === 0) {\n return new Map();\n }\n\n const {response, success} = await zeebePlayService.uploadDocuments({\n files,\n });\n\n if (!success) {\n console.error('Failed to upload documents');\n return new Map();\n }\n const result = new Map<string, DocumentReference[]>();\n\n response.forEach((document) => {\n const pickerKey = document.metadata.customProperties?.[PICKER_KEY];\n\n if (typeof pickerKey !== 'string' || pickerKey.length === 0) {\n return;\n }\n\n const documentResult = result.get(pickerKey);\n\n if (Array.isArray(documentResult)) {\n result.set(pickerKey, [...documentResult, document]);\n } else {\n result.set(pickerKey, [document]);\n }\n });\n\n return result;\n }\n\n async function handleFormSubmit() {\n setIsLoading(true);\n try {\n const {data, errors, files} = taskForm.current?.submit() ?? {\n data: {},\n errors: {},\n files: new Map(),\n };\n const enrichedData =\n files.size === 0\n ? data\n : injectFileMetadataIntoData({\n data,\n fileMetadata: await handleFileUpload(files),\n pathsToInject: extractFilePath(data),\n });\n if (Object.keys(errors).length === 0) {\n onSubmit(enrichedData);\n }\n } catch (error) {\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n }\n\n return (\n <ComposedModal\n title={title}\n size=\"sm\"\n isVisible={isVisible}\n dataTestId={dataTestId}\n primaryButtonLabel={primaryButtonLabel}\n isPrimaryButtonDisabled={!isFormContentValid || isLoading}\n secondaryButton={{\n label: 'Close',\n onClick: onClose,\n }}\n onClose={onClose}\n onSubmit={handleFormSubmit}\n ghostButton={{\n label: 'Reset',\n onClick: resetForm,\n }}\n modalBody={\n <>\n <Stack gap={5}>\n <SaveExampleData\n isValid={isFormContentValid}\n editedValue={formVariables}\n element={element}\n onSuccess={() => {\n setOriginalPrefillSource('bpmn');\n }}\n tooltipTextForInvalid=\"Please enter valid data to save\"\n />\n <ExampleDataSourceInformation\n originalSource={originalPrefillSource}\n isDescriptionVisible={!isDirty}\n />\n </Stack>\n\n {hasFormLoadError && (\n <Error>\n We were unable to load the form\n <CarbonButton\n kind=\"tertiary\"\n size=\"sm\"\n renderIcon={Renew}\n onClick={() => {\n setHasFormLoadError(false);\n renderForm();\n }}\n >\n Retry\n </CarbonButton>\n </Error>\n )}\n <div ref={formContainerRef} />\n </>\n }\n />\n );\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {getExtensionElementsList} from 'camunda-bpmn-js/lib/util/ExtensionElementsUtil.js';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from 'modules/utils/getExtensionElement';\nimport {getExecutableProcess} from 'modules/utils/web-modeler-diagram-parser';\n\nexport const getFormBody = ({\n element,\n linkedStartForm,\n definitions,\n}: {\n element: ElementLike;\n linkedStartForm?: string;\n definitions: unknown;\n}) => {\n const startEventFormDefinition = getExtensionElement(\n element,\n 'zeebe:FormDefinition',\n );\n\n const isLinkedForm = startEventFormDefinition?.formId !== undefined;\n\n if (isLinkedForm) {\n return linkedStartForm;\n }\n\n const startEventFormKey = startEventFormDefinition?.formKey;\n\n const executableProcess = definitions\n ? getExecutableProcess(definitions)\n : undefined;\n\n if (!startEventFormKey || !executableProcess) {\n return;\n }\n\n return getExtensionElementsList(executableProcess, 'zeebe:userTaskForm').find(\n (elem) => startEventFormKey.includes(elem.id),\n )?.$body as string;\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {observer} from 'mobx-react';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {useStartInstance} from 'modules/hooks/useStartInstance';\nimport {ExampleDataEditorModal} from '../ExampleDataEditorModal';\nimport {TaskFormModal} from '../TaskFormModal';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {Data as FormData} from '@bpmn-io/form-js-viewer/dist/types/Form';\nimport {getFormBody} from 'modules/hooks/useStartInstance/get-form-body';\n\ntype ChildProps = {\n isStartingInstance: boolean;\n hasForm: boolean;\n startInstance: ({\n variables,\n processId,\n successNotificationSubtitle,\n }: {\n variables: string;\n processId?: string;\n successNotificationSubtitle?: string;\n }) => void;\n startInstanceWithVariables: () => void;\n startInstanceWithForm: () => void;\n};\n\ntype Props = {\n element: ElementLike;\n children: (props: ChildProps) => React.ReactNode;\n};\n\nconst StartInstance: React.FC<Props> = observer(({children, element}) => {\n const formBody = getFormBody({\n element,\n linkedStartForm: diagramStore.state.linkedStartForm,\n definitions: diagramStore.state.definitions,\n });\n\n const hasForm = formBody !== undefined;\n\n const {authType} = playEnvironmentStore;\n\n const {\n isModalOpen,\n isStartingInstance,\n setIsModalOpen,\n startInstance,\n startInstanceWithVariables,\n startInstanceWithForm,\n isFormModalOpen,\n setIsFormModalOpen,\n } = useStartInstance({element, isSelfManagedEnv: authType === 'sm'});\n\n return (\n <>\n {children({\n isStartingInstance,\n startInstance,\n startInstanceWithVariables,\n startInstanceWithForm,\n hasForm,\n })}\n\n <ExampleDataEditorModal\n title=\"Start instance with variables\"\n isVisible={isModalOpen}\n primaryButtonLabel=\"Create new instance\"\n onClose={() => setIsModalOpen(false)}\n onSubmit={async (variableModalContent) => {\n setIsModalOpen(false);\n\n startInstance({\n processId: playEnvironmentStore.processId,\n variables: variableModalContent ?? '{}',\n });\n }}\n element={element}\n />\n\n <TaskFormModal\n title=\"Start Form\"\n isVisible={isFormModalOpen}\n primaryButtonLabel=\"Start Instance\"\n dataTestId=\"start-form-dialog\"\n onClose={() => {\n setIsFormModalOpen(false);\n }}\n onSubmit={async (data: FormData) => {\n setIsFormModalOpen(false);\n startInstance({\n processId: playEnvironmentStore.processId,\n variables: JSON.stringify(data),\n });\n }}\n element={element}\n getFormBody={() => Promise.resolve(formBody)}\n />\n </>\n );\n});\n\nStartInstance.displayName = 'StartInstance';\nexport {StartInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {PrefillSource} from 'modules/types';\n\nfunction generateLabel({\n prefix = '',\n prefillSource,\n}: {\n prefix?: string;\n prefillSource: PrefillSource;\n}) {\n if (prefillSource === 'bpmn') {\n return `${prefix} with example data`;\n }\n\n if (prefillSource === 'cache') {\n return `${prefix} with cached data`;\n }\n\n return prefix;\n}\n\nexport {generateLabel};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {MenuButton, MenuItem} from '@carbon/react';\n\ntype Props = {\n onRestartClick: () => void;\n onRestartWithVariablesClick: () => void;\n dataTestId?: string;\n};\n\nconst Button: React.FC<Props> = ({\n onRestartClick,\n onRestartWithVariablesClick,\n dataTestId,\n}) => {\n return (\n <MenuButton\n size=\"sm\"\n kind=\"tertiary\"\n label=\"Restart instance\"\n data-testid={dataTestId}\n >\n <MenuItem label=\"Restart\" onClick={onRestartClick} />\n <MenuItem\n label=\"Restart with variables\"\n onClick={onRestartWithVariablesClick}\n />\n </MenuButton>\n );\n};\n\nButton.displayName = 'Button';\nexport {Button};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {BroadcastSignal} from 'modules/components/BroadcastSignal';\nimport {PublishMessage} from 'modules/components/PublishMessage';\nimport {StartInstance} from 'modules/components/StartInstance';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {messageSubscriptionsStore} from 'modules/stores/messageSubscriptions';\nimport {signalsStore} from 'modules/stores/signals';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {Button} from './Button';\nimport {processInstanceStore} from 'modules/stores/processInstance';\n\ntype Props = {\n className?: string;\n processId: string;\n processInstanceKey: number;\n};\n\nconst RestartInstance: React.FC<Props> = observer(\n ({processId, processInstanceKey}) => {\n if (processInstanceStore.isCalledProcess) {\n return null;\n }\n\n const firstElementId = elementInstancesStore.elementIds[0];\n\n if (firstElementId === undefined) {\n return null;\n }\n\n const element = diagramStore.elements?.find(\n ({id}) => id === firstElementId,\n );\n if (element === undefined) {\n return null;\n }\n\n const messageCandidate =\n messageSubscriptionsStore.startMessageSubscriptionCandidates?.find(\n ({elementId}) => elementId === firstElementId,\n );\n\n if (messageCandidate) {\n return (\n <PublishMessage\n messageSubscription={messageCandidate}\n element={element}\n isStartEvent={true}\n >\n {({publishMessage, publishMessageWithVariables}) => (\n <Button\n dataTestId=\"restart-instance-with-message-event\"\n onRestartClick={() =>\n publishMessage({\n processId,\n processInstanceKey,\n messageSubscription: messageCandidate,\n isStartEvent: true,\n })\n }\n onRestartWithVariablesClick={publishMessageWithVariables}\n />\n )}\n </PublishMessage>\n );\n }\n\n const signalCandidate = signalsStore.startSignalCandidates?.find(\n ({elementId}) => elementId === firstElementId,\n );\n\n if (signalCandidate) {\n return (\n <BroadcastSignal\n signalCandidate={signalCandidate}\n element={element}\n isStartEvent={true}\n >\n {({broadcastSignal, broadcastSignalWithVariables}) => (\n <Button\n dataTestId=\"restart-instance-with-signal-event\"\n onRestartClick={() =>\n broadcastSignal({\n processId,\n processInstanceKey,\n signalCandidate,\n isStartEvent: true,\n })\n }\n onRestartWithVariablesClick={broadcastSignalWithVariables}\n />\n )}\n </BroadcastSignal>\n );\n }\n\n return (\n <StartInstance element={element}>\n {({\n startInstance,\n startInstanceWithVariables,\n startInstanceWithForm,\n hasForm,\n }) => {\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId,\n });\n\n return (\n <Button\n dataTestId=\"restart-instance\"\n onRestartClick={() => {\n if (hasForm) {\n startInstanceWithForm();\n } else {\n startInstance({\n processId,\n variables: prefillData || '{}',\n successNotificationSubtitle:\n generateLabel({prefillSource}) || undefined,\n });\n }\n }}\n onRestartWithVariablesClick={startInstanceWithVariables}\n />\n );\n }}\n </StartInstance>\n );\n },\n);\n\nRestartInstance.displayName = 'RestartInstance';\nexport {RestartInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\n\nimport {StateIcon} from 'modules/components/StateIcon';\n\nimport {\n Container,\n CoverageContainer,\n Header,\n ScenarioInfo,\n ScenarioNameContainer,\n ScenarioName,\n Table,\n Td,\n Th,\n ViewAllButton,\n} from './styled';\nimport {\n processInstanceStore,\n UNSAVED_SCENARIO_NAME,\n} from 'modules/stores/processInstance';\nimport {ModificationInfoBanner} from './ModificationInfoBanner';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport {Link, Stack, Tooltip} from '@carbon/react';\nimport {Launch} from '@carbon/icons-react';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport trackingService from 'modules/services/TrackingService';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\nimport {SaveScenario} from './SaveScenario';\nimport PlayContext from 'modules/PlayContext';\nimport {useCallback, useContext, useEffect} from 'react';\nimport {\n generateHistoryKey,\n getUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {DefinitionTooltip} from 'modules/components/DefinitionTooltip';\nimport {Link as DefinitionTooltipLink} from 'modules/components/DefinitionTooltip/Link';\nimport {ScenarioCoverage} from './ScenarioCoverage';\nimport {sequenceFlowsStore} from 'modules/stores/sequenceFlows';\nimport {UpdateScenario} from './UpdateScenario';\nimport {getHeaderColumns} from './get-header-columns';\nimport {Skeleton} from './Skeleton';\nimport {RestartInstance} from './RestartInstance';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\n\nconst InstanceHeader: React.FC = observer(() => {\n const context = useContext(PlayContext);\n\n const {featureFlags, displayNotification, reInitializePlay} = context;\n const {isReplayScenariosEnabled} = featureFlags;\n\n const {instanceKey, status, processInstance, scenarioName} =\n processInstanceStore.state;\n const {isCalledProcess} = processInstanceStore;\n\n const {scenarioRuns} = scenariosStore.state;\n\n const {sanitizedOperateBaseUrl, hasLinkToOperate, authType, projectId} =\n playEnvironmentStore;\n const bpmnProcessId = processInstance?.bpmnProcessId;\n\n useEffect(() => {\n if (bpmnProcessId === undefined) {\n return;\n }\n\n scenariosStore.loadScenarios(bpmnProcessId);\n }, [instanceKey, bpmnProcessId, projectId]);\n\n useEffect(() => {\n if (status === 'auth-error') {\n displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${authType === 'sm' ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to view this instance.`,\n },\n {...MISSING_PERMISSION_ACTION_PROPS, shouldPersist: true},\n );\n }\n }, [status, authType, displayNotification]);\n\n const handleViewParentProcessInstance = useCallback(\n async (parentProcessInstanceKey: number) => {\n const parentInstanceDetails = await zeebePlayService.fetchInstanceDetails(\n parentProcessInstanceKey,\n );\n\n if (!parentInstanceDetails.success) {\n displayNotification?.error(REQUEST_FAILURE);\n return;\n }\n\n const {\n processDefinitionKey: parentProcessDefinitionKey,\n bpmnProcessId: parentBpmnProcessId,\n } = parentInstanceDetails.processInstance;\n\n reInitializePlay?.({\n processId: parentBpmnProcessId,\n processDefinitionKey: parentProcessDefinitionKey,\n processInstanceKey: parentProcessInstanceKey,\n });\n },\n [displayNotification, reInitializePlay],\n );\n\n if (!instanceKey) {\n return null;\n }\n\n const headerColumns = getHeaderColumns({\n isReplayScenariosEnabled,\n isCalledProcess,\n });\n\n if (\n !processInstance ||\n !projectId ||\n !bpmnProcessId ||\n !processInstanceStore.isInitialLoadComplete\n ) {\n return (\n <Skeleton\n headerColumns={headerColumns}\n isReplayScenariosEnabled={isReplayScenariosEnabled}\n />\n );\n }\n const parentProcessInstanceKey = processInstance?.parentKey;\n\n const state = processInstance.incident ? 'INCIDENT' : processInstance.state;\n\n const operateUrl = `${sanitizedOperateBaseUrl}/processes/${instanceKey}`;\n const isScenarioSaved = scenarioName !== UNSAVED_SCENARIO_NAME;\n\n const failedScenarioName = Object.keys(scenarioRuns).find((name) => {\n const scenario = scenarioRuns[name];\n\n return (\n scenario !== undefined &&\n scenario.instanceKey === instanceKey &&\n scenario.status === 'Failed'\n );\n });\n\n return (\n <Header data-testid=\"instance-header\">\n <Container>\n <StateIcon state={state} size={24} />\n <Table>\n <thead>\n <tr>\n {headerColumns.map(({name}) => (\n <Th key={name}>{name}</Th>\n ))}\n </tr>\n </thead>\n <tbody>\n <tr>\n <Td style={{overflow: 'visible'}}>\n {hasLinkToOperate ? (\n <Tooltip\n label=\"View process instance in Operate\"\n align=\"bottom\"\n closeOnActivation={true}\n >\n <Link\n href={operateUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n renderIcon={() => <Launch />}\n onClick={() => {\n trackingService.openOperate(operateUrl);\n }}\n >\n {instanceKey}\n </Link>\n </Tooltip>\n ) : (\n instanceKey\n )}\n </Td>\n {!isCalledProcess && (\n <Td>\n <ViewAllButton\n variant=\"text\"\n onClick={() => {\n bottomBarStore.setActiveTab('instances');\n processInstanceStore.reset();\n }}\n >\n View all\n </ViewAllButton>\n </Td>\n )}\n {isCalledProcess && (\n <Td>\n {parentProcessInstanceKey ? (\n <ViewAllButton\n data-testid=\"view-parent-process\"\n variant=\"text\"\n onClick={() => {\n handleViewParentProcessInstance(\n parentProcessInstanceKey,\n );\n }}\n >\n {processInstance.parentKey}\n </ViewAllButton>\n ) : (\n 'None'\n )}\n </Td>\n )}\n {isReplayScenariosEnabled && !isCalledProcess && (\n <Td>\n <ScenarioNameContainer>\n <ScenarioName title={failedScenarioName ?? scenarioName}>\n {failedScenarioName ?? scenarioName}\n </ScenarioName>\n <ViewAllButton\n variant=\"text\"\n onClick={() => {\n bottomBarStore.setActiveTab('scenarios');\n processInstanceStore.reset();\n }}\n >\n (View all)\n </ViewAllButton>\n </ScenarioNameContainer>\n </Td>\n )}\n </tr>\n </tbody>\n </Table>\n {featureFlags.isReplayScenariosEnabled && !isCalledProcess && (\n <ScenarioInfo>\n {processInstanceStore.state.processInstance?.state ===\n 'COMPLETED' &&\n !isScenarioSaved && (\n <CoverageContainer data-testid=\"scenario-coverage\">\n <ScenarioCoverage\n isGreen={scenariosStore.coverageIncrease > 0}\n hasPrecedingPlusIcon\n >{`${scenariosStore.coverageIncrease.toFixed(0)}% `}</ScenarioCoverage>\n <DefinitionTooltip\n align=\"bottom-end\"\n definition={\n <Stack gap={3}>\n This percentage indicates how much of your process\n scenario coverage will be increased with this scenario.\n <DefinitionTooltipLink\n href=\"https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenario-coverage\"\n target=\"_blank\"\n >\n Learn more\n </DefinitionTooltipLink>\n </Stack>\n }\n openOnHover\n >\n Coverage\n </DefinitionTooltip>\n </CoverageContainer>\n )}\n {failedScenarioName ? (\n <UpdateScenario\n scenarioName={failedScenarioName}\n onScenarioUpdated={async () => {\n try {\n await scenariosStore.updateScenario({\n processId: bpmnProcessId,\n name: failedScenarioName,\n processInstanceId: instanceKey,\n actions: getUserActionHistory(\n generateHistoryKey(instanceKey),\n ),\n coveredFlowNodes:\n elementInstancesStore.elementInstancesWithType,\n coveredSequenceFlows:\n sequenceFlowsStore.state.sequenceFlows,\n });\n } catch {\n displayNotification?.error(REQUEST_FAILURE);\n return;\n }\n\n processInstanceStore.setScenarioName(failedScenarioName);\n displayNotification?.success(\n {\n title: 'Scenario updated',\n subtitle: `${failedScenarioName} was successfully updated.`,\n },\n {\n action: {\n label: 'View scenario',\n onClick: () => {\n bottomBarStore.setActiveTab('scenarios');\n processInstanceStore.reset();\n },\n },\n },\n );\n }}\n isScenarioUpdated={isScenarioSaved}\n />\n ) : (\n <SaveScenario\n onScenarioSaved={async (scenarioName: string) => {\n try {\n await scenariosStore.addScenario({\n processId: bpmnProcessId,\n name: scenarioName,\n processInstanceId: instanceKey,\n actions: getUserActionHistory(\n generateHistoryKey(instanceKey),\n ),\n coveredFlowNodes:\n elementInstancesStore.elementInstancesWithType,\n coveredSequenceFlows:\n sequenceFlowsStore.state.sequenceFlows,\n });\n } catch {\n displayNotification?.error(REQUEST_FAILURE);\n return;\n }\n\n processInstanceStore.setScenarioName(scenarioName);\n displayNotification?.success(\n {\n title: 'Scenario saved',\n subtitle: `${scenarioName} was successfully saved.`,\n },\n {\n action: {\n label: 'View scenario',\n onClick: () => {\n bottomBarStore.setActiveTab('scenarios');\n processInstanceStore.reset();\n },\n },\n },\n );\n\n trackingService.saveScenario({\n newTotalCoverage: `${scenariosStore.newTotalCoverage.toFixed(0)}%`,\n coverageIncrease: `${scenariosStore.coverageIncrease.toFixed(0)}%`,\n });\n }}\n isScenarioSaved={isScenarioSaved}\n />\n )}\n </ScenarioInfo>\n )}\n <RestartInstance\n processId={processInstance.bpmnProcessId}\n processInstanceKey={processInstance.key}\n />\n </Container>\n {modificationsStore.isMovingToken && (\n <ModificationInfoBanner\n text=\"Select the target flow node in the diagram\"\n button={{\n onClick: () => modificationsStore.finishMovingToken(),\n label: 'Discard',\n }}\n />\n )}\n </Header>\n );\n});\n\nInstanceHeader.displayName = 'InstanceHeader';\nexport default InstanceHeader;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Tag} from '@carbon/react';\nimport styled from 'styled-components';\n\nexport const Title = styled.div`\n background: var(--silver-base-97, hsl(0, 0%, 97%));\n border-top: 1px solid var(--silver-darken-80, hsl(0, 0%, 80%));\n border-bottom: 1px solid var(--silver-darken-80, hsl(0, 0%, 80%));\n cursor: pointer;\n`;\n\nexport const StatusText = styled.span`\n vertical-align: middle;\n`;\n\ntype TabProps = {\n $isActive: boolean;\n isErrorPanelCollapsed?: boolean;\n};\n\nexport const Tab = styled.div<TabProps>`\n display: inline-block;\n cursor: pointer;\n padding: 6px 18px 4px 18px;\n font-weight: ${(props) =>\n props.$isActive && !props.isErrorPanelCollapsed ? '500' : ''};\n border-bottom: ${(props) =>\n props.$isActive && !props.isErrorPanelCollapsed\n ? '2px solid var(--cds-blue-60, #0f62fe)'\n : ''};\n margin-left: 12px;\n height: 38px;\n`;\n\nexport const Content = styled.div`\n height: 200px;\n width: 100%;\n overflow-y: auto;\n background: white;\n`;\n\nexport const ErrorCounterTag = styled(Tag)`\n min-inline-size: 24px;\n background-color: var(\n --grey-base-40\n ); // to match the badge color in implement tab\n color: white;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Button,\n CodeSnippet as BaseCodeSnippet,\n TabList as BaseTabList,\n TabPanel as BaseTabPanel,\n InlineLoading as BaseInlineLoading,\n} from '@carbon/react';\nimport styled, {keyframes} from 'styled-components';\n\nexport const Container = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: var(--cds-layer);\n border-right: 1px solid rgb(216, 220, 227);\n border-top: 1px solid rgb(216, 220, 227);\n`;\n\ntype TableContainerProps = {\n $isEmpty: boolean;\n};\nexport const TableContainer = styled.div<TableContainerProps>`\n flex: 1;\n overflow: auto;\n\n ${({$isEmpty}) =>\n $isEmpty &&\n `\n display: flex;\n align-items: center;\n \n `}\n`;\n\nexport const EmptyMessage = styled.div`\n font-size: 1rem;\n font-weight: 600;\n line-height: 1.5;\n flex: 1;\n text-align: center;\n`;\n\nexport const Table = styled.table`\n border-collapse: separate;\n border-spacing: 8px;\n width: calc(100% - 16px);\n margin: 8px;\n`;\n\nexport const THead = styled.thead`\n text-align: left;\n color: var(--text-text-secondary, #525252);\n\n font-family: IBM Plex Sans;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0.32px;\n`;\n\nexport const TBody = styled.tbody`\n color: var(--text-text-primary, #161616);\n\n font-family: IBM Plex Sans;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 18px; /* 128.571% */\n letter-spacing: 0.16px;\n\n td {\n height: 32px;\n vertical-align: top;\n }\n`;\n\nexport const NameColumn = styled.th`\n width: 15%;\n`;\n\nexport const ValueColumn = styled.th`\n width: 80%;\n`;\n\nexport const ActionColumn = styled.th`\n width: 5%;\n`;\n\nexport const RowActions = styled.td`\n display: flex;\n align-items: center;\n text-align: right;\n width: 5%;\n`;\n\nexport const ActionButton = styled(Button)`\n margin-top: -15px;\n transform: translateY(9px);\n`;\n\nexport const TdName = styled.td`\n width: 15%;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const TdValue = styled.td`\n width: 80%;\n`;\n\nconst spin = keyframes`\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n`;\n\nexport const Loader = styled.span`\n display: inline-block;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n margin: 8px 15px;\n border: 3px solid var(--cds-blue-60, #0f62fe);\n border-bottom-color: transparent;\n animation: ${spin} 1.2s linear infinite;\n`;\n\nexport const CodeSnippet = styled(BaseCodeSnippet)`\n .cds--snippet-container {\n width: 100%;\n }\n`;\n\nexport const TabList = styled(BaseTabList)`\n border-bottom: 1px solid var(--cds-border-subtle-01);\n`;\n\nexport const PanelContainer = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n`;\n\nexport const TabPanel = styled(BaseTabPanel)`\n padding: 0;\n height: 100%;\n overflow: auto;\n`;\n\nexport const InlineLoading = styled(BaseInlineLoading)`\n margin-left: var(--cds-spacing-03);\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nfunction beautifyJSON(value: string, spacing = '\\t') {\n try {\n const parsedValue = JSON.parse(value);\n\n return JSON.stringify(parsedValue, null, spacing);\n } catch {\n return value;\n }\n}\n\nexport {beautifyJSON};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Modal as BaseModal} from '@carbon/react';\n\nimport styled from 'styled-components';\n\nconst Modal = styled(BaseModal)`\n h3 {\n font-weight: 400;\n }\n`;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nexport {Modal, Container};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect, useRef, useState} from 'react';\nimport {JSONEditor} from 'modules/components/JSONEditor';\nimport {U} from 'ts-toolbelt';\nimport {FormLabel, TextInput} from '@carbon/react';\nimport {isValidJSON} from 'modules/utils/isValidJSON';\nimport {Modal, Container} from './styled';\n\ntype EditorFirstParam = Parameters<\n U.NonNullable<React.ComponentProps<typeof JSONEditor>['onMount']>\n>[0];\n\ntype Props = {\n isVisible: boolean;\n onClose?: () => void;\n onSubmit?: (name: string, value: string | undefined) => void;\n validateVariableName: (\n value: string,\n ) => {isValid: true} | {isValid: false; error: string};\n};\n\nconst AddVariableModal: React.FC<Props> = ({\n isVisible,\n onClose,\n onSubmit,\n validateVariableName,\n}) => {\n const [variableNameError, setVariableNameError] = useState<string | null>(\n null,\n );\n const [isVariableValueValid, setIsVariableValueValid] = useState(true);\n const [variableName, setVariableName] = useState('');\n const [variableValue, setVariableValue] = useState('');\n\n const editorRef = useRef<EditorFirstParam | null>(null);\n\n useEffect(() => {\n if (!isVisible) {\n setVariableName('');\n setVariableValue('');\n setVariableNameError(null);\n setIsVariableValueValid(true);\n }\n }, [isVisible]);\n\n useEffect(() => {\n if (isVariableValueValid) {\n editorRef.current?.hideMarkers();\n }\n }, [isVariableValueValid]);\n\n return (\n <Modal\n open={isVisible}\n size=\"md\"\n modalHeading=\"Add variable\"\n primaryButtonText=\"Add\"\n secondaryButtonText=\"Cancel\"\n onRequestClose={onClose}\n onRequestSubmit={() => {\n if (isVariableValueValid) {\n onSubmit?.(\n variableName,\n variableValue === '' ? undefined : variableValue,\n );\n } else {\n editorRef.current?.showMarkers();\n }\n }}\n primaryButtonDisabled={\n variableNameError !== null || !isVariableValueValid\n }\n preventCloseOnClickOutside\n >\n <Container>\n <TextInput\n id=\"variable-name\"\n size=\"md\"\n labelText=\"Variable name\"\n autoFocus\n invalid={variableNameError !== null}\n invalidText={variableNameError}\n value={variableName}\n onBlur={(event) => {\n const validationResult = validateVariableName(event.target.value);\n if (validationResult.isValid) {\n setVariableNameError(null);\n } else {\n setVariableNameError(validationResult.error);\n }\n }}\n onChange={(event) => {\n setVariableName(event.target.value);\n }}\n />\n\n <FormLabel>Variable value</FormLabel>\n <JSONEditor\n dataTestId=\"new-variable-value\"\n value={variableValue}\n isVisible={isVisible}\n height=\"10vh\"\n onChange={(value) => {\n const newValue = value ?? '';\n setVariableValue(newValue);\n setIsVariableValueValid(isValidJSON(newValue));\n }}\n onValidate={setIsVariableValueValid}\n onMount={(editor) => {\n editorRef.current = editor;\n }}\n />\n </Container>\n </Modal>\n );\n};\n\nexport {AddVariableModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {SkeletonText as BaseSkeletonText} from '@carbon/react';\nimport styled from 'styled-components';\n\nconst Ul = styled.ul`\n overflow: hidden;\n position: absolute;\n width: 100%;\n height: 100%;\n`;\n\nconst Li = styled.li`\n margin: var(--cds-spacing-05);\n display: flex;\n gap: var(--cds-spacing-05);\n`;\n\nconst SkeletonText = styled(BaseSkeletonText)`\n margin: 0;\n`;\n\nexport {Ul, Li, SkeletonText};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Ul, Li, SkeletonText} from './styled';\n\nconst VariableRow: React.FC = () => {\n return (\n <Li>\n <SkeletonText width=\"276px\" />\n <SkeletonText width=\"384px\" />\n </Li>\n );\n};\n\nconst Skeleton: React.FC = () => {\n return (\n <Ul data-testid=\"variables-skeleton\">\n {[...Array(20)].map((_, index) => (\n <VariableRow key={index} />\n ))}\n </Ul>\n );\n};\n\nexport {Skeleton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Tabs, Tab, Button, Layer} from '@carbon/react';\nimport {observer} from 'mobx-react';\nimport {Add, Edit, View} from '@carbon/icons-react';\nimport {useCallback, useContext, useEffect, useState} from 'react';\n\nimport PlayContext from 'modules/PlayContext';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\n\nimport * as Styled from './styled';\nimport {variablesStore} from 'modules/stores/variables';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {JSONEditorModal} from 'modules/components/JSONEditorModal';\nimport {isValidJSON} from 'modules/utils/isValidJSON';\nimport {beautifyJSON} from 'modules/utils/beautifyJSON';\nimport {AddVariableModal} from './AddVariableModal';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {Skeleton} from './Skeleton';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype Props = {\n selectedScope: number | null;\n isActive: boolean;\n};\n\nconst Variables: React.FC<Props> = observer(({selectedScope, isActive}) => {\n const context = useContext(PlayContext);\n const {authType} = playEnvironmentStore;\n const displayNotification = context.displayNotification;\n\n const [editingVariable, setEditingVariable] = useState<{\n name: string;\n value: string;\n } | null>(null);\n\n const [modalTitle, setModalTitle] = useState('');\n\n const [isInProgress, setIsInProgress] = useState(false);\n const [isEditVariableModalVisible, setIsEditVariableModalVisible] =\n useState(false);\n const [isAddVariableModalVisible, setIsAddVariableModalVisible] =\n useState(false);\n\n const isUpdating = variablesStore.state.isUpdatingVariable;\n const {instanceKey} = processInstanceStore.state;\n\n const variablesInScope = variablesStore.state.variables.filter(\n (variable) => variable.scopeKey === selectedScope,\n );\n\n useEffect(() => {\n if (!isActive) {\n setEditingVariable(null);\n }\n }, [isActive]);\n\n useEffect(() => {\n if (!isUpdating) {\n setEditingVariable(null);\n }\n }, [isUpdating]);\n\n useEffect(() => {\n setEditingVariable(null);\n }, [selectedScope]);\n\n const setVariables = useCallback(\n async (variables: string) => {\n const result = await variablesStore.setVariables({\n instanceKey,\n scope: selectedScope,\n variablesString: variables,\n });\n\n if (result.status === AUTHORIZATION_ERROR_CODE) {\n displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${authType === 'sm' ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to set variables.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n\n return;\n }\n\n if (result.success && instanceKey !== undefined) {\n updateUserActionHistory(generateHistoryKey(instanceKey), {\n action: 'setVariables',\n variables,\n });\n }\n\n if (!result.success) {\n displayNotification?.error(REQUEST_FAILURE);\n }\n },\n [authType, instanceKey, displayNotification, selectedScope],\n );\n\n return (\n <Styled.Container>\n <Tabs>\n <Styled.TabList aria-label=\"Variables\">\n <Tab>Variables</Tab>\n </Styled.TabList>\n <Styled.TabPanel>\n <Styled.PanelContainer>\n {!variablesStore.isInitialLoadComplete ? (\n <Skeleton />\n ) : (\n <>\n <Styled.TableContainer $isEmpty={variablesInScope.length === 0}>\n {variablesInScope.length === 0 && (\n <Styled.EmptyMessage>\n {flowNodeSelectionStore.isRootNodeSelected\n ? 'This process instance has no variables'\n : 'The flow node has no variables'}\n </Styled.EmptyMessage>\n )}\n {variablesInScope.length > 0 && (\n <Styled.Table>\n <Styled.THead>\n <tr>\n <Styled.NameColumn>Name</Styled.NameColumn>\n <Styled.ValueColumn>Value</Styled.ValueColumn>\n <Styled.ActionColumn />\n </tr>\n </Styled.THead>\n <Styled.TBody>\n {variablesInScope.map((variable) => (\n <tr key={variable.name}>\n <Styled.TdName title={variable.name}>\n {variable.name}\n </Styled.TdName>\n <Styled.TdValue>\n <Layer>\n <Styled.CodeSnippet\n type=\"multi\"\n wrapText\n maxCollapsedNumberOfRows={3}\n maxExpandedNumberOfRows={3}\n minExpandedNumberOfRows={0}\n minCollapsedNumberOfRows={0}\n >\n {beautifyJSON(variable.value, ' ')}\n </Styled.CodeSnippet>\n </Layer>\n </Styled.TdValue>\n <Styled.RowActions>\n {editingVariable?.name === variable.name &&\n (isUpdating || isInProgress) ? (\n <Styled.InlineLoading />\n ) : (\n <Styled.ActionButton\n onClick={async () => {\n setModalTitle(\n `${isActive ? 'Edit' : 'View'} \"${variable.name}\" variable`,\n );\n\n setEditingVariable({\n ...variable,\n value: beautifyJSON(variable.value),\n });\n\n if (variable.truncated) {\n setIsInProgress(true);\n const variableWithFullValue =\n await variablesStore.fetchVariable(\n variable.key,\n );\n\n setIsInProgress(false);\n\n if (\n variableWithFullValue?.value ===\n undefined\n ) {\n context.displayNotification?.error({\n title:\n 'Variable could not be fetched',\n });\n\n setEditingVariable(null);\n return;\n }\n\n setEditingVariable({\n ...variable,\n value: beautifyJSON(\n variableWithFullValue.value,\n ),\n });\n }\n\n setIsEditVariableModalVisible(true);\n }}\n hasIconOnly\n renderIcon={isActive ? Edit : View}\n iconDescription={isActive ? 'Edit' : 'View'}\n size=\"sm\"\n kind=\"ghost\"\n />\n )}\n </Styled.RowActions>\n </tr>\n ))}\n </Styled.TBody>\n </Styled.Table>\n )}\n </Styled.TableContainer>\n <Button\n onClick={() => {\n setIsAddVariableModalVisible(true);\n }}\n renderIcon={Add}\n iconDescription=\"Add variable\"\n size=\"md\"\n kind=\"ghost\"\n disabled={!isActive || editingVariable !== null}\n >\n Add variable\n </Button>\n <JSONEditorModal\n isVisible={isEditVariableModalVisible}\n value={editingVariable?.value ?? undefined}\n title={modalTitle}\n primaryButtonLabel=\"Apply\"\n secondaryButtonLabel=\"Cancel\"\n readOnly={!isActive}\n onSubmit={async (value) => {\n setIsEditVariableModalVisible(false);\n\n if (editingVariable === null || value === undefined) {\n return;\n }\n\n setIsInProgress(true);\n\n const variablesString = JSON.stringify({\n [editingVariable.name]: JSON.parse(value),\n });\n\n await setVariables(variablesString);\n\n setIsInProgress(false);\n setEditingVariable(null);\n }}\n onClose={() => {\n setIsEditVariableModalVisible(false);\n setEditingVariable(null);\n }}\n isValidInput={isValidJSON}\n />\n <AddVariableModal\n isVisible={isAddVariableModalVisible}\n validateVariableName={(newVariableName) => {\n if (newVariableName === '') {\n return {\n isValid: false,\n error: 'Enter a variable name',\n };\n }\n if (\n newVariableName.includes('\"') ||\n newVariableName.includes(' ')\n ) {\n return {\n isValid: false,\n error:\n 'Variable contains invalid characters. Use only alphabets, numbers and dashes (-)',\n };\n }\n if (\n variablesInScope.some(\n ({name}) => name === newVariableName,\n )\n ) {\n return {\n isValid: false,\n error:\n 'A variable with this name already exists. Please enter another name.',\n };\n }\n\n return {isValid: true};\n }}\n onSubmit={async (variableName, variableValue) => {\n setIsAddVariableModalVisible(false);\n\n if (variableValue === undefined) {\n return;\n }\n\n setIsInProgress(true);\n\n const variablesString = JSON.stringify({\n [variableName]: JSON.parse(variableValue),\n });\n\n await setVariables(variablesString);\n\n setIsInProgress(false);\n setEditingVariable(null);\n }}\n onClose={() => {\n setIsAddVariableModalVisible(false);\n setEditingVariable(null);\n }}\n />\n </>\n )}\n </Styled.PanelContainer>\n </Styled.TabPanel>\n </Tabs>\n </Styled.Container>\n );\n});\n\nVariables.displayName = 'Variables';\nexport {Variables};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {TreeNode as BaseTreeNode} from '@carbon/react';\nimport {BOTTOM_PANEL_HEADER_HEIGHT} from 'modules/utils/constants';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n\n position: relative;\n`;\n\ntype DragHandleProps = {\n $isResizing: boolean;\n};\n\nexport const DragHandle = styled.div<DragHandleProps>`\n position: absolute;\n top: -3px;\n height: 6px;\n width: 100%;\n z-index: 1;\n\n cursor: ns-resize;\n transition: background-color 0.2s;\n\n ${({$isResizing}) =>\n $isResizing && 'background-color: var(--cm-color-blue-base, #4d90ff);'};\n\n &:hover {\n background-color: var(--cm-color-blue-base, #4d90ff);\n }\n`;\n\nexport const HistoryTree = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: var(--cds-layer);\n border-right: 1px solid var(--cds-border-subtle-01);\n border-top: 1px solid var(--cds-border-subtle-01);\n`;\n\nexport const Header = styled.div`\n padding: 11px 16px;\n font-family: IBM Plex Sans;\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n line-height: 18px; /* 128.571% */\n letter-spacing: 0.16px;\n border-bottom: 1px solid var(--cds-border-subtle-01);\n height: ${BOTTOM_PANEL_HEADER_HEIGHT};\n`;\n\nexport const TreeViewContainer = styled.div`\n overflow: auto;\n\n .cds--tree-parent-node > .cds--tree-node__label {\n margin-inline-start: -1rem;\n padding-inline-start: 1rem;\n }\n .cds--tree-node__label {\n position: relative;\n\n margin-inline-start: -3.5rem;\n padding-inline-start: 3.5rem;\n\n > span:first-child {\n margin-inline-start: 30px;\n }\n > .cds--tree-parent-node__toggle:first-child {\n margin-inline-start: 22px;\n }\n }\n`;\n\nexport const TreeNode = styled(BaseTreeNode)`\n .cds--tree-node__label__details {\n width: 100%;\n }\n`;\n\nexport const TreeNodeLabel = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1;\n padding: 0 16px 0 12px;\n`;\n\nexport const Icon = styled.div`\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n position: absolute;\n left: 16px;\n padding-top: 1px;\n`;\n\nexport const IconContainer = styled.span`\n font-size: 16px;\n margin-top: -3px;\n transform: translateY(1px);\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {BPMNIconType} from 'modules/types';\n\nfunction BPMNIcon({type}: {type: BPMNIconType}) {\n switch (type) {\n case 'PROCESS':\n return <span className=\"bpmn-icon-participant\" />;\n case 'START_EVENT':\n return <span className=\"bpmn-icon-start-event-none\" />;\n case 'SEQUENCE_FLOW':\n return <span className=\"bpmn-icon-connection\" />;\n case 'SERVICE_TASK':\n return <span className=\"bpmn-icon-service-task\" />;\n case 'EXCLUSIVE_GATEWAY':\n return <span className=\"bpmn-icon-gateway-xor\" />;\n case 'INCLUSIVE_GATEWAY':\n return <span className=\"bpmn-icon-gateway-or\" />;\n case 'PARALLEL_GATEWAY':\n return <span className=\"bpmn-icon-gateway-parallel\" />;\n case 'EVENT_BASED_GATEWAY':\n return <span className=\"bpmn-icon-gateway-eventbased\" />;\n case 'SUB_PROCESS':\n return <span className=\"bpmn-icon-subprocess-expanded\" />;\n case 'EVENT_SUB_PROCESS':\n return <span className=\"bpmn-icon-event-subprocess-expanded\" />;\n case 'INTERMEDIATE_CATCH_EVENT':\n return <span className=\"bpmn-icon-intermediate-event-none\" />;\n case 'INTERMEDIATE_THROW_EVENT':\n return <span className=\"bpmn-icon-intermediate-event-none\" />;\n case 'BOUNDARY_EVENT':\n return <span className=\"bpmn-icon-intermediate-event-none\" />;\n case 'END_EVENT':\n return <span className=\"bpmn-icon-end-event-none\" />;\n case 'RECEIVE_TASK':\n return <span className=\"bpmn-icon-receive-task\" />;\n case 'USER_TASK':\n return <span className=\"bpmn-icon-user-task\" />;\n case 'MANUAL_TASK':\n return <span className=\"bpmn-icon-manual-task\" />;\n case 'MULTI_INSTANCE_BODY':\n return <span className=\"bpmn-icon-parallel-mi-marker\" />;\n case 'CALL_ACTIVITY':\n return <span className=\"bpmn-icon-subprocess-collapsed\" />;\n case 'BUSINESS_RULE_TASK':\n return <span className=\"bpmn-icon-business-rule-task\" />;\n case 'SCRIPT_TASK':\n return <span className=\"bpmn-icon-script-task\" />;\n case 'SEND_TASK':\n return <span className=\"bpmn-icon-send-task\" />;\n default:\n return '?';\n }\n}\n\nexport default BPMNIcon;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\nimport {Tag as BaseTag} from '@carbon/react';\n\ntype TagProps = {\n $isVisible: boolean;\n};\n\nconst Tag = styled(BaseTag)<TagProps>`\n ${({$isVisible}) => css`\n min-width: 118px;\n transition: opacity 0.2s ease-in-out;\n opacity: ${$isVisible ? '1' : '0'};\n margin-top: 0;\n margin-bottom: 0;\n `}\n`;\n\nexport {Tag};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect, useRef, useState} from 'react';\nimport {Tag} from './styled';\nimport {variablesStore} from 'modules/stores/variables';\nimport {reaction} from 'mobx';\n\ntype Props = {\n scopeKey: number;\n};\nconst VariableModifiedTag: React.FC<Props> = ({scopeKey}) => {\n const [isVisible, setIsVisible] = useState(false);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n const disposer = reaction(\n () => variablesStore.state.variables,\n (currentVariables, previousVariables) => {\n const updatedVariables = [\n ...currentVariables.filter(\n ({key: currentKey}) =>\n !previousVariables.some(({key}) => key === currentKey),\n ),\n ...currentVariables.filter((currentVariable) => {\n const previousVariable = previousVariables.find(\n ({key}) => key === currentVariable.key,\n );\n if (previousVariable === undefined) {\n return false;\n }\n return previousVariable.value !== currentVariable.value;\n }),\n ];\n\n if (\n updatedVariables\n .map((variable) => variable.scopeKey)\n .includes(scopeKey)\n ) {\n setIsVisible(true);\n\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n setIsVisible(false);\n }, 3000);\n }\n },\n );\n\n return () => {\n disposer();\n };\n }, [isVisible, scopeKey]);\n\n return (\n <Tag size=\"sm\" type=\"green\" $isVisible={isVisible}>\n Variable modified\n </Tag>\n );\n};\n\nexport {VariableModifiedTag};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport BPMNIcon from '../BPMNIcon';\nimport {StateIcon} from 'modules/components/StateIcon';\nimport * as Styled from './styled';\nimport {observer} from 'mobx-react';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {VariableModifiedTag} from './VariableModifiedTag';\nimport {FlowNodeInstance} from 'modules/types';\nimport {variablesStore} from 'modules/stores/variables';\n\ntype ElementInstance = {\n instance: FlowNodeInstance;\n childNodes: ElementInstance[];\n isSelected: boolean;\n};\n\ntype Props = {\n instance: FlowNodeInstance;\n childNodes: Array<ElementInstance>;\n isSelected: boolean;\n};\n\nconst InstanceTreeNode: React.FC<Props> = observer(\n ({instance, childNodes, isSelected, ...carbonTreeNodeProps}) => {\n const isProcessInstance =\n instance.key === processInstanceStore.state.processInstance?.key;\n\n return (\n <Styled.TreeNode\n {...carbonTreeNodeProps}\n key={instance.key}\n id={instance.key.toString()}\n value={instance.key.toString()}\n selected={isSelected ? [instance.key] : []}\n active={isSelected ? instance.key : undefined}\n renderIcon={() => (\n <Styled.IconContainer>\n <BPMNIcon type={instance.type} />\n </Styled.IconContainer>\n )}\n onSelect={() => {\n flowNodeSelectionStore.selectFlowNode({\n flowNodeId: isProcessInstance ? undefined : instance.flowNodeId,\n flowNodeName: isProcessInstance\n ? undefined\n : (instance.flowNodeName ?? instance.flowNodeId),\n flowNodeInstanceId: instance.key,\n isMultiInstance: instance.type === 'MULTI_INSTANCE_BODY',\n });\n }}\n label={\n <Styled.TreeNodeLabel>\n <Styled.Icon>\n <StateIcon\n state={instance.incident ? 'INCIDENT' : instance.state}\n size={16}\n />\n </Styled.Icon>\n {instance.flowNodeName || instance.flowNodeId}\n\n {variablesStore.isInitialLoadComplete && (\n <VariableModifiedTag scopeKey={instance.key} />\n )}\n </Styled.TreeNodeLabel>\n }\n isExpanded\n >\n {childNodes.length > 0 &&\n childNodes.map((child) => (\n <InstanceTreeNode\n key={child.instance.key}\n instance={child.instance}\n childNodes={child.childNodes}\n isSelected={child.isSelected}\n />\n ))}\n </Styled.TreeNode>\n );\n },\n);\n\nInstanceTreeNode.displayName = 'InstanceTreeNode';\nexport {InstanceTreeNode};\nexport type {ElementInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {SkeletonText as BaseSkeletonText} from '@carbon/react';\nimport {BOTTOM_PANEL_HEADER_HEIGHT} from 'modules/utils/constants';\nimport styled from 'styled-components';\n\nconst Ul = styled.ul`\n overflow: hidden;\n position: absolute;\n width: 100%;\n height: 100%;\n padding-top: ${BOTTOM_PANEL_HEADER_HEIGHT};\n`;\n\nconst Li = styled.li`\n margin: var(--cds-spacing-05);\n display: flex;\n gap: var(--cds-spacing-05);\n`;\n\nconst SkeletonText = styled(BaseSkeletonText)`\n margin: 0;\n`;\n\nexport {Ul, Li, SkeletonText};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {SkeletonIcon} from '@carbon/react';\nimport {Li, SkeletonText, Ul} from './styled';\n\nconst TreeNode: React.FC = () => {\n return (\n <Li>\n <SkeletonIcon />\n <SkeletonText width=\"143px\" />\n </Li>\n );\n};\n\nconst Skeleton: React.FC = () => {\n return (\n <Ul data-testid=\"instance-history-skeleton\">\n {[...Array(20)].map((_, index) => (\n <TreeNode key={index} />\n ))}\n </Ul>\n );\n};\n\nexport {Skeleton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {TreeView} from '@carbon/react';\nimport {useRef, useState, useEffect, useCallback} from 'react';\n\nimport {FlowNodeInstance} from 'modules/types';\nimport {Variables} from '../Variables';\nimport * as Styled from './styled';\nimport {observer} from 'mobx-react';\nimport {ElementInstance, InstanceTreeNode} from './InstanceTreeNode';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {variablesStore} from 'modules/stores/variables';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {Skeleton} from './Skeleton';\nimport {diagramStore} from 'modules/stores/diagram';\n\ntype Props = {\n flowNodeInstances: Array<FlowNodeInstance>;\n};\n\nconst InstanceHistory: React.FC<Props> = observer(({flowNodeInstances}) => {\n const [containerHeight, setContainerHeight] = useState<number>(\n () => +(localStorage.getItem('play-bottom-bar-height') ?? 0) || 255,\n );\n const [isResizing, setIsResizing] = useState(false);\n const dragInfo = useRef<{originalSize?: number; dragStart: number}>();\n\n useEffect(() => {\n localStorage.setItem('play-bottom-bar-height', containerHeight.toString());\n }, [containerHeight]);\n\n const {processInstance, instanceKey} = processInstanceStore.state;\n\n const getRootNodes = useCallback(() => {\n if (processInstance === undefined) {\n return {rootNodes: [], keyMap: {}};\n }\n const keyMap: {\n [key: number]: ElementInstance;\n } = {};\n const rootNodes = [];\n\n const rootNodeEntry = {\n instance: {\n key: processInstance.key,\n flowNodeId:\n diagramStore.processName ??\n playEnvironmentStore.processId ??\n 'process',\n type: 'PROCESS',\n startDate: processInstance.startDate,\n endDate: processInstance.endDate ?? null,\n scopeKey: null,\n state:\n processInstance.state === 'CANCELED'\n ? 'TERMINATED'\n : processInstance.state,\n processDefinitionKey: processInstance.processDefinitionKey,\n incident: processInstance.incident,\n },\n childNodes: [],\n isSelected: flowNodeSelectionStore.isSelected({\n flowNodeInstanceId: instanceKey,\n flowNodeId: playEnvironmentStore.processId,\n }),\n } as ElementInstance;\n\n keyMap[processInstance.key] = rootNodeEntry;\n\n rootNodes.push(rootNodeEntry);\n for (let i = 0; i < flowNodeInstances.length; i++) {\n const instance = flowNodeInstances[i];\n\n const entry = {\n instance,\n childNodes: [],\n isSelected: flowNodeSelectionStore.isSelected({\n flowNodeInstanceId: instance.key,\n flowNodeId: instance.flowNodeId,\n isMultiInstance: instance.type === 'MULTI_INSTANCE_BODY',\n }),\n };\n\n keyMap[instance.key] = entry;\n if (\n instance.scopeKey !== null &&\n keyMap[instance.scopeKey] !== undefined\n ) {\n keyMap[instance.scopeKey].childNodes.push(entry);\n }\n }\n return {rootNodes, keyMap};\n }, [processInstance, flowNodeInstances, instanceKey]);\n\n const {keyMap, rootNodes} = getRootNodes();\n function startDragging(event: React.MouseEvent<HTMLDivElement>) {\n event.preventDefault();\n setIsResizing(true);\n\n const target = event.target as HTMLElement;\n const parentNode = target.parentNode as HTMLElement;\n\n dragInfo.current = {\n originalSize: parentNode.clientHeight,\n dragStart: event.pageY,\n };\n\n const updater = (event: MouseEvent) => {\n setContainerHeight(\n Math.max(\n 10,\n (dragInfo.current?.originalSize ?? 0) +\n (dragInfo.current?.dragStart ?? 0) -\n event.pageY,\n ),\n );\n };\n const cleanup = () => {\n setIsResizing(false);\n document.removeEventListener('mousemove', updater);\n document.removeEventListener('mouseup', cleanup);\n };\n document.addEventListener('mousemove', updater);\n document.addEventListener('mouseup', cleanup);\n }\n\n return (\n <Styled.Container style={{height: containerHeight + 'px'}}>\n <Styled.DragHandle $isResizing={isResizing} onMouseDown={startDragging} />\n <Styled.HistoryTree>\n <Styled.Header>Instance History</Styled.Header>\n {!elementInstancesStore.isInitialLoadComplete ? (\n <Skeleton />\n ) : (\n <Styled.TreeViewContainer data-testid=\"instance-history\">\n <TreeView hideLabel label=\"Instance History\">\n {rootNodes.map((rootNode) => (\n <InstanceTreeNode\n key={rootNode.instance.key}\n instance={rootNode.instance}\n childNodes={rootNode.childNodes}\n isSelected={rootNode.isSelected}\n />\n ))}\n </TreeView>\n </Styled.TreeViewContainer>\n )}\n </Styled.HistoryTree>\n <Variables\n isActive={\n variablesStore.scopeId === null\n ? false\n : keyMap[variablesStore.scopeId]?.instance.state === 'ACTIVE'\n }\n selectedScope={variablesStore.scopeId}\n />\n </Styled.Container>\n );\n});\n\nInstanceHistory.displayName = 'InstanceHistory';\nexport default InstanceHistory;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport const sanitizeName = (\n name: string | null = '',\n fallback = 'new-diagram',\n) => {\n const sanitized = name\n ?.normalize()\n // replace any non word characters (including non-latin characters), except underscore\n .replace(/[^_0-9\\p{Letter}\\p{Mark}]+/gu, '-')\n // replace consecutive dashes with a single one\n .replace(/-+/g, '-')\n // remove leading and trailing dashes\n .replace(/(^-|-$)/g, '')\n .toLowerCase();\n\n // If the diagram name is empty we provide a fallback filename.\n if (sanitized === '') {\n return fallback;\n }\n\n return sanitized;\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {sanitizeName} from 'modules/utils/sanitizeName';\n\nconst DELIMITER = '--';\n\nconst buildSlug = (id: string | null, name: string | null) => {\n return id + DELIMITER + sanitizeName(name);\n};\n\nexport {buildSlug};\n","import * as React from \"react\";\nconst SvgDropdown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 2, height: 10, viewBox: \"0 0 2 10\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1 2C1.55228 2 2 1.55228 2 1C2 0.447715 1.55228 0 1 0C0.447715 0 0 0.447715 0 1C0 1.55228 0.447715 2 1 2Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M1 6C1.55228 6 2 5.55228 2 5C2 4.44772 1.55228 4 1 4C0.447715 4 0 4.44772 0 5C0 5.55228 0.447715 6 1 6Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M1 10C1.55228 10 2 9.55228 2 9C2 8.44771 1.55228 8 1 8C0.447715 8 0 8.44771 0 9C0 9.55228 0.447715 10 1 10Z\", fill: \"white\" }));\nexport default SvgDropdown;\n","import * as React from \"react\";\nconst SvgEditForm = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.7685 5.87999L13.12 4.23149C12.9713 4.08325 12.7699 4 12.56 4C12.3501 4 12.1487 4.08325 12 4.23149L5 11.2337V14H7.7663L14.7685 6.99999C14.9167 6.85132 15 6.64994 15 6.43999C15 6.23004 14.9167 6.02866 14.7685 5.87999ZM7.3521 13H6V11.6479L10.7205 6.92744L12.0725 8.27954L7.3521 13ZM12.7795 7.57249L11.4275 6.22044L12.5611 5.08684L13.9132 6.43894L12.7795 7.57249Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"rect\", { x: 1, y: 2, width: 10, height: 1, fill: \"white\" }), /* @__PURE__ */ React.createElement(\"rect\", { x: 1, y: 5, width: 7, height: 1, fill: \"white\" }), /* @__PURE__ */ React.createElement(\"rect\", { x: 1, y: 8, width: 4, height: 1, fill: \"white\" }));\nexport default SvgEditForm;\n","import * as React from \"react\";\nconst SvgEnvelope = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"currentColor\", className: \"bi bi-envelope\", viewBox: \"0 0 16 16\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4Zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2Zm13 2.383-4.708 2.825L15 11.105V5.383Zm-.034 6.876-5.64-3.471L8 9.583l-1.326-.795-5.64 3.47A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.741ZM1 11.105l4.708-2.897L1 5.383v5.722Z\" }));\nexport default SvgEnvelope;\n","import * as React from \"react\";\nconst SvgSuccess = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 18 18\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { fill: \"#52C16B\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9 0C4.0374 0 0 4.0375 0 9c0 4.9627 4.0374 9 9 9s9-4.0373 9-9c0-4.9625-4.0374-9-9-9zm0 16.3636c-4.0604 0-7.3636-3.3032-7.3636-7.3635 0-4.0604 3.3032-7.3637 7.3636-7.3637S16.3636 4.9397 16.3636 9c0 4.0603-3.3033 7.3635-7.3636 7.3635z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M5.101 9.85C5.0337 9.78 5 9.675 5 9.605s.0337-.175.101-.245l.4711-.49c.1346-.14.3366-.14.4712 0l.0336.035 1.851 2.065c.0673.07.1683.07.2356 0l4.5096-4.865h.0336c.1346-.14.3366-.14.4712 0l.4711.49c.1347.14.1347.35 0 .49l-5.3846 5.81c-.0673.07-.1346.105-.2356.105s-.1682-.035-.2355-.105l-2.625-2.94-.0673-.105z\" })));\nexport default SvgSuccess;\n","import * as React from \"react\";\nconst SvgRewind = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 17, height: 16, viewBox: \"0 0 17 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_2557_56096)\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 16, height: 16, transform: \"translate(0.5)\", fill: \"transparent\" }), /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip1_2557_56096)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.69601 7.99995L15.5 4.63295V11.3669L9.69601 7.99995ZM8.90401 7.30395C8.78141 7.37414 8.67952 7.47547 8.60866 7.59769C8.5378 7.71991 8.50049 7.85868 8.50049 7.99995C8.50049 8.14122 8.5378 8.27999 8.60866 8.40221C8.67952 8.52442 8.78141 8.62576 8.90401 8.69595L15.267 12.3879C15.787 12.6899 16.5 12.3449 16.5 11.6919V4.30795C16.5 3.65495 15.787 3.30995 15.267 3.61195L8.90401 7.30395Z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.69601 7.99995L7.50001 4.63295V11.3669L1.69601 7.99995ZM0.904006 7.30395C0.781405 7.37414 0.679521 7.47547 0.608663 7.59769C0.537805 7.71991 0.500488 7.85868 0.500488 7.99995C0.500488 8.14122 0.537805 8.27999 0.608663 8.40221C0.679521 8.52442 0.781405 8.62576 0.904006 8.69595L7.26701 12.3879C7.78701 12.6899 8.50001 12.3449 8.50001 11.6919V4.30795C8.50001 3.65495 7.78701 3.30995 7.26701 3.61195L0.904006 7.30395Z\" }))), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_2557_56096\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 16, height: 16, fill: \"white\", transform: \"translate(0.5)\" })), /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip1_2557_56096\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 16, height: 16, fill: \"white\", transform: \"translate(0.5)\" }))));\nexport default SvgRewind;\n","import * as React from \"react\";\nconst SvgCamundaChampion = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 180, height: 180, viewBox: \"0 0 180 180\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M150.804 55.8922L150.494 49.0623H126.417C126.82 39.786 126.418 29.1415 126.418 29.1415H53.5819C53.5819 29.1415 53.1795 39.786 53.5831 49.0623H29.5059L29.1962 55.8922C29.1692 56.4865 28.6164 70.6236 35.6237 86.0315C41.7589 99.5223 54.8975 116.447 82.846 122.946V131.977H77.9039V138.148H53.4032V152.456H126.597V138.148H102.096V131.977H97.1541V122.946C125.102 116.447 138.241 99.5222 144.376 86.0315C151.384 70.6235 150.831 56.4865 150.804 55.8922ZM48.8725 80.5957C45.861 74.1454 44.5261 67.8866 43.9383 63.3704H54.7619C56.2251 75.2305 59.1824 88.702 65.0259 99.9776C58.0146 95.0724 52.6113 88.6029 48.8725 80.5957ZM101.322 104.518H79.4116V92.1394H101.322V104.518ZM101.331 73.5114C101.279 80.9953 97.5643 85.2491 90.3501 85.2491C83.1358 85.2491 79.4211 80.9929 79.4211 73.5658L79.4116 49.2818C79.4637 41.798 83.1784 37.5441 90.3926 37.5441C97.6069 37.5441 101.322 41.8004 101.322 49.2818V53.8029H94.3864V48.8089C94.3864 45.4702 92.8801 44.1791 90.5652 44.1791C88.2007 44.1247 86.7417 45.4158 86.7417 48.7545V73.9962C86.7417 77.3349 88.2503 78.5196 90.5652 78.5196C92.9298 78.5196 94.3864 77.3373 94.3864 73.9962V67.321H101.331V73.5114ZM131.352 80.1083C127.607 88.3417 122.128 94.9736 114.974 99.9781C120.817 88.7023 123.775 75.2307 125.238 63.3704H136.06C135.486 67.7767 134.203 73.8395 131.352 80.1083Z\", fill: \"#FC5D0D\" }));\nexport default SvgCamundaChampion;\n","import * as React from \"react\";\nconst SvgPlus = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fill: \"currentColor\", d: \"M13 5H11V11H5V13H11V19H13V13H19V11H13V5Z\" }));\nexport default SvgPlus;\n","import * as React from \"react\";\nconst SvgMinus = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M22.0833 10H1.9167c-.55 0-.9167.3667-.9167.9167V12.75c0 .55.3667.9167.9167.9167h20.1666c.55 0 .9167-.3667.9167-.9167v-1.8333c0-.55-.3667-.9167-.9167-.9167z\" }));\nexport default SvgMinus;\n","import * as React from \"react\";\nconst SvgTarget = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 15 15\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fill: \"currentColor\", d: \"M.531 8.031H1.697c.2461 2.798 2.487 5.026 5.272 5.2721v1.1658c0 .285.2332.5311.5311.5311.285 0 .531-.2332.531-.531V13.303c2.798-.2461 5.026-2.487 5.2721-5.272h1.1658c.285 0 .5311-.2332.5311-.5311 0-.285-.2332-.531-.531-.531H13.303c-.2461-2.798-2.487-5.026-5.272-5.2721V.531C8.031.246 7.7979 0 7.5 0c-.285 0-.531.2332-.531.531V1.697c-2.798.2461-5.026 2.487-5.2721 5.272H.531C.233 6.969 0 7.2021 0 7.5c0 .298.2461.531.531.531zm4.3654-1.062H2.759c.246-2.2151 2.0077-3.9768 4.2098-4.21v2.1374c0 .285.2332.531.5311.531.285 0 .531-.2331.531-.531V2.759c2.2151.246 3.9768 2.0077 4.21 4.2098h-2.1374c-.285 0-.531.2332-.531.5311 0 .285.2331.531.531.531h2.1373c-.246 2.2151-2.0077 3.9768-4.2098 4.21v-2.1374c0-.285-.2332-.531-.5311-.531-.285 0-.531.2331-.531.531v2.1373c-2.2151-.246-3.9768-2.0077-4.21-4.2098h2.1374c.285 0 .531-.2332.531-.5311 0-.285-.246-.531-.531-.531z\" }));\nexport default SvgTarget;\n","import * as React from \"react\";\nconst SvgMap = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 20 20\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M18.8557 1.5478a.3332.3332 0 0 0-.328-.009l-5.5162 2.9204-5.516-2.9204a.5482.5482 0 0 0-.0627-.0234c-.046-.0113-.0647-.0127-.0837-.0133-.0434 0-.061.0033-.0788.0073-.0213.0047-2.0354.6745-6.042 2.0096A.3334.3334 0 0 0 1 3.8356v14.3471a.334.334 0 0 0 .3337.3336.3279.3279 0 0 0 .1054-.0173l5.8876-1.9625 5.5577 2.2885c.0514.016.0887.025.127.025a.334.334 0 0 0 .0888-.013c.0407-.0154.0548-.019.0674-.0257l5.6721-3.0029a.334.334 0 0 0 .1775-.295V1.8338a.334.334 0 0 0-.1615-.286zM2.0598 4.6795l4.6633-1.5897v12.188l-4.6633 1.5898V4.6796zM7.783 3.0898l4.5573 2.6495v11.6583L7.783 15.2779V3.0898zm10.1744 11.9761l-4.5043 2.3317V5.7393l4.5043-2.6495v11.9761z\" }));\nexport default SvgMap;\n","import * as React from \"react\";\nconst SvgDisableFullscreen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 20 20\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { fill: \"currentColor\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.8434 11.358H1.7862a.7985.7985 0 1 0 0 1.5971h5.2587v5.2587a.7985.7985 0 1 0 1.597 0v-6.0572a.7985.7985 0 0 0-.7985-.7986zM18.2138 7.0449h-5.2586V1.7862a.7985.7985 0 1 0-1.5971 0v6.0572c0 .441.3575.7986.7985.7986h6.0572a.7985.7985 0 1 0 0-1.5971z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.7667.2333a.7965.7965 0 0 0-1.1265 0l-7.0489 7.0489a.7966.7966 0 0 0 1.1265 1.1265l7.049-7.049a.7966.7966 0 0 0 0-1.1264zM8.4087 11.5913a.7965.7965 0 0 0-1.1265 0l-7.0489 7.049a.7965.7965 0 1 0 1.1265 1.1264l7.0489-7.049a.7965.7965 0 0 0 0-1.1264z\" })));\nexport default SvgDisableFullscreen;\n","import * as React from \"react\";\nconst SvgEnableFullscreen = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 20 20\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { fill: \"currentColor\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.2015 0h-6.0573a.7985.7985 0 1 0 0 1.5971h5.2587v5.2587a.7985.7985 0 1 0 1.5971 0V.7985A.7985.7985 0 0 0 19.2015 0zM6.8558 18.4029H1.597v-5.2587a.7985.7985 0 1 0-1.5971 0v6.0573c0 .441.3575.7985.7985.7985h6.0573a.7985.7985 0 1 0 0-1.5971z\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.7667.2333a.7965.7965 0 0 0-1.1265 0l-7.0489 7.0489a.7966.7966 0 0 0 1.1265 1.1265l7.049-7.049a.7966.7966 0 0 0 0-1.1264zM8.4087 11.5913a.7965.7965 0 0 0-1.1265 0l-7.0489 7.049a.7965.7965 0 1 0 1.1265 1.1264l7.0489-7.049a.7965.7965 0 0 0 0-1.1264z\" })));\nexport default SvgEnableFullscreen;\n","import * as React from \"react\";\nconst SvgAiSparkle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 17, height: 15, viewBox: \"0 0 17 15\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M9.7219 5.2691C8.6668 4.2126 7.7435 2.4757 7.0638 1.00772C7.0445 1.00316 7.0206 1 6.9941 1C6.9675 1 6.9436 1.00316 6.9243 1.00773C6.2447 2.4757 5.322 4.2122 4.2662 5.2687C3.2106 6.325 1.47501 7.2485 0.00802994 7.9287C0.00328994 7.9483 0 7.9728 0 8C0 8.0271 0.00324982 8.0515 0.00793982 8.071C1.47467 8.751 3.2101 9.6743 4.2659 10.7311C5.322 11.7875 6.2448 13.5244 6.9245 14.9923C6.9437 14.9969 6.9675 15 6.994 15C7.0205 15 7.0444 14.9968 7.0636 14.9923C7.7433 13.5244 8.666 11.7877 9.7215 10.7315M9.7215 10.7315C10.773 9.6791 12.4531 8.7468 13.8721 8.0577C13.8756 8.0415 13.878 8.0217 13.878 7.9998C13.878 7.9779 13.8756 7.9582 13.8721 7.942C12.4537 7.2529 10.7734 6.3207 9.7219 5.2691\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15.4808 1.52468C15.104 1.14737 14.7742 0.52704 14.5315 0.00275993C14.5246 0.00112993 14.5161 0 14.5066 0C14.4971 0 14.4885 0.00112993 14.4817 0.00275993C14.2389 0.52705 13.9094 1.14721 13.5323 1.52455C13.1553 1.9018 12.5355 2.2316 12.0116 2.4745C12.0099 2.4815 12.0087 2.4903 12.0087 2.5C12.0087 2.5097 12.0099 2.5184 12.0115 2.5254C12.5354 2.7682 13.1552 3.098 13.5322 3.4754C13.9094 3.8527 14.239 4.473 14.4817 4.9972C14.4886 4.9989 14.4971 5 14.5066 5C14.516 5 14.5246 4.9989 14.5314 4.9972C14.7742 4.473 15.1037 3.8528 15.4806 3.4755M15.4806 3.4755C15.8562 3.0997 16.4562 2.7667 16.963 2.5206C16.9643 2.5148 16.9651 2.5078 16.9651 2.4999C16.9651 2.4921 16.9643 2.4851 16.963 2.4793C16.4565 2.2332 15.8563 1.90026 15.4808 1.52468\", fill: \"white\" }));\nexport default SvgAiSparkle;\n","import * as React from \"react\";\nconst SvgSignal = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 18, height: 16, viewBox: \"0 0 18 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1.18528 15.25L9 1.03773L16.8147 15.25H1.18528Z\", stroke: \"white\" }));\nexport default SvgSignal;\n","import * as React from \"react\";\nconst SvgModelerWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 32\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M16,2C8.3,2,2,8.3,2,16s6.3,14,14,14s14-6.3,14-14C30,8.3,23.7,2,16,2z M14.9,8h2.2v11h-2.2V8z M16,25 c-0.8,0-1.5-0.7-1.5-1.5S15.2,22,16,22c0.8,0,1.5,0.7,1.5,1.5S16.8,25,16,25z\", fill: \"currentColor\" }));\nexport default SvgModelerWarning;\n","import * as React from \"react\";\nconst SvgWebModelerWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 3H4v10h8V3Z\", fill: \"#000\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 1C4.15 1 1 4.15 1 8s3.15 7 7 7 7-3.15 7-7-3.15-7-7-7Zm-.55 3h1.1v5.5h-1.1V4ZM8 12.5c-.4 0-.75-.35-.75-.75S7.6 11 8 11s.75.35.75.75-.35.75-.75.75Z\", fill: \"#FF832B\" }));\nexport default SvgWebModelerWarning;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nimport {Success, WebModelerWarning} from 'modules/icons';\n\nexport const EmptyState = styled.div`\n height: 30px;\n margin: 5px 10px;\n`;\n\nexport const SuccessIcon = styled(Success)`\n width: 20px;\n vertical-align: middle;\n`;\n\nexport const EmptyStateMessage = styled.span`\n margin-left: 5px;\n vertical-align: middle;\n`;\n\nexport const WarningIcon = styled(WebModelerWarning)`\n margin-right: 16px;\n float: left;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {ModdleElement} from 'camunda-bpmn-js/lib/util/ExtensionElementsUtil';\nimport {getExtensionElements} from 'modules/utils/getExtensionElements';\n\nfunction extractSecrets(input: string) {\n let secretsMatch;\n const secrets = [];\n // below is a combination of two regexes, one for the new syntax and one for the old syntax\n // the original can be found here: https://github.com/camunda/connectors/blob/43cb0d1b19bd86c3441ef499d31bd87bd01c61c1/connector-runtime/connector-runtime-core/src/main/java/io/camunda/connector/runtime/core/secret/SecretUtil.java#L28\n const secretsRegex =\n /(\\{\\{\\s*secrets\\.(?<newSyntax>\\S+?\\s*)}})|(secrets\\.(?<oldSyntax>([a-zA-Z0-9]+[\\\\/._-])*[a-zA-Z0-9]+))/g;\n while ((secretsMatch = secretsRegex.exec(input)) !== null) {\n if (secretsMatch.groups?.newSyntax) {\n //we need to trim here as we will match the entire secret and that can contain whitespace at the end\n secrets.push(secretsMatch.groups.newSyntax.trim());\n } else if (secretsMatch.groups?.oldSyntax) {\n secrets.push(secretsMatch.groups.oldSyntax);\n }\n }\n return secrets;\n}\n\nexport function findConnectorElementsWithSecrets(\n connectorElements: Array<ElementLike>,\n) {\n const connectorElementsWithSecrets: Array<{\n element: ElementLike;\n secrets: Array<string>;\n }> = [];\n\n connectorElements.forEach((element) => {\n const inputParameters = getExtensionElements(\n element,\n 'zeebe:IoMapping',\n ).flatMap((moddleElement: ModdleElement) =>\n moddleElement.get('inputParameters'),\n );\n\n const properties = getExtensionElements(\n element,\n 'zeebe:Properties',\n ).flatMap((properties: ModdleElement) => properties.get('properties'));\n\n const ioMappingSecrets = inputParameters.flatMap(\n (inputParameter: ModdleElement) => {\n return extractSecrets(inputParameter?.source ?? '');\n },\n );\n\n const propertiesSecrets = properties.flatMap((property: ModdleElement) =>\n extractSecrets(property.value ?? ''),\n );\n\n const referencedSecrets = [...ioMappingSecrets, ...propertiesSecrets];\n\n if (referencedSecrets.length) {\n connectorElementsWithSecrets.push({\n element,\n secrets: [...new Set<string>(referencedSecrets)],\n });\n }\n });\n return connectorElementsWithSecrets;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {diagramStore} from './diagram';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {findConnectorElementsWithSecrets} from 'modules/utils/findConnectorElementsWithSecrets';\nimport {isConnectorElement} from 'modules/utils/flowNodes';\n\ntype Secret = {name: string; value: string};\n\ntype State = {\n status: 'initial' | 'loading' | 'ready';\n existingSecrets: Array<Secret>;\n connectorElements: Array<ElementLike>;\n connectorElementsWithSecrets: Array<{\n element: ElementLike;\n secrets: Array<string>;\n }>;\n};\n\nconst DEFAULT_STATE: State = {\n existingSecrets: [],\n connectorElements: [],\n connectorElementsWithSecrets: [],\n status: 'initial',\n};\n\nclass Connectors {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setupConnectors = async () => {\n if (this.state.status !== 'initial') {\n return;\n }\n\n this.startLoading();\n\n const connectorElements =\n diagramStore.elements?.filter((el) => {\n if (el.type === 'label') {\n return false;\n }\n return isConnectorElement(el);\n }) ?? [];\n\n const connectorElementsWithSecrets =\n findConnectorElementsWithSecrets(connectorElements);\n\n this.setConnectorElements(connectorElements);\n this.setConnectorElementsWithSecrets(connectorElementsWithSecrets);\n\n await this.getConnectorSecrets();\n this.finishLoading();\n };\n\n startLoading = () => {\n this.state.status = 'loading';\n };\n\n finishLoading = () => {\n this.state.status = 'ready';\n };\n\n get areConnectorsReady() {\n return this.state.status === 'ready';\n }\n\n setExistingSecrets = (existingSecrets: Array<Secret>) => {\n this.state.existingSecrets = existingSecrets;\n };\n\n setConnectorElements = (connectorElements: Array<ElementLike>) => {\n this.state.connectorElements = connectorElements;\n };\n\n setConnectorElementsWithSecrets = (\n connectorElementsWithSecrets: Array<{\n element: ElementLike;\n secrets: Array<string>;\n }>,\n ) => {\n this.state.connectorElementsWithSecrets = connectorElementsWithSecrets;\n };\n\n getConnectorSecrets = async () => {\n const {success, secrets} = await zeebePlayService.getConnectorSecrets();\n if (success) {\n this.setExistingSecrets(secrets);\n }\n };\n\n get connectorElementsWithMissingSecrets(): {\n element: ElementLike;\n missingSecrets: Array<string>;\n }[] {\n if (playEnvironmentStore.authType === 'sm') {\n return [];\n }\n\n const connectorElementsWithMissingSecrets: Array<{\n element: ElementLike;\n missingSecrets: Array<string>;\n }> = [];\n this.state.connectorElementsWithSecrets.forEach(({element, secrets}) => {\n const missingSecrets = secrets.filter(\n (secret) =>\n !this.state.existingSecrets.some(\n ({name, value}) => name === secret && value.trim() !== '',\n ),\n );\n\n if (missingSecrets.length > 0) {\n connectorElementsWithMissingSecrets.push({element, missingSecrets});\n }\n });\n\n return connectorElementsWithMissingSecrets;\n }\n\n get connectorProblems() {\n if (!this.areConnectorsReady) {\n return [];\n }\n\n return (\n this.connectorElementsWithMissingSecrets.flatMap(\n ({element, missingSecrets}) => {\n return missingSecrets.map((missingSecret) => {\n return {element, missingSecret};\n });\n },\n ) ?? []\n );\n }\n\n setConnectorSecret = async (name: string, value: string) => {\n const setConnectorSecretResponse =\n await zeebePlayService.setConnectorSecret({name, value});\n\n if (setConnectorSecretResponse?.success === false) {\n return false;\n }\n\n const newSecrets = [\n ...(this.state.existingSecrets?.filter(\n (secret) => secret.name !== name,\n ) ?? []),\n {name, value},\n ];\n\n this.setExistingSecrets(newSecrets);\n\n return true;\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const connectorsStore = new Connectors();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {makeAutoObservable} from 'mobx';\nimport {playEnvironmentStore} from './playEnvironment';\nimport {connectorsStore} from './connectors';\nimport {diagramStore} from './diagram';\n\nclass Problems {\n constructor() {\n makeAutoObservable(this);\n }\n\n get problemCount() {\n return (\n playEnvironmentStore.fileProblems.length +\n connectorsStore.connectorProblems.length +\n diagramStore.diagramProblemCount\n );\n }\n\n get hasProblems() {\n return (\n playEnvironmentStore.hasAuthorizationError ||\n playEnvironmentStore.hasDiagramError ||\n this.problemCount > 0\n );\n }\n}\n\nexport const problemsStore = new Problems();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Table,\n TableBody,\n TableHead,\n TableHeader,\n TableRow,\n TableCell,\n Link,\n} from '@carbon/react';\n\nimport {buildSlug} from 'modules/utils/buildSlug';\n\nimport * as Styled from './styled';\nimport {observer} from 'mobx-react';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {useEffect} from 'react';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {problemsStore} from 'modules/stores/problems';\n\nconst ErrorPanel: React.FC = observer(() => {\n const {fileProblems} = playEnvironmentStore;\n\n useEffect(() => {\n const handleVisibility = () => {\n if (document.visibilityState === 'hidden') {\n return;\n }\n connectorsStore.getConnectorSecrets();\n };\n window.addEventListener('visibilitychange', handleVisibility);\n\n return () => {\n window.removeEventListener('visibilitychange', handleVisibility);\n };\n }, []);\n\n const {elementsWithExecutionListeners} = diagramStore;\n\n if (!problemsStore.hasProblems) {\n return (\n <Styled.EmptyState>\n <Styled.SuccessIcon />\n <Styled.EmptyStateMessage>No problems found.</Styled.EmptyStateMessage>\n </Styled.EmptyState>\n );\n }\n\n return (\n <Table size=\"sm\">\n <TableHead>\n <TableRow>\n <TableHeader>Element Name</TableHeader>\n <TableHeader>Error Message</TableHeader>\n <TableHeader>File Name</TableHeader>\n <TableHeader>Actionable Solutions</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {fileProblems.map((problem) => (\n <TableRow key={problem.id + Math.random().toString()}>\n <TableCell>\n {(problem.status === 'unsupported binding' ||\n problem.status === 'not found' ||\n problem.status === 'deployment error') && (\n <Styled.WarningIcon />\n )}\n <b>\n {problem.elementBusinessObject.name ||\n problem.elementBusinessObject.id}\n </b>\n </TableCell>\n <TableCell>\n {problem.status === 'unsupported binding' &&\n 'Version tag binding is not supported in Play'}\n {problem.status === 'not found' && 'File not found'}\n {problem.status === 'deployment error' && 'Deployment error'}\n </TableCell>\n <TableCell>{problem.filename || problem.id}</TableCell>\n <TableCell>\n {problem.status === 'unsupported binding' && (\n <>\n Change the binding for the element.{' '}\n <Link\n href=\"https://docs.camunda.io/docs/components/best-practices/modeling/choosing-the-resource-binding-type/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n See how\n </Link>\n </>\n )}\n {problem.status === 'not found' && (\n <>\n Verify file path or check file permissions.{' '}\n <Link\n href={`https://docs.camunda.io/docs/components/modeler/web-modeler/advanced-modeling/${\n problem.type === 'decision'\n ? 'business-rule-task'\n : problem.type === 'form'\n ? 'form'\n : 'call-activity'\n }-linking/`}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n See how\n </Link>\n </>\n )}\n {problem.status === 'deployment error' && (\n <Link\n href={`/diagrams/${buildSlug(\n problem.fileId,\n problem.filename,\n )}`}\n target=\"_blank\"\n >\n Go to file and fix problems\n </Link>\n )}\n </TableCell>\n </TableRow>\n ))}\n\n {connectorsStore.connectorProblems.map((problem) => (\n <TableRow key={problem.element.id + problem.missingSecret}>\n <TableCell>\n <Styled.WarningIcon />\n <b>\n {problem.element.businessObject.name ||\n problem.element.businessObject.id}\n </b>\n </TableCell>\n <TableCell>{`Secret \"${problem.missingSecret}\" missing`}</TableCell>\n <TableCell>{'-'}</TableCell>\n <TableCell>\n <>\n <Link\n href={playEnvironmentStore.consoleSecretsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Update connector secret.\n </Link>\n {' Skip connector element. '}\n <Link\n href={\n 'https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#modify-a-process-instance'\n }\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n See how\n </Link>\n </>\n </TableCell>\n </TableRow>\n ))}\n\n {elementsWithExecutionListeners.map((element) => {\n return (\n <TableRow key={element.id + Math.random().toString()}>\n <TableCell>\n <Styled.WarningIcon />\n <b>\n {element.businessObject.name || element.businessObject.id}\n </b>\n </TableCell>\n <TableCell>{`Execution listeners are not suppported in Play. See actionable solution to resolve the issue.`}</TableCell>\n <TableCell>{'-'}</TableCell>\n <TableCell>\n <>\n {' Skip element. '}\n <Link\n href={\n 'https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#modify-a-process-instance'\n }\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n See how\n </Link>\n </>\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n );\n});\n\nErrorPanel.displayName = 'ErrorPanel';\nexport {ErrorPanel};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\nimport {\n TableCell as BaseTableCell,\n Stack,\n TableRow as BaseTableRow,\n} from '@carbon/react';\nimport {styles} from '@carbon/elements';\nimport {\n CheckmarkFilled as BaseCheckmarkFilled,\n ErrorFilled as BaseErrorFilled,\n} from '@carbon/icons-react';\n\nconst Container = styled(Stack)`\n ${styles.bodyCompact01};\n`;\n\nconst TableCell = styled(BaseTableCell)`\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n color: var(--cds-text-primary);\n`;\n\nconst Percentage = styled.span`\n font-weight: 700;\n margin-left: var(--cds-spacing-02);\n color: var(--cds-text-primary);\n`;\n\nconst CheckmarkFilled = styled(BaseCheckmarkFilled)`\n fill: var(--cds-support-success);\n`;\n\nconst ErrorFilled = styled(BaseErrorFilled)`\n fill: var(--cds-support-error);\n`;\n\ntype TableRowProps = {\n $isClickable?: boolean;\n};\n\nconst TableRow = styled(BaseTableRow)<TableRowProps>`\n ${({$isClickable}) => {\n return css`\n ${$isClickable && `cursor: pointer;`}\n `;\n }}\n`;\n\nconst ResolveActions = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport {\n Container,\n TableCell,\n Percentage,\n CheckmarkFilled,\n ErrorFilled,\n TableRow,\n ResolveActions,\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\nimport {Stack} from '@carbon/react';\n\nconst Container = styled(Stack)`\n ${styles.bodyCompact01};\n color: var(--cds-text-primary);\n padding: 0 var(--cds-spacing-05) var(--cds-spacing-04) var(--cds-spacing-05);\n`;\n\nexport {Container};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Stack} from '@carbon/react';\nimport {Percentage} from 'Definition/Scenarios/styled';\nimport {observer} from 'mobx-react';\nimport {DefinitionTooltip} from 'modules/components/DefinitionTooltip';\nimport {Link} from 'modules/components/DefinitionTooltip/Link';\nimport {scenariosStore} from 'modules/stores/scenarios';\n\nconst OverallCoverage: React.FC = observer(() => {\n return (\n <div>\n <DefinitionTooltip\n align=\"bottom-start\"\n definition={\n <Stack gap={3}>\n This percentage indicates how much of your process is covered with\n all of your saved scenarios.\n <Link\n href=\"https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenario-coverage\"\n target=\"_blank\"\n >\n Learn more\n </Link>\n </Stack>\n }\n openOnHover\n >\n Overall coverage:\n </DefinitionTooltip>\n <Percentage>{scenariosStore.currentTotalCoverage.toFixed(0)}%</Percentage>\n </div>\n );\n});\n\nOverallCoverage.displayName = 'OverallCoverage';\nexport {OverallCoverage};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\nimport {Stack, Button as BaseButton} from '@carbon/react';\n\nconst Container = styled(Stack)`\n ${styles.bodyCompact01};\n color: var(--cds-text-primary);\n padding: var(--cds-spacing-04) var(--cds-spacing-05);\n display: flex;\n align-items: center;\n height: 44px;\n`;\n\nconst Button = styled(BaseButton)`\n display: flex;\n align-items: center;\n padding-left: 0;\n`;\n\nexport {Container, Button};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Stack} from '@carbon/react';\n\nexport const TestScenarioNameBox = styled(Stack)`\n align-items: center;\n margin-left: auto;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nexport function generateTestScenarioFileLink({\n fileId,\n}: {\n fileId: string;\n}): string {\n const baseUri = `/test-scenarios/${encodeURIComponent(fileId)}`;\n\n // Extract the base path from current URL (everything before /diagrams/...)\n const currentPath = window.location.pathname;\n const diagramsIndex = currentPath.lastIndexOf('/diagrams/');\n\n if (diagramsIndex !== -1) {\n // Take everything before /diagrams/\n const basePath = currentPath.substring(0, diagramsIndex);\n return basePath + baseUri;\n }\n\n return baseUri;\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Link,\n Stack,\n Toggletip,\n ToggletipButton,\n ToggletipContent,\n} from '@carbon/react';\nimport {Link as LinkIcon} from '@carbon/icons-react';\nimport {observer} from 'mobx-react';\n\nimport {WebModelerWarning} from 'modules/icons';\nimport {scenariosStore} from 'modules/stores/scenarios';\n\nimport {TestScenarioNameBox} from './styled';\nimport {generateTestScenarioFileLink} from 'modules/utils/generate-test-scenario-file-link';\n\nexport const TestScenarioFileName = observer(() => {\n const {hasMultipleTestFilesLinked} = scenariosStore.state;\n\n if (scenariosStore.state.testScenarioFileMetadata === undefined) {\n return null;\n }\n\n return (\n <TestScenarioNameBox gap={4} orientation=\"horizontal\">\n {hasMultipleTestFilesLinked && (\n <Toggletip align=\"bottom-end\">\n <ToggletipButton>\n <WebModelerWarning />\n </ToggletipButton>\n <ToggletipContent>\n <Stack gap={3}>\n <div>This scenario has multiple test scenario files linked.</div>\n <div>\n Scenarios are shown from the file that comes first\n alphabetically.\n </div>\n <Link\n href=\"https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenarios\"\n target=\"_blank\"\n >\n Learn more about test scenario files\n </Link>\n </Stack>\n </ToggletipContent>\n </Toggletip>\n )}\n <Link\n href={generateTestScenarioFileLink({\n fileId: scenariosStore.state.testScenarioFileMetadata.id,\n })}\n target=\"_blank\"\n renderIcon={LinkIcon}\n >\n {scenariosStore.state.testScenarioFileMetadata.name}\n </Link>\n </TestScenarioNameBox>\n );\n});\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useState} from 'react';\nimport {OverallCoverage} from './OverallCoverage';\nimport {Container, Button} from './styled';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {PlayFilledAlt} from '@carbon/icons-react';\nimport {Loading, Stack} from '@carbon/react';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {observer} from 'mobx-react';\nimport trackingService from 'modules/services/TrackingService';\nimport {TestScenarioFileName} from './TestScenarioFileName';\n\nconst ScenarioTopBar: React.FC = observer(() => {\n const [areAllTestsRunning, setAreAllTestsRunning] = useState(false);\n const scenarios = scenariosStore.state.scenarios;\n const {processId} = playEnvironmentStore;\n\n if (processId === undefined) {\n return;\n }\n\n return (\n <Container gap={5} orientation=\"horizontal\">\n <OverallCoverage />\n {scenarios.length !== 0 && (\n <>\n {areAllTestsRunning ? (\n <Stack gap={3} orientation=\"horizontal\">\n <Loading withOverlay={false} small /> Running scenarios... This\n might take a while\n </Stack>\n ) : (\n <Button\n size=\"sm\"\n kind=\"ghost\"\n renderIcon={PlayFilledAlt}\n disabled={scenariosStore.isAnyScenarioRunning}\n onClick={async () => {\n setAreAllTestsRunning(true);\n trackingService.runScenarios(scenarios.length);\n\n await Promise.all(\n scenarios.map(async ({name, actions}) => {\n await scenariosStore.runSingleScenario({\n name,\n processId,\n actions,\n });\n }),\n );\n\n setAreAllTestsRunning(false);\n }}\n >\n Run all scenarios\n </Button>\n )}\n </>\n )}\n <TestScenarioFileName />\n </Container>\n );\n});\n\nexport {ScenarioTopBar};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Link} from '@carbon/react';\nimport {Container} from './styled';\nimport {ScenarioTopBar} from '../ScenarioTopBar';\nimport {DefinitionTooltip} from 'modules/components/DefinitionTooltip';\n\nconst EmptyState: React.FC = () => {\n return (\n <>\n <ScenarioTopBar />\n <Container gap={4}>\n <div>\n No{' '}\n <DefinitionTooltip\n align=\"bottom-start\"\n definition={\n <div>\n <div>\n A scenario is a saved process instance that can be used to\n replay and verify your path.\n </div>\n <div>\n Several combined scenarios can be used to verify the whole\n process.\n </div>\n </div>\n }\n openOnHover\n >\n scenarios\n </DefinitionTooltip>{' '}\n created yet.\n <div>\n Start to increase your coverage by saving completed process\n instances as scenarios.\n </div>\n </div>\n <Link\n href=\"https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#scenarios\"\n target=\"_blank\"\n >\n Learn more\n </Link>\n </Container>\n </>\n );\n};\n\nexport {EmptyState};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {SkeletonText as BaseSkeletonText} from '@carbon/react';\nimport styled from 'styled-components';\n\nconst Ul = styled.ul`\n overflow: hidden;\n position: absolute;\n width: 100%;\n height: 100%;\n`;\n\nconst Li = styled.li`\n margin: var(--cds-spacing-05);\n display: flex;\n gap: var(--cds-spacing-05);\n`;\n\nconst SkeletonText = styled(BaseSkeletonText)`\n margin: 0;\n`;\n\nexport {Ul, Li, SkeletonText};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Ul, Li, SkeletonText} from './styled';\n\nconst ScenarioRow: React.FC = () => {\n return (\n <Li>\n <SkeletonText width=\"40%\" />\n <SkeletonText width=\"30%\" />\n <SkeletonText width=\"30%\" />\n </Li>\n );\n};\n\nconst Skeleton: React.FC = () => {\n return (\n <Ul data-testid=\"scenarios-skeleton\">\n {[...Array(20)].map((_, index) => (\n <ScenarioRow key={index} />\n ))}\n </Ul>\n );\n};\n\nexport {Skeleton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\nimport {Stack} from '@carbon/react';\n\nconst Container = styled(Stack)`\n ${styles.bodyCompact01};\n color: var(--cds-text-primary);\n padding: var(--cds-spacing-07) var(--cds-spacing-05);\n`;\n\nconst Title = styled.div`\n ${styles.heading01};\n`;\n\nexport {Container, Title};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Button} from '@carbon/react';\nimport {Container, Title} from './styled';\nimport {SCENARIOS_LOAD_FAILURE} from 'modules/utils/constants';\n\ntype Props = {\n onReload: () => void;\n};\n\nconst ErrorState: React.FC<Props> = ({onReload}) => {\n return (\n <Container gap={5}>\n <div>\n <Title>{SCENARIOS_LOAD_FAILURE}</Title>\n <div>\n Make sure your test scenario file contains no errors and reload your\n scenarios by pressing the button below.\n </div>\n </div>\n <Button kind=\"tertiary\" size=\"sm\" onClick={onReload}>\n Reload\n </Button>\n </Container>\n );\n};\n\nexport {ErrorState};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Button,\n IconButton,\n Loading,\n Modal,\n Stack,\n Table,\n TableBody,\n TableHead,\n TableHeader,\n} from '@carbon/react';\nimport {observer} from 'mobx-react';\n\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {PlayFilledAlt, TrashCan} from '@carbon/icons-react';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {useEffect, useState} from 'react';\nimport {\n CheckmarkFilled,\n ErrorFilled,\n ResolveActions,\n TableCell,\n TableRow,\n} from './styled';\nimport {EmptyState} from './EmptyState';\nimport {Scenario} from 'modules/types';\nimport {ScenarioTopBar} from './ScenarioTopBar';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport trackingService from 'modules/services/TrackingService';\nimport {Skeleton} from './Skeleton';\nimport {ErrorState} from './ErrorState';\n\nconst Scenarios: React.FC = observer(() => {\n const [scenarioToDelete, setScenarioToDelete] = useState<Scenario | null>(\n null,\n );\n\n const {processId, canUserSaveExampleData: canUserSaveScenarios} =\n playEnvironmentStore;\n\n useEffect(() => {\n if (processId === undefined) {\n return;\n }\n\n scenariosStore.loadScenarios(processId);\n }, [processId]);\n\n const {scenarios, selectedScenario, status} = scenariosStore.state;\n\n if (['initial', 'fetching'].includes(status) || processId === undefined) {\n return <Skeleton />;\n }\n\n if (status === 'error') {\n return (\n <ErrorState onReload={() => scenariosStore.loadScenarios(processId)} />\n );\n }\n\n if (scenarios.length === 0) {\n return <EmptyState />;\n }\n\n return (\n <>\n <ScenarioTopBar />\n <Table size=\"sm\">\n <TableHead>\n <TableRow>\n <TableHeader>Scenario name</TableHeader>\n <TableHeader>Status</TableHeader>\n <TableHeader>Operations</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {scenarios?.map((scenario) => {\n const {key, name, actions} = scenario;\n const isSelected = selectedScenario?.name === name;\n const scenarioRun = scenariosStore.getScenarioRun(name);\n const scenarioRunStatus = scenarioRun?.status;\n\n return (\n <TableRow\n key={key}\n data-testid={key}\n $isClickable\n isSelected={isSelected}\n onClick={() => {\n if (isSelected) {\n scenariosStore.clearSelectedScenario();\n } else {\n scenariosStore.setSelectedScenario(scenario);\n }\n }}\n >\n <TableCell>{name}</TableCell>\n <TableCell>\n {scenarioRunStatus === 'Running' ? (\n <Stack orientation=\"horizontal\" gap={3}>\n <Loading withOverlay={false} small />{' '}\n <div>Running...</div>\n </Stack>\n ) : scenarioRunStatus === 'Completed' ? (\n <Stack orientation=\"horizontal\" gap={3}>\n <CheckmarkFilled /> <div>Completed</div>\n </Stack>\n ) : scenarioRunStatus === 'Failed' ? (\n <Stack orientation=\"horizontal\" gap={3}>\n <ErrorFilled /> <div>Failed</div>\n </Stack>\n ) : (\n '-'\n )}\n </TableCell>\n <TableCell>\n <Stack orientation=\"horizontal\">\n <IconButton\n label=\"Run scenario\"\n disabled={scenarioRunStatus === 'Running'}\n kind=\"ghost\"\n size=\"sm\"\n onClick={async (event) => {\n event.stopPropagation();\n trackingService.runScenarios(1);\n\n scenariosStore.runSingleScenario({\n name,\n processId,\n actions,\n });\n }}\n >\n <PlayFilledAlt />\n </IconButton>\n <IconButton\n label=\"Delete scenario\"\n disabled={scenarioRunStatus === 'Running'}\n kind=\"ghost\"\n size=\"sm\"\n onClick={(event) => {\n event.stopPropagation();\n setScenarioToDelete(scenario);\n }}\n >\n <TrashCan />\n </IconButton>\n {scenarioRunStatus === 'Completed' && (\n <Button\n kind=\"ghost\"\n size=\"sm\"\n onClick={() => {\n processInstanceStore.setInstanceDetails({\n instanceKey: scenarioRun?.instanceKey,\n instanceType: 'EXISTING_INSTANCE',\n });\n }}\n >\n View scenario\n </Button>\n )}\n {scenarioRunStatus === 'Failed' && (\n <ResolveActions>\n <Button\n kind=\"ghost\"\n size=\"sm\"\n onClick={() => {\n trackingService.runScenarios(1);\n\n scenariosStore.runSingleScenario({\n name,\n processId,\n actions,\n });\n }}\n >\n Retry\n </Button>{' '}\n or\n <Button\n kind=\"ghost\"\n size=\"sm\"\n onClick={() => {\n processInstanceStore.setInstanceDetails({\n instanceKey: scenarioRun?.instanceKey,\n instanceType: 'EXISTING_INSTANCE',\n });\n }}\n >\n {canUserSaveScenarios\n ? 'manually complete and update the scenario'\n : 'open the process instance'}\n </Button>\n </ResolveActions>\n )}\n </Stack>\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n <Modal\n open={scenarioToDelete !== null}\n preventCloseOnClickOutside\n size=\"sm\"\n modalHeading=\"Delete scenario\"\n danger\n primaryButtonText=\"Delete\"\n secondaryButtonText=\"Cancel\"\n primaryButtonDisabled={scenariosStore.state.isProcessing}\n onRequestClose={() => {\n setScenarioToDelete(null);\n }}\n onRequestSubmit={async () => {\n if (processId === undefined || scenarioToDelete === null) {\n return;\n }\n\n setScenarioToDelete(null);\n\n await scenariosStore.deleteScenario({\n processId,\n scenario: scenarioToDelete,\n });\n\n scenariosStore.loadScenarios(processId);\n }}\n >\n <div>{`Are you sure you want to delete '${scenarioToDelete?.name}' scenario? This action cannot be undone.`}</div>\n </Modal>\n </>\n );\n});\n\nScenarios.displayName = 'Scenarios';\nexport {Scenarios};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst formatStartTime = (startTime: string) => {\n try {\n return new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: 'numeric',\n hour12: true,\n }).format(new Date(startTime));\n } catch {\n return startTime;\n }\n};\n\nexport {formatStartTime};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\nimport {TableHeader as BaseTableHeader} from '@carbon/react';\nimport {Button} from 'modules/primitives';\n\nconst EmptyState = styled.div`\n padding: var(--cds-spacing-07);\n`;\n\nconst EmptyHeader = styled.div`\n color: var(--cds-text-primary);\n ${styles.heading03};\n margin-bottom: var(--cds-spacing-03);\n`;\n\nconst EmptyDescription = styled.div`\n color: var(--cds-text-secondary);\n ${styles.helperText02};\n font-weight: 400;\n`;\n\nconst IconContainer = styled.div`\n display: inline-block;\n margin-right: var(--cds-spacing-05);\n margin-top: -10px;\n transform: translateY(4px);\n`;\n\nconst InstanceButton = styled(Button)`\n color: var(--cds-link-primary);\n ${styles.body01};\n word-wrap: break-word;\n height: 20px;\n`;\n\nconst TableHeader = styled(BaseTableHeader)`\n width: 300px;\n`;\n\nexport {\n EmptyState,\n EmptyHeader,\n EmptyDescription,\n IconContainer,\n InstanceButton,\n TableHeader,\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {Table, TableBody, TableHead, TableRow, TableCell} from '@carbon/react';\nimport {StateIcon} from 'modules/components/StateIcon';\nimport {formatStartTime} from 'modules/utils/formatStartTime';\nimport {instancesStore} from 'modules/stores/instances';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {\n IconContainer,\n InstanceButton,\n EmptyState,\n EmptyHeader,\n EmptyDescription,\n TableHeader,\n} from './styled';\n\nconst Processes: React.FC = observer(() => {\n const instances = instancesStore.state.processInstances;\n\n if (instances.length === 0) {\n return (\n <EmptyState>\n <EmptyHeader>Start by activating a process instance</EmptyHeader>\n <EmptyDescription>\n To activate an instance, click the Play button on the canvas\n </EmptyDescription>\n </EmptyState>\n );\n }\n\n return (\n <Table size=\"sm\">\n <TableHead>\n <TableRow>\n <TableHeader>Instance Key</TableHeader>\n <TableHeader>Started at</TableHeader>\n <TableHeader>Operations</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {instances?.map(({key, startDate, state, incident}) => {\n return (\n <TableRow key={key}>\n <TableCell>\n <IconContainer>\n <StateIcon state={incident ? 'INCIDENT' : state} size={20} />\n </IconContainer>\n <InstanceButton\n variant=\"text\"\n onClick={() => {\n processInstanceStore.setInstanceDetails({\n instanceKey: key,\n instanceType: 'EXISTING_INSTANCE',\n });\n }}\n >\n {key}\n </InstanceButton>\n </TableCell>\n <TableCell>{formatStartTime(startDate)}</TableCell>\n <TableCell>-</TableCell>\n </TableRow>\n );\n }) ?? (\n <TableRow>\n <TableCell>No Content</TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n );\n});\n\nProcesses.displayName = 'Processes';\nexport {Processes};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useContext, useEffect} from 'react';\nimport {observer} from 'mobx-react';\n\nimport PlayContext from 'modules/PlayContext';\n\nimport {Title, Tab, StatusText, ErrorCounterTag, Content} from './styled';\n\nimport InstanceHistory from 'Instance/InstanceHistory';\nimport {ErrorPanel} from 'Definition/ErrorPanel';\nimport {Scenarios} from 'Definition/Scenarios';\nimport {Processes} from 'Definition/Processes';\n\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\nimport {problemsStore} from 'modules/stores/problems';\n\nconst BottomBar: React.FC = observer(() => {\n const context = useContext(PlayContext);\n const {activeTab} = bottomBarStore.state;\n\n const isScenariosTabVisible = context.featureFlags.isReplayScenariosEnabled;\n\n const {problemCount} = problemsStore;\n\n useEffect(() => {\n if (problemCount > 0) {\n bottomBarStore.setActiveTab('problems');\n }\n }, [problemCount]);\n\n const {instanceKey} = processInstanceStore.state;\n\n const flowNodeInstances =\n elementInstancesStore.state.elementInstances?.filter(\n (instance) => instance.type !== 'SEQUENCE_FLOW',\n );\n\n if (instanceKey)\n return <InstanceHistory flowNodeInstances={flowNodeInstances} />;\n\n return (\n <div>\n <Title>\n {isScenariosTabVisible && (\n <Tab\n $isActive={activeTab === 'scenarios'}\n onClick={() => bottomBarStore.setActiveTab('scenarios')}\n >\n <StatusText>Scenarios</StatusText>\n </Tab>\n )}\n <Tab\n $isActive={activeTab === 'instances'}\n onClick={() => bottomBarStore.setActiveTab('instances')}\n >\n <StatusText>Process Instances</StatusText>\n </Tab>\n <Tab\n $isActive={activeTab === 'problems'}\n onClick={() => bottomBarStore.setActiveTab('problems')}\n >\n <StatusText>\n Problems{' '}\n {problemCount > 0 && (\n <ErrorCounterTag\n type=\"gray\"\n title={problemCount.toString()}\n size=\"sm\"\n >\n {problemCount.toString()}\n </ErrorCounterTag>\n )}\n </StatusText>\n </Tab>\n </Title>\n <Content>\n {activeTab === 'instances' && <Processes />}\n {activeTab === 'problems' && <ErrorPanel />}\n {isScenariosTabVisible && activeTab === 'scenarios' && <Scenarios />}\n </Content>\n </div>\n );\n});\n\nBottomBar.displayName = 'BottomBar';\nexport {BottomBar};\n","export default \"data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAG1wNDJpc28yYXZjMW1wNDEAAB3obW9vdgAAAGxtdmhkAAAAAOGdo77hnaO+AAAD6AAARMwAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAHQV0cmFrAAAAXHRraGQAAAAD4Z2jvuGdo74AAAABAAAAAAAARMwAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAABMAAAAH6AAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAETMAAAdMgABAAAAABx9bWRpYQAAACBtZGhkAAAAAOGdo77hnaO+AAFfkAAYL2pVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAAcKG1pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAG+hzdGJsAAAA0nN0c2QAAAAAAAAAAQAAAMJhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABMAB+gBIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAANWF2Y0MBTUAo/+EAHWdNQCjsoCYCD8mAtQEBAaUAAAMAAQACvyAPGDGWAQAFaOrhMsgAAAATY29scm5jbHgAAQABAAEAAAAAEHBhc3AAAAABAAAAAQAAABRidHJ0AAAAAAABdsQAAXbEAAAAeHN0dHMAAAAAAAAADQAAAAEAAAu4AAAAAQAAEXoAAAABAAALuAAAAAEAABF6AAAACQAAC7gAAAABAAARKwAAABgAAAu4AAAAAQAAEJMAAAAGAAALuAAAAAEAABFJAAAAAwAAC7gAAAABAAARcQAAAdwAAAu4AAAAGHN0c3MAAAAAAAAAAgAAAAEAAAEtAAACGnNkdHAAAAAAIBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgQEBAQGBgQEBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQGBAQEBAYEBAYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYEBAQGBgQGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQEBAYEBgQGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAYIBAQGBgQEBgYEBAQEBAQEBAQEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBgQEBAYGBAQGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAYEBAYEBAYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQEBgYEBAYGBAQGBgQGAAAD+hjdHRzAAAAAAAAAfsAAAABAAAdMgAAAAEAAEYcAAAAAQAAHTIAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAABACwAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAEALAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAD9zAAAAAQAAHEsAAAABAAAAAAAAAAEAAAu4AAAAAQAALuAAAAACAAALuAAAAAIAAB0BAAAAAQAAQFEAAAABAAAXcAAAAAEAAAAAAAAAAQAAEXEAAAABAAAu4AAAAAIAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAIygAAAABAAALuAAAAAIAABdwAAAAAQAALuAAAAACAAALuAAAAAEAAC7gAAAAAgAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAAXcAAAAAEAACMoAAAAAQAAC7gAAAABAAAXcAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAIygAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAIAABdwAAAAAQAALuAAAAACAAALuAAAAAEAACMoAAAAAQAAC7gAAAABAAAjKAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAIygAAAABAAALuAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAkAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAIygAAAABAAALuAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAAu4AAAAAIAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAIygAAAABAAALuAAAAAEAAC7gAAAAAgAAC7gAAAABAAAu4AAAAAIAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAACMoAAAA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\"","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Button, Stack} from '@carbon/react';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n background-color: rgba(22, 22, 22, 0.5);\n z-index: 1;\n`;\n\nexport const ErrorContainer = styled(Stack)`\n background-color: #f4f4f4;\n width: 100%;\n padding: 88px;\n`;\n\nexport const ErrorTitle = styled.h4`\n color: var(--cds-text-secondary, #161616);\n\n /* Fixed heading styles/heading-03 */\n font-family: IBM Plex Sans;\n font-size: 20px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 28px !important; /* 140% */\n`;\n\nexport const ErrorDescription = styled.div`\n color: var(--cds-text-secondary, #525252);\n\n /* Fixed Body styles/body-01 */\n font-family: IBM Plex Sans;\n font-size: 14px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 20px !important; /* 142.857% */\n letter-spacing: 0.16px !important;\n`;\n\nexport const Modal = styled.div`\n background-color: white;\n width: 640px;\n margin: 100px auto;\n`;\n\nexport const ModalBody = styled.div`\n padding: 16px;\n`;\n\nexport const ModalFooter = styled.div`\n text-align: right;\n`;\n\nexport const ModalButton = styled(Button)`\n width: 320px;\n`;\n\nexport const ImageContainer = styled.div`\n background: #f6f8f5;\n height: 253px;\n display: flex;\n padding-top: 16px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 10px;\n align-self: stretch;\n\n color: #000;\n\n text-align: center;\n /* Body styles/body-02 */\n font-family: IBM Plex Sans;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 24px; /* 150% */\n\n margin-bottom: 8px;\n`;\n\nexport const Video = styled.video`\n width: 100%;\n height: 100%;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nfunction getLoadingState({\n isInitial,\n isDeployingFiles,\n hasAuthorizationError,\n hasDiagramError,\n hasProblems,\n areConnectorsReady,\n}: {\n isInitial: boolean;\n isDeployingFiles: boolean;\n hasAuthorizationError: boolean;\n hasDiagramError: boolean;\n hasProblems: boolean;\n areConnectorsReady: boolean;\n}): {\n helperText: string;\n status: 'active' | 'error' | 'finished';\n label: 'In progress' | 'Failed' | 'Completed';\n value: number;\n} {\n if (hasAuthorizationError) {\n return {\n helperText:\n 'Missing permissions to deploy the process. Please check the Output tab in the Implement mode for more details.',\n status: 'error',\n label: 'Failed',\n value: 100,\n };\n }\n\n if (hasDiagramError || hasProblems) {\n return {\n helperText: hasDiagramError\n ? 'The diagram failed to deploy.\\nPlease check the Output tab in the Implement mode for more details.'\n : 'Some parts of your process will not work. Please check the problems tab for actionable solutions.',\n status: 'error',\n label: 'Failed',\n value: 100,\n };\n }\n\n if (isInitial) {\n return {\n helperText: 'Preparing Play environment...',\n status: 'active',\n label: 'In progress',\n value: 30,\n };\n }\n\n if (isDeployingFiles || !areConnectorsReady) {\n return {\n helperText: isDeployingFiles\n ? 'Auto-deploying supporting files...'\n : 'Loading connectors...',\n status: 'active',\n label: 'In progress',\n value: 60,\n };\n }\n\n return {\n helperText: 'Play environment is ready',\n status: 'finished',\n label: 'Completed',\n value: 100,\n };\n}\n\nexport {getLoadingState};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Layer, ProgressBar} from '@carbon/react';\nimport {useEffect, useRef} from 'react';\nimport PlayIntro from './play-intro.mp4';\n\nimport * as Styled from './styled';\n\nimport {diagramStore} from 'modules/stores/diagram';\nimport {observer} from 'mobx-react';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {getLoadingState} from './getLoadingState';\nimport {AuthConfig} from 'modules/types';\nimport {problemsStore} from 'modules/stores/problems';\n\ntype Props = {\n authConfig: AuthConfig;\n switchToImplementMode?: (shouldOpenOutputTab?: boolean) => void;\n close: () => void;\n};\n\nconst StartModal: React.FC<Props> = observer(\n ({authConfig, close, switchToImplementMode}) => {\n const authType = authConfig?.type;\n const clusterId =\n authType === 'saas' ? authConfig.config.clusterId : undefined;\n\n const videoRef = useRef<HTMLVideoElement>(null);\n const {\n state: {status, isRedeployment},\n } = playEnvironmentStore;\n\n const {areConnectorsReady} = connectorsStore;\n\n const hasProblems = problemsStore.hasProblems;\n\n const isPlayEnvironmentReady =\n playEnvironmentStore.isEnvironmentCreated && areConnectorsReady;\n\n const {isLoaded: isDiagramLoaded} = diagramStore.state;\n\n useEffect(() => {\n if (!isDiagramLoaded) return;\n connectorsStore.setupConnectors();\n }, [isDiagramLoaded]);\n\n useEffect(() => {\n if (\n (authType === 'saas' && !clusterId) ||\n !isDiagramLoaded ||\n status !== 'initial'\n )\n return;\n\n playEnvironmentStore.setupEnvironment();\n }, [isDiagramLoaded, clusterId, status, authType]);\n\n useEffect(() => {\n if (isRedeployment && isPlayEnvironmentReady && !hasProblems) {\n close?.();\n }\n }, [isRedeployment, isPlayEnvironmentReady, hasProblems, close]);\n\n const {\n helperText,\n status: loadingStatus,\n label,\n value,\n } = getLoadingState({\n isInitial: status === 'initial',\n isDeployingFiles: status === 'deploying-files',\n hasAuthorizationError: playEnvironmentStore.hasAuthorizationError,\n hasDiagramError: playEnvironmentStore.hasDiagramError,\n hasProblems,\n areConnectorsReady,\n });\n\n return (\n <Styled.Container>\n <Styled.Modal>\n <Styled.ModalBody>\n <Styled.Video\n ref={videoRef}\n autoPlay\n onEnded={() => {\n // Restart the video when it ends\n\n if (videoRef.current === null) {\n return;\n }\n\n videoRef.current.currentTime = 0;\n videoRef.current.play();\n }}\n >\n <source src={PlayIntro} type=\"video/mp4\" />\n </Styled.Video>\n <Layer>\n <ProgressBar\n label={label}\n helperText={helperText}\n value={value}\n status={loadingStatus}\n />\n </Layer>\n </Styled.ModalBody>\n <Styled.ModalFooter>\n <>\n {(() => {\n if (!isPlayEnvironmentReady) {\n return;\n }\n\n if (\n playEnvironmentStore.hasDiagramError ||\n playEnvironmentStore.hasAuthorizationError\n ) {\n return (\n <>\n {playEnvironmentStore.hasAuthorizationError && (\n <Styled.ModalButton\n kind=\"ghost\"\n size=\"xl\"\n onClick={() => {\n window.open(\n 'https://docs.camunda.io/docs/next/components/modeler/web-modeler/play-your-process/#authorizations',\n '_blank',\n );\n }}\n >\n Learn more about permissions\n </Styled.ModalButton>\n )}\n <Styled.ModalButton\n size=\"xl\"\n onClick={() => switchToImplementMode?.(true)}\n >\n View errors in Implement mode\n </Styled.ModalButton>\n </>\n );\n }\n\n if (hasProblems) {\n return (\n <Styled.ModalButton size=\"xl\" onClick={close}>\n View problems\n </Styled.ModalButton>\n );\n }\n\n if (!isRedeployment) {\n return (\n <Styled.ModalButton size=\"xl\" onClick={close}>\n Start a process instance\n </Styled.ModalButton>\n );\n }\n })()}\n </>\n </Styled.ModalFooter>\n </Styled.Modal>\n </Styled.Container>\n );\n },\n);\n\nStartModal.displayName = 'StartModal';\nexport {StartModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst bpmnRendererColors = {\n outline: {\n fill: 'var(--cds-highlight, #d0e2ff)',\n },\n defaultFillColor: 'var(--cds-layer-01, #fff)',\n defaultStrokeColor: 'var(--cds-icon-secondary, #525252)',\n element: {\n text: 'var(--cds-text-primary, #161616)',\n background: {\n default: 'var(--cds-layer-01, #fff)',\n },\n },\n};\n\nexport {bpmnRendererColors};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {isFlowNode} from 'modules/utils/flowNodes';\n\nfunction isNonSelectableFlowNode(\n bpmnElement: ElementLike,\n selectableFlowNodes?: string[],\n) {\n return (\n selectableFlowNodes !== undefined &&\n !selectableFlowNodes.includes(bpmnElement.businessObject.id) &&\n bpmnElement.type !== 'label' &&\n isFlowNode(bpmnElement.businessObject)\n );\n}\n\nexport {isNonSelectableFlowNode};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport ElementTemplatesIconsRenderer from '@bpmn-io/element-template-icon-renderer';\nimport NavigatedViewer from 'camunda-bpmn-js/lib/camunda-cloud/NavigatedViewer.js';\n\nimport {bpmnRendererColors} from './styled';\nimport gridModule from 'diagram-js-grid';\nimport minimapModule from 'diagram-js-minimap';\nimport {diagramStore} from 'modules/stores/diagram';\nimport ElementRegistry, {\n ElementLike,\n} from 'diagram-js/lib/core/ElementRegistry';\nimport GraphicsFactory from 'diagram-js/lib/core/GraphicsFactory';\nimport {isEqual} from 'lodash-es';\nimport {isNonSelectableFlowNode} from 'modules/utils/isNonSelectableFlowNode';\nimport {isMultiInstance} from 'modules/utils/isMultiInstance';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {HighContrastCanvasModule} from '@camunda/improved-canvas';\nimport {SaveXMLResult} from 'bpmn-js/lib/BaseViewer';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport OutlineModule from 'bpmn-js/lib/features/outline/index.js';\n\ntype NavigatedViewerType = NavigatedViewer & {\n get(module: 'canvas'): {\n removeMarker(elementId: ElementLike['id'], className: string): void;\n addMarker(elementId: ElementLike['id'], className: string): void;\n resized(): void;\n zoom(\n newScale: number | 'fit-viewport',\n center: 'auto' | {x: number; y: number} | ElementLike | null,\n ): void;\n scrollToElement(element: ElementLike): void;\n };\n get(module: 'elementRegistry'): {\n get(elementId: ElementLike['id']): ElementLike;\n filter(callback: (element: ElementLike) => boolean): ElementLike[];\n };\n get(module: 'overlays'): {\n add(\n elementId: ElementLike['id'],\n type: string,\n overlay: {\n html: HTMLElement;\n position: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n };\n scale?: {min: number; max: number};\n },\n ): void;\n clear(): void;\n remove({element, type}: {element: ElementLike; type: string}): void;\n };\n get(module: 'zoomScroll'): {\n stepZoom(step: number): void;\n reset(): void;\n };\n get(module: 'minimap'): {\n toggle(): void;\n };\n get(module: 'selection'): {\n select(element: ElementLike): void;\n };\n};\n\nconst MODIFICATION_NOT_SUPPORTED =\n 'Modification is not supported for this flow node.';\n\ntype RenderOptions = {\n container: HTMLElement;\n xml: string;\n selectableFlowNodeIds: string[];\n selectedFlowNodeIds?: string[];\n showModificationNotSupportedTooltip?: boolean;\n};\n\nclass BpmnJS {\n protected navigatedViewer: NavigatedViewerType | null = null;\n #xml: string | null = null;\n selectedFlowNode?: SVGElement;\n #selectableFlowNodeIds: string[] = [];\n #selectedFlowNodeIds?: string[];\n #nonSelectableFlowNodeIds: string[] = [];\n\n import = async (xml: string) => {\n // Cleanup before importing\n this.navigatedViewer!.off('element.click', this.#handleElementClick);\n this.#selectableFlowNodeIds = [];\n this.#selectedFlowNodeIds = undefined;\n\n await this.navigatedViewer!.importXML(xml);\n\n // Initialize after importing\n this.navigatedViewer!.on('element.click', this.#handleElementClick);\n };\n\n render = async (options: RenderOptions) => {\n const {container, xml, selectableFlowNodeIds, selectedFlowNodeIds} =\n options;\n\n if (this.navigatedViewer === null) {\n this.#createViewer(container);\n }\n\n if (this.#xml !== xml) {\n this.#xml = xml;\n await this.import(xml);\n }\n\n if (!isEqual(this.#selectableFlowNodeIds, selectableFlowNodeIds)) {\n // handle play-selectable markers\n this.#selectableFlowNodeIds.forEach((flowNodeId) => {\n this.removeMarker(flowNodeId, 'play-selectable');\n });\n selectableFlowNodeIds.forEach((flowNodeId) => {\n this.addMarker(flowNodeId, 'play-selectable');\n });\n this.#selectableFlowNodeIds = selectableFlowNodeIds;\n\n // handle play-non-selectable markers\n const elementRegistry = this.getElementRegistry();\n this.#nonSelectableFlowNodeIds.forEach((flowNodeId) => {\n this.removeMarker(flowNodeId, 'play-non-selectable');\n this.#removeTooltip(flowNodeId);\n });\n\n const nonSelectableFlowNodes = elementRegistry?.filter((element) =>\n isNonSelectableFlowNode(element, selectableFlowNodeIds),\n );\n\n nonSelectableFlowNodes?.forEach(({id}) => {\n this.addMarker(id, 'play-non-selectable');\n if (options.showModificationNotSupportedTooltip) {\n this.#addTooltip(id, MODIFICATION_NOT_SUPPORTED);\n }\n });\n\n this.#nonSelectableFlowNodeIds = nonSelectableFlowNodes\n ? nonSelectableFlowNodes.map(({id}) => id)\n : [];\n }\n\n // handle play-selected markers and selected flow node ref\n if (\n !isEqual(this.#selectedFlowNodeIds?.sort(), selectedFlowNodeIds?.sort())\n ) {\n if (this.#selectedFlowNodeIds !== undefined) {\n this.#selectedFlowNodeIds.forEach((flowNodeId) => {\n this.removeMarker(flowNodeId, 'play-selected');\n this.removeMarker(flowNodeId, 'play-selected-frame');\n });\n\n this.selectedFlowNode = undefined;\n }\n\n const elementRegistry = this.getElementRegistry();\n\n if (selectedFlowNodeIds !== undefined) {\n selectedFlowNodeIds.forEach((flowNodeId) => {\n this.addMarker(flowNodeId, 'play-selected');\n this.addMarker(flowNodeId, 'play-selected-frame');\n\n this.selectedFlowNode = elementRegistry?.getGraphics(flowNodeId);\n });\n }\n\n this.#selectedFlowNodeIds = selectedFlowNodeIds;\n }\n };\n\n addMarker = (elementId: string, className: string) => {\n const canvas = this.navigatedViewer?.get('canvas');\n const elementRegistry = this.getElementRegistry();\n\n if (elementRegistry?.get(elementId) !== undefined) {\n canvas?.addMarker(elementId, className);\n }\n };\n\n #addTooltip = (flowNodeId: string, tooltipText: string) => {\n const titleElement = document.querySelector(\n `[data-element-id=\"${flowNodeId}\"] title`,\n );\n\n if (titleElement === null) {\n const tooltip = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'title',\n );\n\n tooltip.textContent = tooltipText;\n document\n .querySelector(`[data-element-id=\"${flowNodeId}\"]`)\n ?.appendChild(tooltip);\n }\n };\n\n #removeTooltip = (flowNodeId: string) => {\n const titleElement = document.querySelector(\n `[data-element-id=\"${flowNodeId}\"] title`,\n );\n if (titleElement !== null) {\n document\n .querySelector(`[data-element-id=\"${flowNodeId}\"]`)\n ?.removeChild(titleElement);\n }\n };\n\n removeMarker = (elementId: string, className: string) => {\n const canvas = this.navigatedViewer?.get('canvas');\n const elementRegistry = this.getElementRegistry();\n\n if (elementRegistry?.get(elementId) !== undefined) {\n canvas?.removeMarker(elementId, className);\n }\n };\n\n #handleElementClick = (event: {element: ElementLike; gfx: SVGElement}) => {\n const flowNode = event.element;\n if (\n isNonSelectableFlowNode(flowNode, this.#selectableFlowNodeIds) ||\n this.#selectableFlowNodeIds.length === 0\n ) {\n return;\n }\n\n if (\n this.#selectableFlowNodeIds.includes(flowNode.id) &&\n (this.#selectedFlowNodeIds === undefined ||\n !this.#selectedFlowNodeIds.includes(flowNode.id))\n ) {\n if (modificationsStore.isMovingToken) {\n flowNodeSelectionStore.clearSelection();\n modificationsStore.moveToken(\n flowNode.id,\n flowNode.businessObject?.name ?? flowNode.id,\n );\n return;\n } else {\n flowNodeSelectionStore.selectFlowNode({\n flowNodeId: flowNode.id,\n flowNodeName: flowNode.businessObject.name ?? flowNode.id,\n isMultiInstance: isMultiInstance(flowNode.businessObject),\n });\n }\n } else if (this.#selectedFlowNodeIds !== undefined) {\n flowNodeSelectionStore.clearSelection();\n }\n };\n\n #removeOverlay = (type: string, element: ElementLike) => {\n this.navigatedViewer?.get('overlays')?.remove({type, element});\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addOverlay = (element: ElementLike, type: string, position: any) => {\n this.#removeOverlay(type, element);\n\n const node = document.createElement('div');\n\n this.navigatedViewer?.get('overlays')?.add(element.id, type, {\n html: node,\n position: position,\n });\n\n return node;\n };\n\n #createViewer = (container: HTMLElement) => {\n this.#destroy();\n this.navigatedViewer = new NavigatedViewer({\n container,\n bpmnRenderer: bpmnRendererColors,\n additionalModules: [\n ElementTemplatesIconsRenderer,\n gridModule,\n minimapModule,\n HighContrastCanvasModule,\n OutlineModule,\n ],\n });\n };\n zoom = (step: number) => {\n this.navigatedViewer?.get('zoomScroll')?.stepZoom(step);\n };\n\n zoomIn = () => {\n this.zoom(0.1);\n };\n\n zoomOut = () => {\n this.zoom(-0.1);\n };\n\n toggleMinimap = () => {\n diagramStore.toggleMinimap();\n this.navigatedViewer?.get('minimap').toggle();\n };\n\n zoomReset = () => {\n const canvas = this.navigatedViewer?.get('canvas');\n\n if (canvas !== undefined && canvas !== null) {\n canvas.resized();\n canvas.zoom('fit-viewport', 'auto');\n }\n };\n\n #destroy = () => {\n this.navigatedViewer?.destroy();\n };\n\n getElementRegistry = () => {\n return this.navigatedViewer?.get<ElementRegistry>('elementRegistry');\n };\n\n getGraphicsFactory = () => {\n return this.navigatedViewer?.get<GraphicsFactory>('graphicsFactory');\n };\n\n getDefinitions = () => {\n return this.navigatedViewer?.getDefinitions();\n };\n\n focusOnElement = (elementId: string) => {\n if (this.navigatedViewer === null) {\n return;\n }\n\n this.navigatedViewer.get('zoomScroll').reset();\n\n const element = this.navigatedViewer\n .get<ElementRegistry>('elementRegistry')\n .get(elementId);\n\n if (element === undefined) {\n return;\n }\n\n this.navigatedViewer.get('canvas').scrollToElement(element);\n\n flowNodeSelectionStore.selectFlowNode({\n flowNodeId: element.id,\n flowNodeName: element.businessObject?.name ?? element.id,\n isMultiInstance: isMultiInstance(element.businessObject),\n });\n };\n\n saveXML = async (): Promise<SaveXMLResult | undefined> => {\n return this.navigatedViewer?.saveXML({format: true});\n };\n\n reset = () => {\n this.#destroy();\n };\n}\n\nexport {BpmnJS};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled, {css} from 'styled-components';\n\nconst Diagram = styled.div`\n width: 100%;\n position: relative;\n background-color: white;\n display: flex;\n flex: 1;\n`;\n\ntype DiagramCanvasProps = {\n $isSelectionAllowed: boolean;\n};\n\nconst DiagramCanvas = styled.div<DiagramCanvasProps>`\n ${({$isSelectionAllowed}) => {\n return css`\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n .play-sequence-flow-taken .djs-visual path {\n stroke: var(--cds-background-brand) !important;\n }\n .play-sequence-flow-taken marker path {\n fill: var(--cds-background-brand) !important;\n }\n .play-flow-node-taken polygon,\n .play-flow-node-taken rect,\n .play-flow-node-taken circle {\n stroke: var(--cds-background-brand) !important;\n }\n .djs-container svg:focus {\n outline: none;\n }\n\n ${$isSelectionAllowed\n ? css`\n .play-selectable:hover {\n cursor: pointer;\n\n .djs-hit-all {\n cursor: pointer !important;\n }\n }\n\n .djs-outline {\n visibility: initial !important;\n }\n\n .play-selectable:hover .djs-outline,\n .play-selected-frame .djs-outline {\n stroke-width: 2px;\n stroke: var(--cds-link-inverse, #78a9ff);\n }\n\n .play-non-selectable {\n cursor: not-allowed;\n\n .djs-hit-all {\n cursor: not-allowed !important;\n }\n }\n\n .play-selected .djs-visual {\n rect,\n circle,\n polygon {\n fill: var(--cds-highlight, #d0e2ff) !important;\n }\n }\n `\n : css`\n .djs-hit {\n pointer-events: none;\n }\n `}\n `;\n }}\n`;\n\nexport {Diagram, DiagramCanvas};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Button as CarbonButton} from '@carbon/react';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n`;\n\nexport const MainButton = styled(CarbonButton)`\n width: 42px;\n`;\n\nexport const Dropdown = styled(CarbonButton)`\n width: 16px;\n\n > :first-child {\n min-width: 0;\n margin-top: 3px;\n }\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useState} from 'react';\n\nimport {Dropdown as DropdownIcon} from 'modules/icons';\nimport Dropdown from 'modules/primitives/Dropdown/Dropdown';\n\nimport * as Styled from './styled';\nimport type {ButtonKind, ButtonTooltipPosition} from '@carbon/react';\n\ntype Props = {\n disabled?: boolean;\n actions: Array<{\n kind?: ButtonKind;\n elementId?: string;\n renderIcon?: React.ElementType;\n type?: 'divider';\n label?: string;\n onClick?: () => void;\n iconDescription?: string;\n disabled?: boolean;\n tooltipPosition?: ButtonTooltipPosition;\n }>;\n};\n\nconst ActionButton: React.FC<Props> = ({actions, disabled}) => {\n const [anchorEl, setAnchorEl] = useState<EventTarget | null>(null);\n\n const [primaryAction, ...secondaryActions] = actions;\n\n return (\n <Styled.Container>\n <Styled.MainButton\n hasIconOnly\n tooltipPosition={primaryAction.tooltipPosition}\n iconDescription={primaryAction.label}\n data-testid={`${primaryAction.elementId}-${primaryAction.label}`}\n size=\"sm\"\n kind={primaryAction.kind ?? 'primary'}\n disabled={disabled || primaryAction.disabled}\n renderIcon={primaryAction.renderIcon}\n onClick={primaryAction.onClick}\n />\n {secondaryActions.length > 0 && (\n <>\n <Styled.Dropdown\n hasIconOnly\n data-testid={`secondary-${primaryAction.elementId}-${primaryAction.label}`}\n kind=\"secondary\"\n iconDescription=\"Additional actions\"\n size=\"sm\"\n disabled={disabled}\n onClick={(evt: MouseEvent) => {\n setAnchorEl(evt.currentTarget);\n }}\n //@ts-expect-error Property 'color' does not exist on type 'IntrinsicAttributes'.ts(2322)\n renderIcon={() => <DropdownIcon color=\"white\" />}\n />\n {/* @ts-expect-error Property 'children' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Dropdown> & Readonly<{}>'.ts(2769)*/}\n <Dropdown\n align=\"left\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n >\n {secondaryActions.map((action) => {\n if (action.type === 'divider')\n //@ts-expect-error Property 'ListItemDivider' does not exist on type 'typeof Dropdown'.ts(2339)\n return <Dropdown.ListItemDivider key={action.label} />;\n\n return (\n //@ts-expect-error Property 'ListItem' does not exist on type 'typeof Dropdown'.ts(2339)\n <Dropdown.ListItem\n key={action.label}\n //@ts-expect-error Rest parameter 'args' implicitly has an 'any[]' type.ts(7019)\n onClick={(...args) => {\n setAnchorEl(null);\n //@ts-expect-error A spread argument must either have a tuple type or be passed to a rest parameter.ts(2556)\n return action?.onClick?.(...args);\n }}\n >\n {action.label}\n {/* @ts-expect-error Property 'ListItem' does not exist on type 'typeof Dropdown'.ts(2339)*/}\n </Dropdown.ListItem>\n );\n })}\n </Dropdown>\n </>\n )}\n </Styled.Container>\n );\n};\n\nexport {ActionButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n background-color: white;\n border-radius: 4px;\n box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.3);\n padding: 2px;\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {IconButton} from '@carbon/react';\nimport {Container} from './styled';\nimport {PlayFilledAlt, Playlist} from '@carbon/icons-react';\n\ntype Props = {\n disabled?: boolean;\n primaryButtonLabel: string;\n secondaryButtonLabel: string;\n onPrimaryButtonClick: () => Promise<void>;\n onSecondaryButtonClick: () => void;\n};\n\nconst StartButtons: React.FC<Props> = ({\n disabled = false,\n primaryButtonLabel,\n secondaryButtonLabel,\n onPrimaryButtonClick,\n onSecondaryButtonClick,\n}) => {\n return (\n <Container>\n <IconButton\n label={primaryButtonLabel}\n disabled={disabled}\n kind=\"ghost\"\n size=\"sm\"\n onClick={onPrimaryButtonClick}\n >\n <PlayFilledAlt />\n </IconButton>\n <IconButton\n label={secondaryButtonLabel}\n disabled={disabled}\n kind=\"ghost\"\n size=\"sm\"\n onClick={onSecondaryButtonClick}\n >\n <Playlist />\n </IconButton>\n </Container>\n );\n};\n\nexport {StartButtons};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {Envelope} from 'modules/icons';\nimport {MessageSubscriptionCandidate} from 'modules/types';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {PublishMessage} from '../PublishMessage';\nimport {StartButtons} from '../StartButtons';\n\ntype Props = {\n messageSubscription: MessageSubscriptionCandidate;\n isStartEvent?: boolean;\n element: ElementLike;\n};\n\nconst TriggerMessageSubscriptionButton: React.FC<Props> = observer(\n ({messageSubscription, element, isStartEvent = false}) => {\n const processInstance = processInstanceStore.state.processInstance;\n\n const {prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: playEnvironmentStore.processId,\n });\n\n return (\n <PublishMessage\n messageSubscription={messageSubscription}\n element={element}\n isStartEvent={isStartEvent}\n >\n {({publishMessage, publishMessageWithVariables}) => {\n const primaryButtonLabel = generateLabel({\n prefix: 'Publish message',\n prefillSource,\n });\n\n const onPrimaryButtonClick = async () => {\n publishMessage({\n processId: playEnvironmentStore.processId,\n messageSubscription,\n isStartEvent,\n processInstanceKey: processInstance?.key,\n });\n };\n\n const secondaryButtonLabel = 'Edit variables and publish message';\n\n const onSecondaryButtonClick = publishMessageWithVariables;\n\n return (\n <>\n {isStartEvent ? (\n <StartButtons\n primaryButtonLabel={primaryButtonLabel}\n onPrimaryButtonClick={onPrimaryButtonClick}\n secondaryButtonLabel={secondaryButtonLabel}\n onSecondaryButtonClick={onSecondaryButtonClick}\n />\n ) : (\n <ActionButton\n actions={[\n {\n elementId: element.id,\n label: primaryButtonLabel,\n //@ts-expect-error Property 'color' does not exist on type 'IntrinsicAttributes'.ts(2322)\n renderIcon: () => <Envelope color=\"white\" />,\n onClick: onPrimaryButtonClick,\n },\n {\n label: secondaryButtonLabel,\n onClick: onSecondaryButtonClick,\n },\n ]}\n />\n )}\n </>\n );\n }}\n </PublishMessage>\n );\n },\n);\n\nTriggerMessageSubscriptionButton.displayName =\n 'TriggerMessageSubscriptionButton';\nexport {TriggerMessageSubscriptionButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst topLeft = {top: -20, left: -30};\nconst top = {top: -38, left: 0};\nconst startButtonsAlignment = {top: -58, left: 0};\nconst bottomLeft = {bottom: 14, left: -6};\n\nconst PROBLEM = bottomLeft;\nconst CONNECTOR = topLeft;\nconst INCIDENT_BUTTON = top;\nconst START_INSTANCE_BUTTON = startButtonsAlignment;\nconst TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON = top;\nconst TRIGGER_MESSAGE_SUBSCRIPTION_START_BUTTON = startButtonsAlignment;\nconst SEQUENCE_FLOW_HIGHLIGHTER = top;\nconst CHILD_INSTANCE_BUTTON = top;\nconst JOB_COMPLETE_BUTTON = top;\nconst USER_TASK_COMPLETE_BUTTON = top;\nconst TASK_FORM_BUTTON = top;\nconst FINISHED_OVERLAY = {...topLeft, top: -40};\nconst REWIND_OVERLAY = top;\nconst VIEW_DECISION_INSTANCE_BUTTON = top;\nconst BROADCAST_SIGNAL_BUTTON = top;\nconst BROADCAST_SIGNAL_START_BUTTON = startButtonsAlignment;\nconst THROW_ERROR_BUTTON = top;\n\nexport {\n PROBLEM,\n CONNECTOR,\n INCIDENT_BUTTON,\n START_INSTANCE_BUTTON,\n TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON,\n TRIGGER_MESSAGE_SUBSCRIPTION_START_BUTTON,\n SEQUENCE_FLOW_HIGHLIGHTER,\n CHILD_INSTANCE_BUTTON,\n JOB_COMPLETE_BUTTON,\n USER_TASK_COMPLETE_BUTTON,\n TASK_FORM_BUTTON,\n FINISHED_OVERLAY,\n REWIND_OVERLAY,\n BROADCAST_SIGNAL_BUTTON,\n BROADCAST_SIGNAL_START_BUTTON,\n VIEW_DECISION_INSTANCE_BUTTON,\n THROW_ERROR_BUTTON,\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {observer} from 'mobx-react';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {StartInstance} from 'modules/components/StartInstance';\nimport {StartButtons} from 'modules/components/StartButtons';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst StartInstanceButton: React.FC<Props> = observer(({element}) => {\n return (\n <StartInstance element={element}>\n {({\n startInstance,\n startInstanceWithVariables,\n startInstanceWithForm,\n isStartingInstance,\n hasForm,\n }) => {\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: playEnvironmentStore.processId,\n });\n const startLabel = generateLabel({\n prefix: 'Start instance',\n prefillSource,\n });\n\n return (\n <StartButtons\n disabled={isStartingInstance}\n primaryButtonLabel={hasForm ? 'Open Start Form' : startLabel}\n onPrimaryButtonClick={async () => {\n if (hasForm) {\n startInstanceWithForm();\n } else {\n startInstance({\n processId: playEnvironmentStore.processId,\n variables: prefillData || '{}',\n successNotificationSubtitle:\n generateLabel({prefillSource}) || undefined,\n });\n }\n }}\n secondaryButtonLabel=\"Edit variables and start instance\"\n onSecondaryButtonClick={() => {\n startInstanceWithVariables();\n }}\n />\n );\n }}\n </StartInstance>\n );\n});\n\nStartInstanceButton.displayName = 'StartInstanceButton';\nexport {StartInstanceButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\n\nfunction getCalledProcessId(element: ElementLike) {\n const calledElement = getExtensionElement(element, 'zeebe:CalledElement');\n\n return calledElement?.get('processId') ?? null;\n}\n\nexport {getCalledProcessId};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ChildProcessInstanceDto} from 'modules/types';\n\nexport const getChildInstance = ({\n childInstances,\n calledProcessId,\n}: {\n childInstances: ChildProcessInstanceDto[];\n calledProcessId: string;\n}) => {\n const allChildInstances = childInstances.filter(\n (childInstance) => childInstance.bpmnProcessId === calledProcessId,\n );\n\n if (allChildInstances.length === 0) {\n return;\n }\n\n const childInstance = allChildInstances.find(({state}) => state === 'ACTIVE');\n\n if (childInstance !== undefined) {\n return childInstance;\n }\n\n return allChildInstances[0];\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Launch} from '@carbon/icons-react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {observer} from 'mobx-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getCalledProcessId} from 'modules/utils/getCalledProcessId';\nimport {childInstancesStore} from 'modules/stores/childInstances';\nimport {getChildInstance} from './get-child-instance';\nimport PlayContext from 'modules/PlayContext';\nimport {useContext} from 'react';\n\ntype Props = {\n element: ElementLike;\n isActive: boolean;\n};\n\nconst ChildInstanceButton: React.FC<Props> = observer(({element, isActive}) => {\n const context = useContext(PlayContext);\n\n const calledProcessId = getCalledProcessId(element);\n const childInstance = getChildInstance({\n childInstances: childInstancesStore.state.childInstances,\n calledProcessId,\n });\n\n if (childInstance === undefined) {\n return null;\n }\n\n return (\n <ActionButton\n actions={[\n {\n kind: isActive ? 'primary' : 'secondary',\n label: 'View called process',\n renderIcon: () => <Launch color=\"white\" />,\n onClick: async () => {\n context.reInitializePlay?.({\n processId: childInstance.bpmnProcessId,\n processDefinitionKey: childInstance.processDefinitionKey,\n processInstanceKey: childInstance.key,\n });\n },\n },\n ]}\n />\n );\n});\n\nChildInstanceButton.displayName = 'ChildInstanceButton';\nexport {ChildInstanceButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Stack as BaseStack} from '@carbon/react';\nimport {CheckmarkFilled} from '@carbon/icons-react';\n\nconst Stack = styled(BaseStack)`\n /* background-inverse */\n background-color: #393939;\n /* text-on-color */\n color: #fff;\n padding: 4px 8px 4px 4px;\n border-radius: 24px;\n align-items: center;\n`;\n\nconst Checkmark = styled(CheckmarkFilled)`\n /* support-success */\n fill: #24a148;\n`;\n\nexport {Stack, Checkmark};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Stack, Checkmark} from './styled';\n\nconst CompletedOverlay: React.FC = () => {\n return (\n <Stack orientation=\"horizontal\" gap={2}>\n <Checkmark />\n <div>Completed</div>\n </Stack>\n );\n};\n\nCompletedOverlay.displayName = 'CompletedOverlay';\nexport {CompletedOverlay};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useContext, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {CodeSnippet} from '@carbon/react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport PlayContext from 'modules/PlayContext';\nimport trackingService from 'modules/services/TrackingService';\nimport {Incident} from 'modules/types';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {Warning} from '@carbon/icons-react';\nimport {incidentsStore} from 'modules/stores/incidents';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {AISparkle} from 'modules/icons';\n\ntype Props = {\n element: ElementLike;\n incident: Incident;\n};\n\nconst IncidentButton: React.FC<Props> = observer(({element, incident}) => {\n const context = useContext(PlayContext);\n const [isIncidentModalOpen, setIsIncidentModalOpen] = useState(false);\n const {processInstance} = processInstanceStore.state;\n const areAIFeaturesEnabled = context.featureFlags.areAIFeaturesEnabled;\n\n const showAskAIButton = areAIFeaturesEnabled;\n const isSecondaryButtonEnabled =\n showAskAIButton || context.isUserOrgOwnerOrAdmin;\n\n const askAiButton =\n playEnvironmentStore.authType !== 'sm'\n ? {\n label: showAskAIButton\n ? 'Copy and ask AI'\n : 'Enable incident copilot',\n id: areAIFeaturesEnabled ? 'camunda-ai-button' : undefined,\n icon: <AISparkle />,\n disabled: !isSecondaryButtonEnabled,\n title: !isSecondaryButtonEnabled\n ? 'Contact your admin to enable this feature'\n : undefined,\n onClick: () => {\n if (areAIFeaturesEnabled) {\n navigator.clipboard.writeText(\n `I got this incident. What does it mean, what is the root cause, and how do I fix it in Play? \\nError type: ${incident.type} \\nError message: ${incident.message}`,\n );\n\n context.displayNotification?.info({\n title: 'AI prompt copied. Paste in the text area to continue.',\n });\n setIsIncidentModalOpen(false);\n } else {\n window.open(`${context.organizationManagementPageUrl}/settings`);\n }\n\n trackingService.trackIncidentAIModalOpened({\n areAIFeaturesEnabled,\n });\n },\n }\n : undefined;\n\n return (\n <>\n <ActionButton\n actions={[\n {\n elementId: element.id,\n label: 'View Incident',\n kind: 'danger',\n renderIcon: () => <Warning />,\n onClick: () => {\n setIsIncidentModalOpen(true);\n },\n },\n ]}\n />\n\n <ComposedModal\n title=\"View incident\"\n isVisible={isIncidentModalOpen}\n primaryButtonLabel=\"Retry incident\"\n secondaryButton={askAiButton}\n ghostButton={{\n label: 'Cancel',\n onClick: () => setIsIncidentModalOpen(false),\n }}\n onClose={() => setIsIncidentModalOpen(false)}\n onSubmit={async () => {\n setIsIncidentModalOpen(false);\n\n if (incident.jobKey) {\n const isSuccess = await incidentsStore.updateRetries({\n jobKey: incident.jobKey,\n });\n if (!isSuccess) {\n context.displayNotification?.error(REQUEST_FAILURE);\n\n return;\n }\n }\n\n trackingService.trackResolveIncident(playEnvironmentStore.processId);\n\n const response = await incidentsStore.resolveIncident(incident.key);\n\n if (response.status === AUTHORIZATION_ERROR_CODE) {\n context.displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${playEnvironmentStore.authType === 'sm' ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to resolve this incident.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n\n return;\n }\n\n if (response.success === false) {\n context.displayNotification?.error(REQUEST_FAILURE);\n } else {\n if (processInstance !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstance.key), {\n action: 'resolveIncident',\n elementId: element.id,\n hasJob: Boolean(incident.jobKey),\n });\n }\n }\n }}\n modalBody={\n <CodeSnippet copyButtonDescription=\"Copy\" type=\"multi\" wrapText>\n {incident.message}\n </CodeSnippet>\n }\n />\n </>\n );\n});\n\nIncidentButton.displayName = 'IncidentButton';\nexport {IncidentButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect} from 'react';\nimport {observer} from 'mobx-react';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {sequenceFlowsStore} from 'modules/stores/sequenceFlows';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst SequenceFlowHighlighter: React.FC<Props> = observer(({element}) => {\n const {completedElementInstances} = elementInstancesStore;\n const {isInstanceDetailPageVisible} = processInstanceStore;\n const isScenariosTabVisible = bottomBarStore.state.activeTab === 'scenarios';\n\n const {\n state: {sequenceFlows},\n } = sequenceFlowsStore;\n\n const coveredSequenceFlows =\n scenariosStore.state.selectedScenario?.coveredSequenceFlows ??\n scenariosStore.allCoveredSequenceFlows;\n\n useEffect(() => {\n if (!isInstanceDetailPageVisible) {\n return;\n }\n\n if (sequenceFlows.includes(element.id)) {\n diagramStore.state.viewer?.addMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n } else if (\n element?.di?.bpmnElement?.sourceRef?.$type === 'bpmn:EventBasedGateway' &&\n completedElementInstances.some(\n (elementInstance) =>\n elementInstance.flowNodeId === element.di.bpmnElement.targetRef.id,\n )\n ) {\n diagramStore.state.viewer?.addMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n } else {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n }\n\n return () => {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n };\n }, [\n sequenceFlows,\n element,\n completedElementInstances,\n isInstanceDetailPageVisible,\n ]);\n\n useEffect(() => {\n const shouldHighlightSequenceFlows =\n !isInstanceDetailPageVisible &&\n coveredSequenceFlows.length > 0 &&\n isScenariosTabVisible;\n\n if (!shouldHighlightSequenceFlows) {\n return;\n }\n\n if (coveredSequenceFlows.includes(element.id)) {\n diagramStore.state.viewer?.addMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n } else {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n }\n\n return () => {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-sequence-flow-taken',\n );\n };\n }, [\n element,\n isInstanceDetailPageVisible,\n isScenariosTabVisible,\n coveredSequenceFlows,\n ]);\n\n return null;\n});\n\nSequenceFlowHighlighter.displayName = 'SequenceFlowHighlighter';\nexport {SequenceFlowHighlighter};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst generateErrorThrownMessage = ({\n elementId,\n errorCode,\n}: {\n elementId?: string;\n errorCode?: string;\n}) => {\n let message = `${elementId ? `\"${elementId}\"` : 'Error event'} manually triggered`;\n\n if (errorCode) {\n message = `${message} with error code \"${errorCode}\"`;\n }\n\n return message;\n};\n\nexport {generateErrorThrownMessage};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ContextType} from 'modules/PlayContext';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\n\nfunction jobWorkerElementTypeToHumanReadable(element: ElementLike): string {\n const bpmnType = element.businessObject.$type as string;\n if (\n 'bpmn:IntermediateThrowEvent' === bpmnType &&\n element.businessObject.eventDefinitions[0]?.$type ===\n 'bpmn:MessageEventDefinition'\n ) {\n return 'message throw event';\n } else if (\n 'bpmn:EndEvent' === bpmnType &&\n element.businessObject.eventDefinitions[0]?.$type ===\n 'bpmn:MessageEventDefinition'\n ) {\n return 'message end event';\n }\n const type = bpmnType.split(':')[1];\n const readableName = type\n .split(/(?=[A-Z])/)\n .map((wordPart) => wordPart.toLowerCase())\n .join(' ');\n\n return readableName;\n}\n\nexport function notifyActionManuallyCompleted(\n element: ElementLike,\n displayNotification: ContextType['displayNotification'],\n subtitle?: string,\n) {\n const typeName = jobWorkerElementTypeToHumanReadable(element);\n const notification = {\n title: `\"${element.businessObject.name || element.businessObject.id}\" ${typeName} completed manually`,\n subtitle,\n };\n displayNotification?.success(notification);\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React, {useContext, useState, useEffect, useCallback} from 'react';\nimport {observer} from 'mobx-react';\nimport {ComboBox} from '@carbon/react';\nimport {Checkmark} from '@carbon/icons-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport PlayContext from 'modules/PlayContext';\nimport {\n ELEMENTS_WITH_JOB_IMPLEMENTATION,\n MISSING_PERMISSION_ACTION_PROPS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {jobsStore} from 'modules/stores/jobs';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {ExampleDataEditorModal} from 'modules/components/ExampleDataEditorModal';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport trackingService from 'modules/services/TrackingService';\nimport {getTaskDefinitionType} from 'modules/utils/getTaskDefinitionType';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {statisticsStore} from 'modules/stores/statistics';\nimport {generateErrorThrownMessage} from 'modules/utils/generateErrorThrownMessage';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {notifyActionManuallyCompleted} from 'modules/utils/notifyActionManuallyCompleted';\nimport {setJobCompletionHistory} from 'modules/utils/completedJobHistory';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst JobCompleteButton: React.FC<Props> = observer(({element}) => {\n const {displayNotification} = useContext(PlayContext);\n const [isExampleDataEditorModalOpen, setIsExampleDataEditorModalOpen] =\n useState(false);\n const [isThrowModalOpen, setIsThrowModalOpen] = useState(false);\n const [errorCode, setErrorCode] = useState('');\n const [isInProgress, setIsInProgress] = useState(false);\n\n const {instanceKey, processInstance} = processInstanceStore.state;\n\n const taskDefinitionType = getTaskDefinitionType(element);\n\n const isElementActive = statisticsStore.state.statistics.some(\n ({activityId, active}) => activityId === element.id && active > 0,\n );\n\n const hasJob =\n isElementActive &&\n ELEMENTS_WITH_JOB_IMPLEMENTATION.includes(element.businessObject.$type) &&\n taskDefinitionType !== undefined;\n\n useEffect(() => {\n setIsInProgress(false);\n }, [hasJob]);\n\n // error could either be a general error (ex: start event of an event sub process)\n // or it could be a boundary event on this element or its parents\n // we should ignore the error boundary events of a completely different element\n const availableErrorEvents = diagramStore.getAvailableErrorEvents(element);\n\n const handleThrowError = useCallback(async () => {\n setIsThrowModalOpen(false);\n setIsInProgress(true);\n\n const isSuccess = await jobsStore.throwError({\n taskDefinitionType,\n processInstanceKey: instanceKey,\n errorCode,\n elementId: element.id,\n });\n\n if (isSuccess && instanceKey !== undefined) {\n updateUserActionHistory(generateHistoryKey(instanceKey), {\n action: 'throwJob',\n elementId: element.id,\n errorCode,\n taskDefinitionType,\n });\n\n const errorElementId = availableErrorEvents.find(\n (errorEvent) => errorEvent.errorCode === errorCode,\n )?.errorElementId;\n\n displayNotification?.success(\n {\n title: generateErrorThrownMessage({\n elementId: errorElementId,\n errorCode,\n }),\n },\n {\n action: {\n label: 'Learn more',\n onClick: () => {\n window.open(\n 'https://docs.camunda.io/docs/components/modeler/bpmn/error-events/',\n '_blank',\n );\n },\n },\n },\n );\n }\n\n if (!isSuccess) {\n displayNotification?.error(\n {\n title: REQUEST_FAILURE.title,\n subtitle:\n 'Please try again or make sure you have the right permissions to throw an error',\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n setIsInProgress(false);\n }\n }, [\n availableErrorEvents,\n displayNotification,\n element.id,\n taskDefinitionType,\n errorCode,\n instanceKey,\n ]);\n\n const handleJobCompletionFailure = useCallback(async () => {\n displayNotification?.error(\n {\n title: REQUEST_FAILURE.title,\n subtitle:\n 'Please try again or make sure you have the right permissions to complete the job',\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n }, [displayNotification]);\n\n // if we are not in an instance view, do not show\n if (!instanceKey) {\n return null;\n }\n\n if (!hasJob) {\n // if there is no open job for the current element, do not show\n return null;\n }\n\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: playEnvironmentStore.processId,\n });\n\n const jobLabel = generateLabel({\n prefix: 'Complete job',\n prefillSource,\n });\n\n const actions = [\n {\n label: jobLabel,\n elementId: element.id,\n renderIcon: () => <Checkmark color=\"white\" />,\n onClick: async () => {\n setIsInProgress(true);\n\n let isSuccess = false;\n\n isSuccess = await jobsStore.completeJob({\n taskDefinitionType,\n processInstanceKey: processInstance?.key,\n variables: prefillData,\n elementId: element.id,\n });\n\n if (isSuccess && processInstance !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstance.key), {\n action: 'completeJob',\n type: 'serviceTask',\n elementId: element.id,\n variables: prefillData || undefined,\n taskDefinitionType,\n });\n trackingService.trackUserCompletesElement(element, prefillData);\n }\n if (!isSuccess) {\n handleJobCompletionFailure();\n setIsInProgress(false);\n } else {\n const subtitle = generateLabel({prefillSource}) || undefined;\n\n notifyActionManuallyCompleted(element, displayNotification, subtitle);\n }\n },\n },\n {\n elementId: element.id,\n label: 'Edit variables and complete job',\n onClick: () => {\n setIsExampleDataEditorModalOpen(true);\n },\n },\n ];\n\n if (hasJob && availableErrorEvents.length > 0) {\n actions.push(\n {\n //@ts-expect-error Object literal may only specify known properties, and 'type' does not exist in type '{ label: string; renderIcon: () => Element; onClick: () => Promise<void>; } | { label: string; onClick: () => void; renderIcon?: undefined; }'.ts(2353)\n type: 'divider',\n label: 'divider',\n },\n {\n label: 'Throw Error',\n onClick: () => {\n setErrorCode('');\n setIsThrowModalOpen(true);\n },\n },\n );\n }\n\n return (\n <>\n <ActionButton disabled={isInProgress} actions={actions} />\n <ExampleDataEditorModal\n title=\"Complete job with variables\"\n isVisible={isExampleDataEditorModalOpen}\n primaryButtonLabel=\"Complete job\"\n onClose={() => setIsExampleDataEditorModalOpen(false)}\n element={element}\n onSubmit={async (variableModalContent) => {\n setIsExampleDataEditorModalOpen(false);\n\n setIsInProgress(true);\n\n let isSuccess = false;\n\n isSuccess = await jobsStore.completeJob({\n taskDefinitionType,\n processInstanceKey: processInstance?.key,\n variables: variableModalContent,\n elementId: element.id,\n });\n\n if (isSuccess && processInstance !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstance.key), {\n action: 'completeJob',\n type: 'serviceTask',\n elementId: element.id,\n variables: variableModalContent ?? undefined,\n taskDefinitionType,\n });\n trackingService.trackUserCompletesElement(\n element,\n variableModalContent,\n );\n\n setJobCompletionHistory({\n processId: playEnvironmentStore.processId,\n elementId: element.id,\n variables: variableModalContent ?? '',\n });\n }\n\n if (!isSuccess) {\n handleJobCompletionFailure();\n\n setIsInProgress(false);\n } else {\n notifyActionManuallyCompleted(element, displayNotification);\n }\n }}\n />\n\n <ComposedModal\n isVisible={isThrowModalOpen}\n title=\"Throw error\"\n primaryButtonLabel=\"Throw error\"\n isPrimaryButtonDisabled={errorCode === ''}\n secondaryButton={{\n label: 'Close',\n onClick: () => setIsThrowModalOpen(false),\n }}\n onClose={() => setIsThrowModalOpen(false)}\n enableContentOverflow\n onSubmit={handleThrowError}\n modalBody={\n <ComboBox\n titleText=\"Error\"\n id=\"error\"\n aria-label=\"Select an Error\"\n items={availableErrorEvents.map(\n ({errorCode, errorName, errorElementId}) => ({\n id: errorCode,\n label: errorName ?? errorElementId,\n }),\n )}\n onChange={({selectedItem}) => {\n if (selectedItem === null) {\n setErrorCode('');\n return;\n }\n\n setErrorCode(selectedItem?.id);\n }}\n />\n }\n />\n </>\n );\n});\n\nJobCompleteButton.displayName = 'JobCompleteButton';\nexport {JobCompleteButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\n\nimport {Rewind as BaseRewind} from 'modules/icons';\n\nconst Rewind = styled(BaseRewind)`\n fill: currentColor;\n`;\n\nexport {Rewind};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\n\nconst waitForProcessInstance = (\n instanceKey: number,\n): Promise<number | null> => {\n return retryWrapper<number>(async () => {\n const {success, processInstance} =\n await zeebePlayService.fetchInstanceDetails(instanceKey);\n\n if (success) {\n return processInstance.key;\n }\n\n return null;\n });\n};\n\nexport {waitForProcessInstance};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\n\nconst validateRewindSuccessful = ({\n instanceKey,\n elementId,\n}: {\n instanceKey?: number;\n elementId: string;\n}): Promise<boolean | null> => {\n return retryWrapper<boolean>(async () => {\n const {flowNodeInstances} =\n await zeebePlayService.fetchFlowNodeInstances(instanceKey);\n\n const flowNodeInstance = flowNodeInstances?.find(\n ({flowNodeId}) => flowNodeId === elementId,\n );\n\n if (flowNodeInstance !== undefined) {\n return true;\n }\n\n return null;\n });\n};\n\nexport {validateRewindSuccessful};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {action, makeObservable, observable} from 'mobx';\n\nimport {Rerun} from '../rerun';\n\ntype State = {\n isRewinding: boolean;\n};\n\nconst DEFAULT_STATE: State = {isRewinding: false};\n\nclass Rewind extends Rerun {\n state: State = {...DEFAULT_STATE};\n\n constructor() {\n super();\n makeObservable(this, {\n state: observable,\n startRewinding: action,\n endRewinding: action,\n reset: action,\n });\n }\n\n startRewinding = () => {\n this.state.isRewinding = true;\n };\n\n endRewinding = () => {\n this.state.isRewinding = false;\n };\n\n reset = () => {\n this.state = {...DEFAULT_STATE};\n };\n}\n\nexport const rewindStore = new Rewind();\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useContext} from 'react';\nimport {observer} from 'mobx-react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport PlayContext from 'modules/PlayContext';\nimport {Rewind} from './styled';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport trackingService from 'modules/services/TrackingService';\nimport {\n generateHistoryKey,\n getUserActionHistory,\n StartInstanceAction,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {waitForProcessInstance} from 'modules/stores/rerun/waitForProcessInstance';\nimport {validateRewindSuccessful} from './validateRewindSuccessful';\nimport {rewindStore} from 'modules/stores/rewind';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst RewindButton: React.FC<Props> = observer(({element}) => {\n const context = useContext(PlayContext);\n\n const {instanceKey: oldInstanceKey, processInstance} =\n processInstanceStore.state;\n const isOldInstanceActive = processInstance?.state === 'ACTIVE';\n\n return (\n <ActionButton\n actions={[\n {\n elementId: element.id,\n label: 'Rewind',\n kind: 'tertiary',\n renderIcon: () => <Rewind />,\n onClick: async () => {\n if (processInstance === undefined) {\n return;\n }\n\n rewindStore.startRewinding();\n\n const actions = getUserActionHistory(\n generateHistoryKey(processInstance.key),\n );\n\n const startInstanceAction = actions.find(\n ({action}) => action === 'startInstance',\n ) as StartInstanceAction;\n if (startInstanceAction === undefined) {\n rewindStore.endRewinding();\n context.displayNotification?.error({\n title: 'Rewind failed',\n subtitle: 'Please try again',\n });\n\n return;\n }\n\n const newInstanceKey = await rewindStore.createNewInstance({\n startActionType: startInstanceAction.type,\n variables: startInstanceAction.variables,\n elementId: startInstanceAction.elementId,\n bpmnProcessId: processInstance.bpmnProcessId,\n });\n\n if (newInstanceKey === undefined) {\n rewindStore.endRewinding();\n context.displayNotification?.error({\n title: 'Rewind failed',\n subtitle: 'Please try again',\n });\n\n return;\n }\n\n await waitForProcessInstance(newInstanceKey);\n\n trackingService.trackRewindedInstanceStart();\n\n processInstanceStore.reset();\n processInstanceStore.setInstanceDetails({\n instanceKey: newInstanceKey,\n instanceType: 'REWOUND_INSTANCE',\n });\n\n await rewindStore.repeatUserActions({\n newInstanceKey,\n actions,\n untilElementId: element.id,\n });\n\n const isRewindSuccessful = await validateRewindSuccessful({\n instanceKey: newInstanceKey,\n elementId: element.id,\n });\n\n if (isOldInstanceActive) {\n zeebePlayService.terminateProcessInstance(oldInstanceKey);\n }\n\n if (isRewindSuccessful) {\n context.displayNotification?.success({\n title: 'Rewind successful',\n });\n } else {\n context.displayNotification?.warning(\n {\n title: 'Rewind partially successful',\n content: 'Some BPMN elements cannot be rewound',\n },\n {\n action: {\n label: 'Read docs',\n onClick: () => {\n window.open(\n 'https://docs.camunda.io/docs/components/modeler/web-modeler/play-your-process/#rewind-a-process',\n '_blank',\n );\n },\n },\n },\n );\n }\n\n rewindStore.endRewinding();\n },\n },\n ]}\n />\n );\n});\n\nRewindButton.displayName = 'RewindButton';\nexport {RewindButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {Signal} from 'modules/icons';\nimport {SignalCandidate} from 'modules/types';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {BroadcastSignal} from '../BroadcastSignal';\nimport {StartButtons} from '../StartButtons';\n\ntype Props = {\n signalCandidate: SignalCandidate;\n isStartEvent?: boolean;\n element: ElementLike;\n};\n\nconst BroadcastSignalButton: React.FC<Props> = observer(\n ({signalCandidate, element, isStartEvent = false}) => {\n const processInstance = processInstanceStore.state.processInstance;\n\n const {prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: playEnvironmentStore.processId,\n });\n\n return (\n <BroadcastSignal\n signalCandidate={signalCandidate}\n element={element}\n isStartEvent={isStartEvent}\n >\n {({broadcastSignal, broadcastSignalWithVariables}) => {\n const primaryButtonLabel = generateLabel({\n prefix: 'Broadcast signal',\n prefillSource,\n });\n\n const onPrimaryButtonClick = async () => {\n broadcastSignal({\n processId: playEnvironmentStore.processId,\n isStartEvent,\n processInstanceKey: processInstance?.key,\n signalCandidate,\n });\n };\n\n const secondaryButtonLabel = 'Edit variables and broadcast signal';\n const onSecondaryButtonClick = broadcastSignalWithVariables;\n\n return (\n <>\n {isStartEvent ? (\n <StartButtons\n primaryButtonLabel={primaryButtonLabel}\n onPrimaryButtonClick={onPrimaryButtonClick}\n secondaryButtonLabel={secondaryButtonLabel}\n onSecondaryButtonClick={onSecondaryButtonClick}\n />\n ) : (\n <ActionButton\n actions={[\n {\n elementId: element.id,\n label: primaryButtonLabel,\n //@ts-expect-error Property 'color' does not exist on type 'IntrinsicAttributes'.ts(2322)\n renderIcon: () => <Signal color=\"white\" />,\n onClick: onPrimaryButtonClick,\n },\n {\n label: secondaryButtonLabel,\n onClick: onSecondaryButtonClick,\n },\n ]}\n />\n )}\n </>\n );\n }}\n </BroadcastSignal>\n );\n },\n);\n\nBroadcastSignalButton.displayName = 'BroadcastSignalButton';\nexport {BroadcastSignalButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {View} from '@carbon/icons-react';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {observer} from 'mobx-react';\nimport {decisionInstancesStore} from 'modules/stores/decisionInstances';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport trackingService from 'modules/services/TrackingService';\nimport {TooltipWrapper} from 'modules/components/TooltipWrapper';\n\ntype Props = {\n decisionId: string;\n};\n\nconst ViewDecisionInstanceButton: React.FC<Props> = observer(({decisionId}) => {\n const decisionInstance = decisionInstancesStore.state.decisionInstances.find(\n (decision) => decision.decisionId === decisionId,\n );\n\n const {sanitizedOperateBaseUrl, hasLinkToOperate} = playEnvironmentStore;\n\n if (!hasLinkToOperate) {\n return null;\n }\n\n const canUserViewDecisionInstance = decisionInstance !== undefined;\n\n return (\n <TooltipWrapper\n align=\"bottom\"\n isDisabled={!canUserViewDecisionInstance}\n text={\n !canUserViewDecisionInstance\n ? 'Please contact your organization owner or admin to give you the necessary permissions to view the Decision instance.'\n : undefined\n }\n >\n <ActionButton\n actions={[\n {\n kind: 'tertiary',\n label: 'View decision instance in Operate',\n tooltipPosition: 'bottom',\n renderIcon: () => <View />,\n onClick: () => {\n if (!canUserViewDecisionInstance) {\n return;\n }\n\n const url = `${sanitizedOperateBaseUrl}/decisions/${decisionInstance.id}`;\n window.open(url, '_blank');\n\n trackingService.openOperate(url);\n },\n },\n ]}\n />\n </TooltipWrapper>\n );\n});\n\nViewDecisionInstanceButton.displayName = 'ViewDecisionInstanceButton';\nexport {ViewDecisionInstanceButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {getExtensionElement} from './getExtensionElement';\n\nconst getDecisionId = (element: ElementLike) => {\n const calledDecision = getExtensionElement(element, 'zeebe:CalledDecision');\n\n return calledDecision?.get('decisionId') ?? null;\n};\n\nexport {getDecisionId};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\n\nimport {Checkmark} from '@carbon/icons-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {ErrorThrowableJob, jobsStore} from 'modules/stores/jobs';\nimport {ComboBox} from '@carbon/react';\nimport {useContext, useState} from 'react';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {\n MISSING_PERMISSION_ACTION_PROPS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport PlayContext from 'modules/PlayContext';\nimport {ComposedModal} from 'modules/components/ComposedModal';\nimport {generateErrorThrownMessage} from 'modules/utils/generateErrorThrownMessage';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst TriggerErrorButton: React.FC<Props> = observer(({element}) => {\n const [isThrowModalOpen, setIsThrowModalOpen] = useState(false);\n const [selectedElementId, setSelectedElementId] = useState('');\n const processInstanceKey = processInstanceStore.state.processInstance?.key;\n const context = useContext(PlayContext);\n const errorThrowableJobsByErrorId =\n jobsStore.errorThrowableJobsByErrorId[element.id];\n\n if (errorThrowableJobsByErrorId === undefined) {\n return null;\n }\n\n const handleThrowError = async (selectedJob: ErrorThrowableJob) => {\n const {elementId, errorCode, taskDefinitionType} = selectedJob;\n\n setIsThrowModalOpen(false);\n\n const isSuccess = await jobsStore.throwError({\n taskDefinitionType,\n processInstanceKey,\n elementId,\n errorCode,\n });\n\n if (!isSuccess) {\n context.displayNotification?.error(\n {\n title: REQUEST_FAILURE.title,\n subtitle:\n 'Please try again or make sure you have the right permissions to throw an error',\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n return;\n }\n\n if (processInstanceKey !== undefined) {\n updateUserActionHistory(generateHistoryKey(processInstanceKey), {\n action: 'throwJob',\n taskDefinitionType,\n elementId,\n errorCode,\n });\n }\n\n context.displayNotification?.success(\n {\n title: generateErrorThrownMessage({elementId: element.id, errorCode}),\n },\n {\n action: {\n label: 'Learn more',\n onClick: () => {\n window.open(\n 'https://docs.camunda.io/docs/components/modeler/bpmn/error-events/',\n '_blank',\n );\n },\n },\n },\n );\n };\n\n const actions = [\n {\n label: 'Throw Error',\n elementId: element.id,\n renderIcon: () => <Checkmark />,\n onClick: async () => {\n if (errorThrowableJobsByErrorId.length === 1) {\n const selectedJob = errorThrowableJobsByErrorId[0];\n handleThrowError(selectedJob);\n } else {\n setIsThrowModalOpen(true);\n }\n },\n },\n ];\n\n return (\n <>\n <ActionButton actions={actions} />\n <ComposedModal\n isVisible={isThrowModalOpen}\n title=\"Throw error\"\n primaryButtonLabel=\"Throw error\"\n isPrimaryButtonDisabled={selectedElementId === ''}\n secondaryButton={{\n label: 'Close',\n onClick: () => setIsThrowModalOpen(false),\n }}\n onClose={() => setIsThrowModalOpen(false)}\n enableContentOverflow\n onSubmit={async () => {\n const selectedJob = errorThrowableJobsByErrorId.find(\n ({elementId}) => elementId === selectedElementId,\n );\n if (selectedJob === undefined) {\n return;\n }\n\n handleThrowError(selectedJob);\n }}\n modalBody={\n <ComboBox\n id=\"job\"\n aria-label=\"Select a Job\"\n titleText=\"Select a job to throw this error\"\n items={errorThrowableJobsByErrorId.map(\n ({elementId, elementName}) => ({\n id: elementId,\n label: elementName,\n }),\n )}\n onChange={({selectedItem}) => {\n setSelectedElementId(selectedItem?.id ?? '');\n }}\n />\n }\n />\n </>\n );\n});\n\nexport {TriggerErrorButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useCallback, useContext, useState} from 'react';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport PlayContext from 'modules/PlayContext';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {notifyActionManuallyCompleted} from 'modules/utils/notifyActionManuallyCompleted';\nimport {PrefillSource, UserTaskNode} from 'modules/types';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport trackingService from 'modules/services/TrackingService';\nimport {setJobCompletionHistory} from 'modules/utils/completedJobHistory';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\n\nexport function useUserTaskCompletion({\n userTaskJob,\n element,\n isSelfManagedEnv,\n}: {\n userTaskJob?: UserTaskNode;\n element: ElementLike;\n isSelfManagedEnv: boolean;\n}) {\n const [isCompletingUserTask, setIsCompletingUserTask] = useState(false);\n const {displayNotification, featureFlags} = useContext(PlayContext);\n\n const completeUserTask = useCallback(\n async ({\n variables,\n processInstanceKey,\n processId,\n prefillSource,\n }: {\n variables: string;\n processInstanceKey: number;\n processId?: string;\n prefillSource?: PrefillSource;\n }) => {\n if (!userTaskJob) {\n return;\n }\n\n setIsCompletingUserTask(true);\n\n const isZeebeUserTask = userTaskJob.implementation === 'ZEEBE_USER_TASK';\n if (\n featureFlags.areUserTasksWithJobImplementationDeprecated &&\n !isZeebeUserTask\n ) {\n displayNotification?.error(\n {\n title: 'Unable to complete user task',\n subtitle:\n 'A User Task with the implementation type Job worker managed by Camunda is deprecated.',\n },\n {\n action: {\n label: 'Learn more about user tasks',\n onClick: () => {\n window.open(\n 'https://docs.camunda.io/docs/next/components/modeler/bpmn/user-tasks/#camunda-user-tasks',\n '_blank',\n );\n },\n },\n },\n );\n setIsCompletingUserTask(false);\n return;\n }\n\n const {success, status} = await zeebePlayService.completeUserTask({\n taskId: userTaskJob.id,\n variables,\n isZeebeUserTask,\n });\n\n if (!success) {\n if (status === AUTHORIZATION_ERROR_CODE) {\n displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${isSelfManagedEnv ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to update the user task.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n } else {\n displayNotification?.error(REQUEST_FAILURE);\n }\n setIsCompletingUserTask(false);\n return;\n }\n\n const subtitle = prefillSource\n ? generateLabel({prefillSource}) || undefined\n : undefined;\n\n notifyActionManuallyCompleted(element, displayNotification, subtitle);\n\n updateUserActionHistory(generateHistoryKey(processInstanceKey), {\n action: 'completeJob',\n type: 'userTask',\n elementId: element.id,\n variables,\n });\n trackingService.trackUserCompletesElement(element, variables);\n\n setJobCompletionHistory({processId, elementId: element.id, variables});\n setIsCompletingUserTask(false);\n },\n [\n userTaskJob,\n displayNotification,\n element,\n isSelfManagedEnv,\n featureFlags.areUserTasksWithJobImplementationDeprecated,\n ],\n );\n\n return {\n isCompletingUserTask,\n completeUserTask,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {UserTaskNode} from 'modules/types';\n\nconst FORM_KEY_PREFIX = 'camunda-forms:bpmn:';\n\nexport const getFormBody = async ({\n userTaskJob,\n}: {\n userTaskJob: UserTaskNode;\n}) => {\n const {success, schema} = await zeebePlayService.fetchUserTaskForm(\n userTaskJob.formKey!.replace(FORM_KEY_PREFIX, ''),\n userTaskJob.processDefinitionKey,\n );\n\n if (!success || !schema) {\n return;\n }\n\n return schema;\n};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React, {useState} from 'react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {Data as FormData} from '@bpmn-io/form-js-viewer/dist/types/Form';\n\nimport {ActionButton} from 'modules/components/ActionButton';\nimport {ExampleDataEditorModal} from 'modules/components/ExampleDataEditorModal';\nimport {EditForm} from 'modules/icons';\nimport {UserTaskNode} from 'modules/types';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {useUserTaskCompletion} from 'modules/hooks/useUserTaskCompletion';\nimport {getFormBody} from './get-form-body';\nimport {TaskFormModal} from 'modules/components/TaskFormModal';\nimport {observer} from 'mobx-react';\n\ntype Props = {\n element: ElementLike;\n userTaskJob: UserTaskNode;\n processInstanceKey: number;\n};\n\nconst OpenTaskFormButton: React.FC<Props> = observer(\n ({element, userTaskJob, processInstanceKey}) => {\n const [isFormModalOpen, setIsFormModalOpen] = useState(false);\n const [isExampleDataEditorModalOpen, setIsExampleDataEditorModalOpen] =\n useState(false);\n\n const authType = playEnvironmentStore.authType;\n const {isCompletingUserTask, completeUserTask} = useUserTaskCompletion({\n userTaskJob,\n element,\n isSelfManagedEnv: authType === 'sm',\n });\n\n const actions = [\n {\n label: 'Open Task Form',\n elementId: element.id,\n renderIcon: () => <EditForm />,\n onClick: async () => {\n setIsFormModalOpen(true);\n },\n },\n {\n elementId: element.id,\n label: 'Edit variables and complete job',\n onClick: () => {\n setIsExampleDataEditorModalOpen(true);\n },\n },\n ];\n\n return (\n <>\n <ActionButton disabled={isCompletingUserTask} actions={actions} />\n\n <ExampleDataEditorModal\n title=\"Complete job with variables\"\n isVisible={isExampleDataEditorModalOpen}\n primaryButtonLabel=\"Complete job\"\n onClose={() => setIsExampleDataEditorModalOpen(false)}\n onSubmit={async (variableModalContent) => {\n setIsExampleDataEditorModalOpen(false);\n completeUserTask({\n processId: playEnvironmentStore.processId,\n processInstanceKey,\n variables: variableModalContent ?? '{}',\n });\n }}\n element={element}\n />\n\n <TaskFormModal\n title=\"Task Form\"\n isVisible={isFormModalOpen}\n primaryButtonLabel=\"Complete\"\n dataTestId=\"user-task-form-modal\"\n onClose={() => {\n setIsFormModalOpen(false);\n }}\n onSubmit={async (data: FormData) => {\n setIsFormModalOpen(false);\n completeUserTask({\n processId: playEnvironmentStore.processId,\n processInstanceKey,\n variables: JSON.stringify(data),\n });\n }}\n element={element}\n getFormBody={() => getFormBody({userTaskJob})}\n formPrefillSettings={{\n sanitizePrefillData: true,\n userTaskJobId: userTaskJob.id,\n }}\n />\n </>\n );\n },\n);\n\nOpenTaskFormButton.displayName = 'OpenTaskFormButton';\nexport {OpenTaskFormButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React, {useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {Checkmark} from '@carbon/icons-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\n\nimport {ActionButton} from 'modules/components/ActionButton';\n\nimport {userTasksStore} from 'modules/stores/userTasks';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {ExampleDataEditorModal} from 'modules/components/ExampleDataEditorModal';\nimport {pickPrefillData} from 'modules/utils/pickPrefillData';\nimport {generateLabel} from 'modules/utils/generateButtonLabel';\nimport {statisticsStore} from 'modules/stores/statistics';\nimport {TooltipWrapper} from 'modules/components/TooltipWrapper';\nimport {useUserTaskCompletion} from 'modules/hooks/useUserTaskCompletion';\n\ntype Props = {\n element: ElementLike;\n processInstanceKey: number;\n};\n\nconst UserTaskCompleteButton: React.FC<Props> = observer(\n ({element, processInstanceKey}) => {\n const [isExampleDataEditorModalOpen, setIsExampleDataEditorModalOpen] =\n useState(false);\n\n const authType = playEnvironmentStore.authType;\n\n const isElementActive = statisticsStore.state.statistics.some(\n ({activityId, active}) => activityId === element.id && active > 0,\n );\n\n if (!isElementActive) {\n return null;\n }\n\n const userTaskJob = userTasksStore.state.userTasks?.find(\n (userTask) =>\n userTask.taskDefinitionId === element.id &&\n userTask.taskState === 'CREATED',\n );\n\n const hasActiveUserTaskJob = userTaskJob !== undefined;\n\n const {prefillData, prefillSource} = pickPrefillData({\n element,\n useCache: true,\n processId: playEnvironmentStore.processId,\n });\n\n const {isCompletingUserTask, completeUserTask} = useUserTaskCompletion({\n userTaskJob,\n element,\n isSelfManagedEnv: authType === 'sm',\n });\n\n return (\n <>\n <TooltipWrapper\n align=\"bottom\"\n isDisabled={!hasActiveUserTaskJob}\n text={\n !hasActiveUserTaskJob\n ? 'Please try again later or make sure you have the right permissions to interact with this user task.'\n : undefined\n }\n >\n <ActionButton\n disabled={isCompletingUserTask || !hasActiveUserTaskJob}\n actions={[\n {\n label: generateLabel({\n prefix: 'Complete job',\n prefillSource,\n }),\n elementId: element.id,\n renderIcon: () => <Checkmark color=\"white\" />,\n onClick: async () => {\n completeUserTask({\n processId: playEnvironmentStore.processId,\n processInstanceKey,\n variables: prefillData,\n prefillSource,\n });\n },\n },\n {\n elementId: element.id,\n label: 'Edit variables and complete job',\n onClick: () => {\n setIsExampleDataEditorModalOpen(true);\n },\n },\n ]}\n />\n </TooltipWrapper>\n\n <ExampleDataEditorModal\n title=\"Complete job with variables\"\n isVisible={isExampleDataEditorModalOpen}\n primaryButtonLabel=\"Complete job\"\n onClose={() => setIsExampleDataEditorModalOpen(false)}\n element={element}\n onSubmit={async (variableModalContent) => {\n setIsExampleDataEditorModalOpen(false);\n\n completeUserTask({\n processId: playEnvironmentStore.processId,\n processInstanceKey,\n variables: variableModalContent ?? '{}',\n });\n }}\n />\n </>\n );\n },\n);\n\nUserTaskCompleteButton.displayName = 'UserTaskCompleteButton';\nexport {UserTaskCompleteButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {createPortal} from 'react-dom';\n\nimport {TriggerMessageSubscriptionButton} from 'modules/components/TriggerMessageSubscriptionButton';\nimport {\n CHILD_INSTANCE_BUTTON,\n INCIDENT_BUTTON,\n JOB_COMPLETE_BUTTON,\n TASK_FORM_BUTTON,\n SEQUENCE_FLOW_HIGHLIGHTER,\n START_INSTANCE_BUTTON,\n TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON,\n FINISHED_OVERLAY,\n REWIND_OVERLAY,\n BROADCAST_SIGNAL_BUTTON,\n VIEW_DECISION_INSTANCE_BUTTON,\n THROW_ERROR_BUTTON,\n TRIGGER_MESSAGE_SUBSCRIPTION_START_BUTTON,\n BROADCAST_SIGNAL_START_BUTTON,\n USER_TASK_COMPLETE_BUTTON,\n} from 'modules/utils/overlayPositions';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\n\nimport {StartInstanceButton} from 'Definition/StartInstanceButton';\n\nimport {ChildInstanceButton} from 'Instance/ChildInstanceButton';\nimport {CompletedOverlay} from 'Instance/CompletedOverlay';\nimport {IncidentButton} from 'Instance/IncidentButton';\nimport {SequenceFlowHighlighter} from 'Instance/SequenceFlowHighlighter';\nimport {JobCompleteButton} from 'Instance/JobCompleteButton';\nimport {RewindButton} from 'Instance/RewindButton';\n\nimport {observer} from 'mobx-react';\nimport {incidentsStore} from 'modules/stores/incidents';\nimport {messageSubscriptionsStore} from 'modules/stores/messageSubscriptions';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ELEMENTS_SUPPORT_REWIND} from 'modules/utils/constants';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {BroadcastSignalButton} from 'modules/components/BroadcastSignalButton';\nimport {signalsStore} from 'modules/stores/signals';\nimport {statisticsStore} from 'modules/stores/statistics';\nimport {ViewDecisionInstanceButton} from 'Instance/ViewDecisionInstanceButton';\nimport {getDecisionId} from 'modules/utils/getDecisionId';\nimport {TriggerErrorButton} from 'Instance/TriggerErrorButton';\nimport {hasErrorEventDefinition} from 'bpmn-js/lib/util/DiUtil.js';\nimport {userTasksStore} from 'modules/stores/userTasks';\nimport {OpenTaskFormButton} from 'Instance/OpenTaskFormButton';\nimport {isNil} from 'lodash-es';\nimport {UserTaskCompleteButton} from 'Instance/UserTaskCompleteButton';\n\ntype Props = {\n element: ElementLike;\n addOverlay: (\n element: ElementLike,\n type: string,\n position: unknown,\n ) => HTMLDivElement;\n};\n\nconst DiagramOverlay: React.FC<Props> = observer(({element, addOverlay}) => {\n const {instanceKey, processInstance} = processInstanceStore.state;\n const {isCalledProcess} = processInstanceStore;\n\n const incident = incidentsStore.incidents?.find(\n (incident) =>\n incident.elementInstance?.element?.elementId === element.id &&\n ['ACTIVE', 'MIGRATED'].includes(incident.state),\n );\n if (incident) {\n const node = addOverlay(element, 'INCIDENT_BUTTON', INCIDENT_BUTTON);\n return createPortal(\n <IncidentButton element={element} incident={incident} />,\n node,\n );\n }\n\n if (\n element.type === 'bpmn:StartEvent' &&\n ['bpmn:Process', 'bpmn:Participant'].includes(element.parent?.type) &&\n (!element.businessObject.eventDefinitions ||\n element.businessObject.eventDefinitions.length === 0) &&\n instanceKey === undefined\n ) {\n const node = addOverlay(\n element,\n 'START_INSTANCE_BUTTON',\n START_INSTANCE_BUTTON,\n );\n return createPortal(<StartInstanceButton element={element} />, node);\n }\n\n if (\n element.type === 'bpmn:EndEvent' &&\n processInstanceStore.state.processInstance?.state === 'COMPLETED' &&\n ['bpmn:Process', 'bpmn:Participant'].includes(element.parent?.type) &&\n statisticsStore.completedElementIds.includes(element.id)\n ) {\n const node = addOverlay(element, 'FINISHED_OVERLAY', FINISHED_OVERLAY);\n\n return createPortal(<CompletedOverlay />, node);\n }\n\n const hasRewindOverlay =\n ELEMENTS_SUPPORT_REWIND.includes(element.type) &&\n statisticsStore.isElementProcessed(element.id) &&\n !statisticsStore.activeElementIds.includes(element.id) &&\n !isCalledProcess;\n\n if (hasRewindOverlay) {\n const node = addOverlay(element, 'REWIND_OVERLAY', REWIND_OVERLAY);\n\n return createPortal(<RewindButton element={element} />, node);\n }\n\n const {\n state: {connectorElements},\n } = connectorsStore;\n\n const connectorJob =\n instanceKey &&\n connectorElements?.find((connector) => connector.id === element.id);\n\n if (connectorJob) {\n return null;\n }\n\n const messageSubscription =\n messageSubscriptionsStore.activeMessageSubscriptionCandidates.find(\n (candidate) => candidate.elementId === element.id,\n );\n\n if (messageSubscription) {\n const node = addOverlay(\n element,\n 'TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON',\n TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON,\n );\n return createPortal(\n <TriggerMessageSubscriptionButton\n element={element}\n messageSubscription={messageSubscription}\n />,\n node,\n );\n }\n\n const definitionMessageSubscriptions =\n messageSubscriptionsStore.startMessageSubscriptionCandidates;\n const definitionMessageSubscription = definitionMessageSubscriptions?.find(\n (subscription) => subscription.elementId === element.id,\n );\n\n if (definitionMessageSubscription && instanceKey === undefined) {\n const node = addOverlay(\n element,\n 'TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON',\n TRIGGER_MESSAGE_SUBSCRIPTION_START_BUTTON,\n );\n return createPortal(\n <TriggerMessageSubscriptionButton\n element={element}\n messageSubscription={{\n ...definitionMessageSubscription,\n }}\n isStartEvent\n />,\n node,\n );\n }\n\n if (element.type === 'bpmn:SequenceFlow') {\n const node = addOverlay(\n element,\n 'SEQUENCE_FLOW_HIGHLIGHTER',\n SEQUENCE_FLOW_HIGHLIGHTER,\n );\n return createPortal(<SequenceFlowHighlighter element={element} />, node);\n }\n\n const isCallActivity =\n element.type === 'bpmn:CallActivity' &&\n statisticsStore.isElementProcessed(element.id);\n\n if (isCallActivity) {\n const node = addOverlay(\n element,\n 'CHILD_INSTANCE_BUTTON',\n CHILD_INSTANCE_BUTTON,\n );\n return createPortal(\n <ChildInstanceButton\n element={element}\n isActive={statisticsStore.activeElementIds.includes(element.id)}\n />,\n node,\n );\n }\n\n const decisionId = getDecisionId(element);\n\n const shouldDisplayBusinessRuleOverlay =\n element.type === 'bpmn:BusinessRuleTask' &&\n statisticsStore.isElementProcessed(element.id) &&\n decisionId !== null;\n\n if (shouldDisplayBusinessRuleOverlay) {\n const node = addOverlay(\n element,\n 'VIEW_DECISION_INSTANCE_BUTTON',\n VIEW_DECISION_INSTANCE_BUTTON,\n );\n\n return createPortal(\n <ViewDecisionInstanceButton decisionId={decisionId} />,\n node,\n );\n }\n\n const signal = signalsStore.activeSignalCandidates.find(\n (candidate) => candidate.elementId === element.id,\n );\n\n if (signal) {\n const node = addOverlay(\n element,\n 'BROADCAST_SIGNAL_BUTTON',\n BROADCAST_SIGNAL_BUTTON,\n );\n return createPortal(\n <BroadcastSignalButton element={element} signalCandidate={signal} />,\n node,\n );\n }\n\n const definitionSignals = signalsStore.startSignalCandidates;\n const definitionSignal = definitionSignals?.find(\n (subscription) => subscription.elementId === element.id,\n );\n\n if (definitionSignal && instanceKey === undefined) {\n const node = addOverlay(\n element,\n 'BROADCAST_SIGNAL_BUTTON',\n BROADCAST_SIGNAL_START_BUTTON,\n );\n\n return createPortal(\n <BroadcastSignalButton\n element={element}\n signalCandidate={definitionSignal}\n isStartEvent\n />,\n node,\n );\n }\n\n if (\n hasErrorEventDefinition(element.businessObject) &&\n ['bpmn:StartEvent', 'bpmn:BoundaryEvent'].includes(element.type)\n ) {\n const node = addOverlay(element, 'THROW_ERROR_BUTTON', THROW_ERROR_BUTTON);\n\n return createPortal(<TriggerErrorButton element={element} />, node);\n }\n\n const userTaskWithForm = userTasksStore.state.userTasks?.find(\n (userTask) =>\n userTask.taskDefinitionId === element.id &&\n userTask.taskState === 'CREATED' &&\n !isNil(userTask.formKey),\n );\n\n if (userTaskWithForm !== undefined && processInstance !== undefined) {\n const node = addOverlay(element, 'TASK_FORM_BUTTON', TASK_FORM_BUTTON);\n\n return createPortal(\n <OpenTaskFormButton\n element={element}\n userTaskJob={userTaskWithForm}\n processInstanceKey={processInstance.key}\n />,\n node,\n );\n }\n\n if (element.type === 'bpmn:UserTask' && processInstance !== undefined) {\n const node = addOverlay(\n element,\n 'USER_TASK_COMPLETE_BUTTON',\n USER_TASK_COMPLETE_BUTTON,\n );\n\n return createPortal(\n <UserTaskCompleteButton\n element={element}\n processInstanceKey={processInstance.key}\n />,\n node,\n );\n }\n\n const node = addOverlay(element, 'JOB_COMPLETE_BUTTON', JOB_COMPLETE_BUTTON);\n\n return createPortal(<JobCompleteButton element={element} />, node);\n});\n\nDiagramOverlay.displayName = 'DiagramOverlay';\nexport {DiagramOverlay};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst zLayoutBase = 0;\n\nconst above = 1;\n\n// https://github.com/carbon-design-system/carbon/blob/536d3422de93f869db7703e3761b245d4b8a68c2/packages/styles/scss/components/code-snippet/_code-snippet.scss#L320\nconst zCarbonCopyButton = 10;\nconst zDiagramControls = above + zLayoutBase;\nconst zLoadingOverlay = above + zCarbonCopyButton;\nconst zClusterWarning = above + zLayoutBase;\n\nexport {zDiagramControls, zLoadingOverlay, zClusterWarning};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {zDiagramControls} from 'modules/componentHierarchy';\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n position: absolute;\n bottom: var(--spacing-medium, 20px);\n right: var(--spacing-medium, 20px);\n z-index: ${zDiagramControls};\n`;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n color: var(--grey-darken-33);\n padding: 5px;\n background-color: var(--cm-color-white-base);\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.25);\n border-radius: 2px;\n`;\n\nconst DiagramControlButton = styled.button`\n margin: 0px 5px;\n padding: 0;\n border: none;\n background-color: transparent;\n color: inherit;\n height: 20px;\n width: 20px;\n cursor: pointer;\n outline: none;\n`;\n\nexport const FeedbackButtonSlot = styled.div`\n position: absolute;\n right: 0;\n bottom: 32px;\n`;\n\nexport {Wrapper, ButtonContainer, DiagramControlButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {\n Wrapper,\n ButtonContainer,\n DiagramControlButton,\n FeedbackButtonSlot,\n} from './styled';\nimport {Tooltip} from 'modules/primitives';\nimport {\n Plus,\n Minus,\n Target,\n Map,\n DisableFullscreen,\n EnableFullscreen,\n} from 'modules/icons';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {useRef} from 'react';\nimport {FeedbackButton} from 'modules/types';\n\ntype Props = {\n handleZoomReset: () => void;\n handleZoomIn: () => void;\n handleZoomOut: () => void;\n handleMinimap: () => void;\n FeedbackButton: FeedbackButton;\n};\n\nconst DiagramControls: React.FC<Props> = observer(\n ({\n handleZoomReset,\n handleZoomIn,\n handleZoomOut,\n handleMinimap,\n FeedbackButton,\n }) => {\n const {handleFullscreenToggle} = diagramStore;\n const {isFullscreenActive, isMinimapActive} = diagramStore.state;\n const feedbackButtonSlotRef = useRef(null);\n return (\n <Wrapper>\n <FeedbackButtonSlot ref={feedbackButtonSlotRef}>\n <FeedbackButton\n feedbackButtonSlotRef={feedbackButtonSlotRef}\n from=\"diagram-play\"\n />\n </FeedbackButtonSlot>\n <ButtonContainer>\n <Tooltip\n title={\n isFullscreenActive ? 'Disable fullscreen' : 'Enable fullscreen'\n }\n align=\"top\"\n showOnlyOnOverflow={false}\n >\n <DiagramControlButton\n data-test=\"toggle-fullscreen\"\n onClick={handleFullscreenToggle}\n title=\"Toggle fullscreen mode\"\n >\n {isFullscreenActive ? (\n //@ts-expect-error Property 'width' does not exist on type 'IntrinsicAttributes'.ts(2322)\n <DisableFullscreen width=\"14\" height=\"14\" />\n ) : (\n //@ts-expect-error Property 'width' does not exist on type 'IntrinsicAttributes'.ts(2322)\n <EnableFullscreen width=\"14\" height=\"14\" />\n )}\n </DiagramControlButton>\n </Tooltip>\n <Tooltip\n title=\"Toggle minimap\"\n align=\"top\"\n showOnlyOnOverflow={false}\n >\n <DiagramControlButton\n data-selector=\"minimap-container\"\n data-test=\"toggle-minimap\"\n onClick={handleMinimap}\n title=\"Toggle minimap\"\n >\n <Map\n // @ts-expect-error Property 'height' does not exist on type 'IntrinsicAttributes'.ts(2322)\n height=\"18\"\n style={{\n color:\n isMinimapActive &&\n 'var(--orange-base-60, hsl(34, 100%, 60%))',\n }}\n />\n </DiagramControlButton>\n </Tooltip>\n\n <Tooltip\n title=\"Reset viewport\"\n align=\"top\"\n showOnlyOnOverflow={false}\n >\n <DiagramControlButton\n onClick={handleZoomReset}\n data-test=\"viewport-reset\"\n title=\"Reset viewport\"\n >\n {/* @ts-expect-error Property 'width' does not exist on type 'IntrinsicAttributes' */}\n <Target width=\"15\" height=\"15\" />\n </DiagramControlButton>\n </Tooltip>\n <Tooltip title=\"Zoom out\" align=\"top\" showOnlyOnOverflow={false}>\n <DiagramControlButton\n onClick={handleZoomOut}\n data-test=\"zoom-out\"\n title=\"Zoom out\"\n >\n {/* @ts-expect-error Property 'width' does not exist on type 'IntrinsicAttributes' */}\n <Minus width=\"12\" height=\"12\" />\n </DiagramControlButton>\n </Tooltip>\n <Tooltip title=\"Zoom in\" align=\"top\" showOnlyOnOverflow={false}>\n <DiagramControlButton\n onClick={handleZoomIn}\n data-test=\"zoom-in\"\n title=\"Zoom in\"\n >\n {/* @ts-expect-error Property 'width' does not exist on type 'IntrinsicAttributes' */}\n <Plus width=\"20\" height=\"20\" />\n </DiagramControlButton>\n </Tooltip>\n </ButtonContainer>\n </Wrapper>\n );\n },\n);\n\nDiagramControls.displayName = 'DiagramControls';\nexport {DiagramControls};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {ARROW_SIZE} from 'modules/utils/constants';\nimport styled from 'styled-components';\n\nconst Arrow = styled.div`\n position: absolute;\n width: ${ARROW_SIZE}px;\n height: ${ARROW_SIZE}px;\n background-color: var(--cds-layer);\n transform: rotate(45deg);\n`;\n\nconst Container = styled.div`\n background-color: var(--cds-layer);\n box-shadow: 0 2px 6px var(--cds-shadow);\n color: var(--cds-text-secondary);\n padding: var(--cds-spacing-05);\n`;\n\nexport {Container, Arrow};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {\n Side,\n useFloating,\n arrow,\n Placement,\n autoUpdate,\n Middleware,\n} from '@floating-ui/react-dom';\n\nimport {useEffect, useLayoutEffect, useRef, useState} from 'react';\nimport {Container, Arrow} from './styled';\nimport {isNil} from 'lodash-es';\nimport {createPortal} from 'react-dom';\nimport {ARROW_SIZE} from 'modules/utils/constants';\n\nfunction getArrowPosition({\n side,\n x,\n y,\n}: {\n side: Side;\n x: number;\n y: number;\n}):\n | {bottom: number; left: number}\n | {top: number; right: number}\n | {top: number; left: number} {\n if (side === 'top') {\n return {\n left: x,\n bottom: -(ARROW_SIZE / 2),\n };\n }\n\n if (side === 'bottom') {\n return {\n left: x,\n top: -(ARROW_SIZE / 2),\n };\n }\n\n if (side === 'left') {\n return {\n top: y,\n right: -(ARROW_SIZE / 2),\n };\n }\n\n return {\n top: y,\n left: -(ARROW_SIZE / 2),\n };\n}\n\nfunction getSide(placement: Placement) {\n const [side] = placement.split('-');\n\n return side as Side;\n}\n\nfunction getValueWhenValidNumber(value: number | undefined | null) {\n if (isNil(value) || isNaN(value)) {\n return 0;\n }\n\n return value;\n}\n\ntype Props = {\n referenceElement?: Element | null;\n children: React.ReactNode;\n placement?: Placement;\n className?: string;\n onOutsideClick?: (event: MouseEvent) => void;\n middlewareOptions?: Middleware[];\n autoUpdatePosition?: boolean;\n};\n\nconst Popover: React.FC<Props> = ({\n referenceElement,\n children,\n placement = 'bottom',\n className,\n onOutsideClick,\n middlewareOptions = [],\n autoUpdatePosition = false,\n}) => {\n const arrowElementRef = useRef<HTMLDivElement | null>(null);\n const {\n x,\n y,\n strategy,\n middlewareData,\n placement: actualPlacement,\n refs: {floating, setFloating},\n } = useFloating({\n placement,\n middleware: [...middlewareOptions, arrow({element: arrowElementRef})],\n whileElementsMounted: autoUpdatePosition ? autoUpdate : undefined,\n elements: {\n reference: referenceElement,\n },\n });\n\n const [isHidden, setIsHidden] = useState<boolean>(false);\n\n useEffect(() => {\n if (middlewareData.hide && floating?.current !== null) {\n setIsHidden(!!middlewareData.hide.referenceHidden);\n }\n }, [floating, middlewareData]);\n\n useLayoutEffect(() => {\n const handleClick = (event: MouseEvent) => {\n const target = event.target;\n\n if (target instanceof Element && !floating.current?.contains(target)) {\n onOutsideClick?.(event);\n }\n };\n\n document.body?.addEventListener('click', handleClick, true);\n return () => {\n document.body?.removeEventListener('click', handleClick, true);\n };\n }, [onOutsideClick, floating]);\n\n const {x: arrowX, y: arrowY} = middlewareData.arrow ?? {};\n\n return referenceElement === null\n ? null\n : createPortal(\n <Container\n className={className}\n ref={setFloating}\n style={{\n position: strategy,\n top: getValueWhenValidNumber(y),\n left: getValueWhenValidNumber(x),\n }}\n data-testid=\"play-popover\"\n >\n {!isHidden && (\n <>\n <Arrow\n ref={arrowElementRef}\n style={{\n ...getArrowPosition({\n side: getSide(actualPlacement),\n x: getValueWhenValidNumber(arrowX),\n y: getValueWhenValidNumber(arrowY),\n }),\n }}\n />\n <div>{children}</div>\n </>\n )}\n </Container>,\n document.querySelector(\"[data-test='zeebe-play']\") ?? document.body,\n );\n};\n\nexport {Popover};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\n\nconst Title = styled.div`\n ${styles.headingCompact01};\n`;\n\nexport {Title};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Button as BaseButton} from '@carbon/react';\n\nconst Button: typeof BaseButton = styled(BaseButton)`\n width: 100%;\n`;\n\nexport {Button};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Tooltip} from '@carbon/react';\nimport React from 'react';\n\nconst ButtonTooltipWrapper: React.FC<{\n children: React.ReactNode;\n text?: string;\n align?: React.ComponentProps<typeof Tooltip>['align'];\n}> = ({children, text, align}) => {\n if (text) {\n return (\n <Tooltip align={align} label={text}>\n <div>{children}</div>\n </Tooltip>\n );\n }\n\n return children;\n};\n\nexport {ButtonTooltipWrapper};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport type {CarbonIconType} from '@carbon/icons-react';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {Button} from './styled';\nimport PlayContext from 'modules/PlayContext';\nimport {useContext} from 'react';\nimport {\n AUTHORIZATION_ERROR_CODE,\n MISSING_PERMISSION_ACTION_PROPS,\n MISSING_PERMISSIONS,\n REQUEST_FAILURE,\n} from 'modules/utils/constants';\nimport {ButtonTooltipWrapper} from 'modules/components/ButtonTooltipWrapper';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\ntype Props = {\n title: string;\n label: string;\n renderIcon: CarbonIconType;\n onClick: () => Promise<{success: boolean; status: number}> | void;\n notificationTitle?: string;\n};\n\nconst ModificationButton: React.FC<Props> = observer(\n ({title, label, renderIcon, onClick, notificationTitle}) => {\n const context = useContext(PlayContext);\n const authType = playEnvironmentStore.authType;\n\n return (\n <ButtonTooltipWrapper align=\"right\" text={title}>\n <Button\n kind=\"ghost\"\n size=\"sm\"\n renderIcon={renderIcon}\n onClick={async () => {\n const response = await onClick();\n\n if (notificationTitle === undefined || response === undefined) {\n flowNodeSelectionStore.clearSelection();\n return;\n }\n\n if (response?.success) {\n context.displayNotification?.info({\n title: notificationTitle,\n });\n } else if (response?.status === AUTHORIZATION_ERROR_CODE) {\n context.displayNotification?.error(\n {\n title: MISSING_PERMISSIONS,\n subtitle: `Please contact your ${authType === 'sm' ? 'admin' : 'organization owner or admin'} to give you the necessary permissions to modify this instance.`,\n },\n MISSING_PERMISSION_ACTION_PROPS,\n );\n } else {\n context.displayNotification?.error(REQUEST_FAILURE);\n }\n\n flowNodeSelectionStore.clearSelection();\n }}\n >\n {label}\n </Button>\n </ButtonTooltipWrapper>\n );\n },\n);\n\nexport {ModificationButton};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {Stack} from '@carbon/react';\nimport {flip, offset} from '@floating-ui/react-dom';\nimport {Add, ArrowRight, Error} from '@carbon/icons-react';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {Popover} from 'modules/components/Popover';\nimport {Title} from './styled';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {ModificationButton} from './ModificationButton';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport {pluralSuffix} from 'modules/utils/pluralSuffix';\nimport trackingService from 'modules/services/TrackingService';\n\ntype Props = {\n selectedFlowNodeRef?: SVGElement;\n diagramCanvasRef?: React.RefObject<HTMLDivElement>;\n};\n\nconst ModificationDropdown: React.FC<Props> = observer(\n ({selectedFlowNodeRef, diagramCanvasRef}) => {\n const selectedFlowNodeId =\n flowNodeSelectionStore.state.selection?.flowNodeId;\n const selectedFlowNodeName =\n flowNodeSelectionStore.state.selection?.flowNodeName;\n\n const {\n state: {processInstance},\n isRunning,\n } = processInstanceStore;\n\n const {availableModifications, canSelectedFlowNodeBeModified} =\n modificationsStore;\n\n if (\n processInstance === undefined ||\n selectedFlowNodeId === undefined ||\n !isRunning ||\n !canSelectedFlowNodeBeModified\n ) {\n return null;\n }\n\n return (\n <Popover\n referenceElement={selectedFlowNodeRef}\n middlewareOptions={[\n offset(10),\n flip({\n fallbackPlacements: ['top', 'left', 'right'],\n boundary: diagramCanvasRef?.current ?? undefined,\n }),\n ]}\n autoUpdatePosition\n >\n <Stack gap={3}>\n <Title>Flow node modifications</Title>\n <Stack gap={4}>\n <Stack gap={2}>\n {availableModifications.includes('add') && (\n <ModificationButton\n renderIcon={Add}\n title=\"Add single flow node instance\"\n label=\"Add\"\n onClick={async () => {\n const {success, status} = await zeebePlayService.modify({\n processInstanceKey: processInstance.key,\n activateInstructions: [\n {\n elementId: selectedFlowNodeId,\n ancestorElementInstanceKey: -1,\n variableInstructions: [],\n },\n ],\n });\n\n if (success) {\n trackingService.applyModifictation('add-token');\n }\n\n return {success, status};\n }}\n notificationTitle={`Adding token on ${selectedFlowNodeName}`}\n />\n )}\n {availableModifications.includes('cancel-all') && (\n <>\n {(() => {\n const terminateInstructions =\n elementInstancesStore.state.elementInstances\n .filter(\n ({state, flowNodeId}) =>\n !['COMPLETED', 'TERMINATED'].includes(state) &&\n flowNodeId === selectedFlowNodeId,\n )\n .map(({key}) => ({\n elementInstanceKey: key,\n }));\n return (\n <ModificationButton\n renderIcon={Error}\n title=\"Cancel all running flow node instances in this flow node\"\n label=\"Cancel all\"\n onClick={async () => {\n const {success, status} =\n await zeebePlayService.modify({\n processInstanceKey: processInstance.key,\n terminateInstructions,\n });\n\n if (success) {\n trackingService.applyModifictation('cancel-token');\n }\n\n return {success, status};\n }}\n notificationTitle={`Canceling ${pluralSuffix(terminateInstructions.length, 'token')} on ${selectedFlowNodeName}`}\n />\n );\n })()}\n </>\n )}\n {availableModifications.includes('move-all') && (\n <ModificationButton\n renderIcon={ArrowRight}\n title=\"Move all running instances in this flow node to another target\"\n label=\"Move all\"\n onClick={() => {\n modificationsStore.startMovingToken(selectedFlowNodeId);\n flowNodeSelectionStore.clearSelection();\n }}\n />\n )}\n </Stack>\n </Stack>\n </Stack>\n </Popover>\n );\n },\n);\n\nexport {ModificationDropdown};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {ModelerWarning} from 'modules/icons';\n\nconst WarningIcon = styled(ModelerWarning)`\n // taken and adapted from https://github.com/camunda/linting/blob/4f070d31dc615b26dd9352fffbfaa06f3d772f58/assets/linting.css#L14\n position: absolute;\n --icon-bg-color: var(--cl-color-warning, #ff832b);\n\n background: var(--icon-bg-color);\n color: white;\n border-radius: 100%;\n height: 20px;\n width: 20px;\n border: solid 4px var(--icon-bg-color);\n`;\n\nexport {WarningIcon};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {observer} from 'mobx-react';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {WarningIcon} from './styled';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst ConnectorSecretOverlay: React.FC<Props> = observer(({element}) => {\n const {authType} = playEnvironmentStore;\n if (authType === 'sm') {\n return;\n }\n\n const {connectorElementsWithMissingSecrets} = connectorsStore;\n\n const missingSecret = connectorElementsWithMissingSecrets.find(\n (connector) => connector.element.id === element.id,\n )?.missingSecrets?.[0];\n\n if (missingSecret === undefined) {\n return;\n }\n\n return <WarningIcon data-testid=\"not-found-icon\" />;\n});\n\nConnectorSecretOverlay.displayName = 'ConnectorSecretOverlay';\nexport {ConnectorSecretOverlay};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {PROBLEM} from 'modules/utils/overlayPositions';\nimport {createPortal} from 'react-dom';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {ConnectorSecretOverlay} from 'Definition/ConnectorSecretOverlay';\nimport {WarningIcon} from './styled';\nimport {diagramStore} from 'modules/stores/diagram';\n\ntype Props = {\n element: ElementLike;\n addOverlay: (\n element: ElementLike,\n type: string,\n position: unknown,\n ) => HTMLDivElement;\n};\n\nconst ProblemOverlay: React.FC<Props> = observer(({element, addOverlay}) => {\n const {instanceKey} = processInstanceStore.state;\n const {fileProblems} = playEnvironmentStore;\n\n if (instanceKey) {\n return;\n }\n\n const problem = fileProblems.find(\n (file) => file.elementBusinessObject.id === element.id,\n );\n\n if (problem) {\n const node = addOverlay(element, 'PROBLEM', PROBLEM);\n return createPortal(<WarningIcon data-testid=\"not-found-icon\" />, node);\n }\n\n const hasExecutionListener = diagramStore.elementsWithExecutionListeners.some(\n ({businessObject}) => businessObject.id === element.id,\n );\n\n if (hasExecutionListener) {\n const node = addOverlay(element, 'EXECUTION_LISTENER_WARNING', PROBLEM);\n return createPortal(\n <WarningIcon data-testid=\"execution-listener-warning\" />,\n node,\n );\n }\n\n const {\n state: {connectorElementsWithSecrets},\n } = connectorsStore;\n\n const connector = connectorElementsWithSecrets?.find(\n (connector) => connector.element.id === element.id,\n );\n\n if (connector) {\n const node = addOverlay(element, 'CONNECTOR', PROBLEM);\n return createPortal(<ConnectorSecretOverlay element={element} />, node);\n }\n});\n\nProblemOverlay.displayName = 'ProblemOverlay';\nexport {ProblemOverlay};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect} from 'react';\nimport {observer} from 'mobx-react';\n\nimport {ElementLike} from 'diagram-js/lib/core/ElementRegistry';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\n\ntype Props = {\n element: ElementLike;\n};\n\nconst FlowNodeHighlighter: React.FC<Props> = observer(({element}) => {\n const {isInstanceDetailPageVisible} = processInstanceStore;\n\n const coveredFlowNodeIds = scenariosStore.isSingleScenarioSelected\n ? scenariosStore.coveredFlowNodeIdsForSelectedScenario\n : scenariosStore.allCoveredFlowNodes.map(({flowNodeId}) => flowNodeId);\n\n const isScenariosTabVisible = bottomBarStore.state.activeTab === 'scenarios';\n\n useEffect(() => {\n const shouldHighlightFlowNodes =\n !isInstanceDetailPageVisible &&\n coveredFlowNodeIds.length > 0 &&\n isScenariosTabVisible;\n\n if (!shouldHighlightFlowNodes) {\n return;\n }\n\n if (coveredFlowNodeIds.includes(element.id)) {\n diagramStore.state.viewer?.addMarker(element.id, 'play-flow-node-taken');\n } else {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-flow-node-taken',\n );\n }\n\n return () => {\n diagramStore.state.viewer?.removeMarker(\n element.id,\n 'play-flow-node-taken',\n );\n };\n }, [\n isInstanceDetailPageVisible,\n isScenariosTabVisible,\n element,\n coveredFlowNodeIds,\n ]);\n\n return null;\n});\n\nFlowNodeHighlighter.displayName = 'FlowNodeHighlighter';\nexport {FlowNodeHighlighter};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {ActionableNotification as BaseActionableNotification} from '@carbon/react';\nimport {zClusterWarning} from 'modules/componentHierarchy';\n\nconst notificationMargin = '40px';\n\nconst ActionableNotification = styled(BaseActionableNotification)`\n position: absolute;\n top: var(--cds-spacing-05);\n z-index: ${zClusterWarning};\n max-inline-size: unset;\n margin: 0 ${notificationMargin};\n max-width: calc(100% - calc(2 * ${notificationMargin}));\n`;\n\nexport {ActionableNotification};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React from 'react';\nimport {ActionableNotification} from './styled';\nimport {observer} from 'mobx-react';\nimport {clusterStore} from 'modules/stores/cluster';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\n\nconst ClusterUnavailableNotification: React.FC = observer(() => {\n if (clusterStore.isClusterHealthy) {\n return null;\n }\n\n const clusterName = clusterStore.state.cluster?.name;\n const clusterId = clusterStore.state.cluster?.uuid;\n\n return (\n <ActionableNotification\n inline\n kind=\"error\"\n hideCloseButton\n statusIconDescription=\"notification\"\n subtitle={`The cluster ${clusterName ? `'${clusterName}' ` : ''}is unavailable. Please select 'Manage cluster' to review and resolve the issue in the Console.`}\n title=\"Cluster Unavailable\"\n onActionButtonClick={() => {\n window.open(\n `${playEnvironmentStore.consoleDashboardPageUrl}/cluster/${clusterId}`,\n '_blank',\n );\n }}\n actionButtonLabel=\"Manage cluster\"\n />\n );\n});\n\nClusterUnavailableNotification.displayName = 'ClusterUnavailableNotification';\nexport {ClusterUnavailableNotification};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport React, {useRef, useEffect, useLayoutEffect} from 'react';\nimport {BpmnJS} from 'modules/bpmn-js/BpmnJS';\nimport {Diagram as StyledDiagram, DiagramCanvas} from './styled';\nimport {observer} from 'mobx-react';\nimport {DiagramOverlay} from 'PlayMode/DiagramOverlay';\nimport {DiagramControls} from './DiagramControls';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {flowNodeSelectionStore} from 'modules/stores/flowNodeSelection';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ModificationDropdown} from 'Instance/ModificationDropdown';\nimport {FeedbackButton} from 'modules/types';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport {ProblemOverlay} from 'Definition/ProblemOverlay';\nimport {FlowNodeHighlighter} from 'Definition/FlowNodeHighlighter';\nimport {ClusterUnavailableNotification} from './ClusterUnavailableNotification';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {removeBioc} from 'modules/utils/removeBioc';\n\ntype Props = {\n FeedbackButton: FeedbackButton;\n};\n\nconst Diagram: React.FC<Props> = observer(({FeedbackButton}) => {\n const xml = playEnvironmentStore.xmlToDisplay;\n const diagramCanvasRef = useRef<HTMLDivElement | null>(null);\n const viewerRef = useRef<BpmnJS | null>(null);\n const isMovingToken = modificationsStore.isMovingToken;\n const selectableFlowNodeIds = diagramStore.selectableFlowNodeIds;\n const selectedFlowNodeId = flowNodeSelectionStore.state.selection?.flowNodeId;\n const instanceKey = processInstanceStore.state.instanceKey;\n\n function getViewer() {\n if (viewerRef.current === null) {\n viewerRef.current = new BpmnJS();\n }\n return viewerRef.current;\n }\n const viewer = getViewer();\n\n useLayoutEffect(() => {\n async function renderDiagram() {\n if (xml && diagramCanvasRef.current) {\n const selectedFlowNodeIds = selectedFlowNodeId\n ? [selectedFlowNodeId]\n : undefined;\n\n diagramStore.startLoading();\n const content = removeBioc(xml);\n await diagramStore.setDiagramDetails(content);\n\n await viewer.render({\n container: diagramCanvasRef.current,\n xml,\n selectableFlowNodeIds,\n selectedFlowNodeIds,\n showModificationNotSupportedTooltip: isMovingToken,\n });\n diagramStore.finishLoading(viewer);\n }\n }\n\n renderDiagram();\n }, [xml, viewer, selectableFlowNodeIds, selectedFlowNodeId, isMovingToken]);\n\n useEffect(() => {\n return () => {\n viewer.reset();\n };\n }, [viewer]);\n\n return (\n <StyledDiagram data-testid=\"diagram\">\n <ClusterUnavailableNotification />\n <DiagramCanvas\n ref={diagramCanvasRef}\n $isSelectionAllowed={instanceKey !== undefined}\n />\n {diagramStore.state.isLoaded && (\n <>\n <DiagramControls\n handleZoomIn={viewer.zoomIn}\n handleZoomOut={viewer.zoomOut}\n handleZoomReset={viewer.zoomReset}\n handleMinimap={viewer.toggleMinimap}\n FeedbackButton={FeedbackButton}\n />\n\n {diagramStore.elements?.map((element) => (\n <DiagramOverlay\n key={element.id}\n element={element}\n addOverlay={viewer.addOverlay}\n />\n ))}\n {diagramStore.elements?.map((element) => (\n <ProblemOverlay\n key={element.id}\n element={element}\n addOverlay={viewer.addOverlay}\n />\n ))}\n\n {selectedFlowNodeId !== undefined && (\n <ModificationDropdown\n selectedFlowNodeRef={viewer.selectedFlowNode}\n diagramCanvasRef={diagramCanvasRef}\n />\n )}\n {diagramStore.elements?.map((element) => (\n <FlowNodeHighlighter key={element.id} element={element} />\n ))}\n </>\n )}\n </StyledDiagram>\n );\n});\n\nDiagram.displayName = 'Diagram';\nexport {Diagram};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {CamundaChampion as BaseCamundaChampion} from 'modules/icons';\n\nconst SuccessIconWrapper = styled.div`\n height: 180px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--border-border-subtle-selected-01, #c6c6c6);\n margin-bottom: var(--cds-spacing-05, 16px);\n`;\n\nconst CamundaChampion = styled(BaseCamundaChampion)`\n width: 45px;\n height: 45px;\n animation: grow 1200ms forwards;\n\n @keyframes grow {\n from {\n width: 45px;\n height: 45px;\n }\n to {\n width: 180px;\n height: 180px;\n }\n }\n`;\n\nexport {CamundaChampion, SuccessIconWrapper};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {Modal} from '@carbon/react';\n\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {CamundaChampion, SuccessIconWrapper} from './styled';\nimport {useContext} from 'react';\nimport PlayContext from 'modules/PlayContext';\nimport {\n generateHistoryKey,\n getUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {\n getFirstProcessCompleted,\n setFirstProcessCompleted,\n} from 'modules/utils/firstProcessCompletionHelper';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {REQUEST_FAILURE} from 'modules/utils/constants';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\nimport {SaveScenarioModal} from 'Instance/InstanceHeader/SaveScenario/SaveSenarioModal';\nimport {sequenceFlowsStore} from 'modules/stores/sequenceFlows';\nimport {scenariosStore} from 'modules/stores/scenarios';\n\nconst ProcessInstanceSuccessfullyCompletedModal: React.FC = observer(() => {\n const context = useContext(PlayContext);\n const {instanceKey, processInstance, isProcessManuallyCompleted} =\n processInstanceStore.state;\n const {isCalledProcess} = processInstanceStore;\n\n const bpmnProcessId = processInstance?.bpmnProcessId;\n\n if (\n bpmnProcessId === undefined ||\n instanceKey === undefined ||\n !isProcessManuallyCompleted ||\n getFirstProcessCompleted() ||\n isCalledProcess\n ) {\n return null;\n }\n\n if (!getFirstProcessCompleted()) {\n setFirstProcessCompleted();\n }\n\n if (context.featureFlags.isReplayScenariosEnabled) {\n return (\n <SaveScenarioModal\n title=\"Scenario recorded!\"\n isOpen={processInstanceStore.state.isProcessManuallyCompleted}\n onScenarioSaved={async (scenarioName) => {\n try {\n await scenariosStore.addScenario({\n processId: bpmnProcessId,\n name: scenarioName,\n processInstanceId: instanceKey,\n actions: getUserActionHistory(generateHistoryKey(instanceKey)),\n coveredFlowNodes: elementInstancesStore.elementInstancesWithType,\n coveredSequenceFlows: sequenceFlowsStore.state.sequenceFlows,\n });\n } catch {\n context.displayNotification?.error(REQUEST_FAILURE);\n return;\n }\n\n processInstanceStore.setScenarioName(scenarioName);\n context.displayNotification?.success(\n {\n title: 'Scenario saved',\n subtitle: `${scenarioName} was successfully saved.`,\n },\n {\n action: {\n label: 'View scenario',\n onClick: () => {\n bottomBarStore.setActiveTab('scenarios');\n processInstanceStore.reset();\n },\n },\n },\n );\n }}\n onClose={() => {\n processInstanceStore.setIsProcessManuallyCompleted(false);\n }}\n topContent={\n <SuccessIconWrapper>\n <CamundaChampion />\n </SuccessIconWrapper>\n }\n />\n );\n }\n\n return (\n <Modal\n open={processInstanceStore.state.isProcessManuallyCompleted}\n size=\"md\"\n modalHeading=\"Congratulations, you did it!\"\n primaryButtonText=\"Go to Implement mode\"\n onRequestClose={() => {\n processInstanceStore.setIsProcessManuallyCompleted(false);\n }}\n onRequestSubmit={() => {\n context.switchToImplementMode?.();\n }}\n preventCloseOnClickOutside\n >\n <SuccessIconWrapper>\n <CamundaChampion />\n </SuccessIconWrapper>\n <p>You’ve successfully completed your process in Play.</p>\n <br />\n <p>Let’s make your work even more efficient!</p>\n <p>\n <b>Deploy</b> your process to a live cluster from Implement mode to see\n it in action.\n </p>\n </Modal>\n );\n});\n\nProcessInstanceSuccessfullyCompletedModal.displayName =\n 'ProcessInstanceSuccessfullyCompletedModal';\nexport {ProcessInstanceSuccessfullyCompletedModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {reaction} from 'mobx';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {elementInstancesStore} from 'modules/stores/elementInstances';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {DisplayNotification, FlowNodeInstance} from 'modules/types';\n\nfunction observeBusinessRuleTaskCompletion(\n displayNotification?: DisplayNotification,\n) {\n return reaction(\n () => elementInstancesStore.elementInstances,\n (\n currentElementInstances: Array<FlowNodeInstance>,\n previousElementInstances: Array<FlowNodeInstance>,\n ) => {\n // if the process was not started in the current viewer, we don't want to show notifications for already completed elements.\n if (\n previousElementInstances.length === 0 &&\n processInstanceStore.state.instanceType !== 'NEW_INSTANCE'\n ) {\n return;\n }\n\n const currentCompletedBusinessRuleTasks = currentElementInstances.filter(\n (instance) =>\n instance.type === 'BUSINESS_RULE_TASK' &&\n instance.state === 'COMPLETED',\n );\n\n const previouslyCompletedBusinessRuleTasksKeys = previousElementInstances\n .filter(\n (instance) =>\n instance.type === 'BUSINESS_RULE_TASK' &&\n instance.state === 'COMPLETED',\n )\n .map(({key}) => key);\n\n const newlyCompletedBusinessRuleTasks =\n currentCompletedBusinessRuleTasks.filter(\n ({key}) => !previouslyCompletedBusinessRuleTasksKeys.includes(key),\n );\n\n newlyCompletedBusinessRuleTasks.forEach(({flowNodeName, flowNodeId}) => {\n displayNotification?.success({\n title: `\"${flowNodeName || flowNodeId}\" business rule task completed`,\n });\n });\n },\n );\n}\n\nfunction observeEventSubProcessStart(\n displayNotification?: DisplayNotification,\n) {\n return reaction(\n () => elementInstancesStore.elementInstances,\n (\n currentElementInstances: Array<FlowNodeInstance>,\n previousElementInstances: Array<FlowNodeInstance>,\n ) => {\n // if the process was not started in the current viewer, we don't want to show notifications for already completed elements.\n if (\n previousElementInstances.length === 0 &&\n processInstanceStore.state.instanceType !== 'NEW_INSTANCE'\n ) {\n return;\n }\n\n const currentStartedEventSubProcesses = currentElementInstances.filter(\n (instance) => instance.type === 'EVENT_SUB_PROCESS',\n );\n\n const previouslyStartedEventSubProcesses = previousElementInstances\n .filter((instance) => instance.type === 'EVENT_SUB_PROCESS')\n .map(({key}) => key);\n\n const newlyStartedEventSubProcesses =\n currentStartedEventSubProcesses.filter(\n ({key}) => !previouslyStartedEventSubProcesses.includes(key),\n );\n\n newlyStartedEventSubProcesses.forEach(({flowNodeName, flowNodeId}) => {\n displayNotification?.success(\n {\n title: `\"${flowNodeName || flowNodeId}\" event sub-process started`,\n },\n {\n action: {\n label: 'Go to sub-process',\n onClick: () => {\n diagramStore.focusOnElement(flowNodeId);\n },\n },\n },\n );\n });\n },\n );\n}\n\nexport {observeBusinessRuleTaskCompletion, observeEventSubProcessStart};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {zLoadingOverlay} from 'modules/componentHierarchy';\nimport styled from 'styled-components';\nimport {styles} from '@carbon/elements';\nimport {Stack} from '@carbon/react';\n\nconst Container = styled(Stack)`\n position: absolute;\n width: 100%;\n top: 0;\n bottom: 0;\n background-color: var(--cds-overlay);\n color: white;\n z-index: ${zLoadingOverlay};\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n ${styles.heading02};\n`;\n\nexport {Container};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {Loading} from '@carbon/react';\nimport {Container} from './styled';\n\ntype Props = {\n description: string | null;\n};\n\nconst LoadingOverlay: React.FC<Props> = ({description}) => {\n if (description === null) {\n return null;\n }\n\n return (\n <Container gap={5}>\n <Loading withOverlay={false} />\n {description}\n </Container>\n );\n};\n\nexport {LoadingOverlay};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nconst getDescription = ({\n isLoadingProcessInstanceDetails,\n isRewinding,\n}: {\n isLoadingProcessInstanceDetails: boolean;\n isRewinding: boolean;\n}) => {\n if (isLoadingProcessInstanceDetails) {\n return 'Loading instance details...';\n }\n\n if (isRewinding) {\n return 'Rewinding...';\n }\n\n return null;\n};\n\nexport {getDescription};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport styled from 'styled-components';\nimport {Stack} from '@carbon/react';\nimport {styles} from '@carbon/elements';\n\nexport const Container = styled(Stack)`\n ${styles.bodyCompact01};\n`;\n\nexport const Text = styled.p`\n ${styles.body01};\n`;\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {Link, ListItem, Modal, Stack, UnorderedList} from '@carbon/react';\nimport {Text} from './styled';\nimport {generateTestScenarioFileLink} from '../../../modules/utils/generate-test-scenario-file-link';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n fileName?: string;\n fileId?: string;\n};\n\nconst ScenariosMigratedModal: React.FC<Props> = observer(\n ({open, fileName, fileId, onClose}) => {\n return (\n <Modal\n open={open}\n modalHeading=\"Scenarios are now stored in files\"\n primaryButtonText=\"Got it\"\n onRequestClose={onClose}\n onRequestSubmit={onClose}\n >\n <Stack gap={5}>\n <Text>\n Your scenarios have been migrated from local storage into a new Test\n scenarios file:{' '}\n {fileId ? (\n <Link\n href={generateTestScenarioFileLink({fileId})}\n target=\"_blank\"\n inline\n >\n {fileName}\n </Link>\n ) : (\n fileName\n )}\n </Text>\n <UnorderedList nested>\n <ListItem>\n The file is automatically linked to your BPMN diagram\n </ListItem>\n <ListItem>All your existing scenarios are included</ListItem>\n <ListItem>\n From now on, new scenarios will be saved in this file instead of\n local storage\n </ListItem>\n </UnorderedList>\n <Text>\n Read more about test scenarios files in the{' '}\n <Link\n href=\"https://docs.camunda.io/docs/next/components/modeler/web-modeler/advanced-modeling/test-scenario-files/\"\n target=\"_blank\"\n inline\n >\n documentation.\n </Link>\n </Text>\n </Stack>\n </Modal>\n );\n },\n);\n\nScenariosMigratedModal.displayName = 'ScenariosMigratedModal';\nexport {ScenariosMigratedModal};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {when} from 'mobx';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {Scenario} from 'modules/types';\nimport {\n archiveScenarioHistory,\n getScenarioHistory,\n} from 'modules/utils/scenarioHistory';\nimport {useCallback, useEffect, useState} from 'react';\n\nexport function useMigrateScenarios({\n processId,\n projectId,\n folderId,\n}: {\n processId: string;\n projectId?: string;\n folderId?: string;\n}) {\n const [\n isMigrationCompletedModalVisible,\n setIsMigrationCompletedModalVisible,\n ] = useState(false);\n const [fileName, setFileName] = useState<string>();\n const [fileId, setFileId] = useState<string>();\n\n const migrateScenarios = useCallback(\n async ({\n processId,\n projectId,\n folderId,\n legacyScenarios,\n }: {\n processId: string;\n projectId: string;\n folderId: string;\n legacyScenarios: Scenario[];\n }) => {\n const result = await scenariosStore.createTestScenarioFile({\n projectId,\n processId,\n folderId,\n scenarios: legacyScenarios,\n shouldDisplayNotificationOnFailure: false,\n });\n\n if (!result.isSuccess) {\n console.error(\n 'Failed to create test scenarios file during migration.',\n 'Error message:',\n result.errorMessage,\n 'Local storage scenarios:',\n legacyScenarios,\n );\n // Enable local storage fallback when migration fails\n scenariosStore.setUseLocalStorage(true);\n scenariosStore.loadScenarios(processId);\n return;\n }\n scenariosStore.setUseLocalStorage(false);\n scenariosStore.loadScenarios(processId);\n\n setFileName(result.fileName);\n setFileId(result.fileId);\n setIsMigrationCompletedModalVisible(true);\n archiveScenarioHistory(processId);\n },\n [],\n );\n\n useEffect(() => {\n const legacyScenarios = getScenarioHistory(processId);\n\n const migrateScenariosDisposer = when(\n () =>\n projectId !== undefined &&\n folderId !== undefined &&\n scenariosStore.state.status === 'fetched' &&\n legacyScenarios.length > 0,\n () => {\n migrateScenarios({\n processId,\n projectId: projectId!,\n folderId: folderId!,\n legacyScenarios,\n });\n },\n );\n\n return () => {\n migrateScenariosDisposer();\n };\n }, [processId, projectId, folderId, migrateScenarios]);\n\n return {\n fileName,\n fileId,\n migrateScenarios,\n isMigrationCompletedModalVisible,\n setIsMigrationCompletedModalVisible,\n };\n}\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {observer} from 'mobx-react';\nimport {ScenariosMigratedModal} from './ScenariosMigratedModal';\nimport {useMigrateScenarios} from './use-migrate-scenarios';\n\ntype Props = {\n processId: string;\n folderId?: string;\n projectId?: string;\n};\n\nconst MigrationFromLegacyScenarios: React.FC<Props> = observer(\n ({processId, projectId, folderId}) => {\n const {\n fileName,\n fileId,\n isMigrationCompletedModalVisible,\n setIsMigrationCompletedModalVisible,\n } = useMigrateScenarios({processId, projectId, folderId});\n\n return (\n <ScenariosMigratedModal\n open={isMigrationCompletedModalVisible}\n onClose={() => {\n setIsMigrationCompletedModalVisible(false);\n }}\n fileName={fileName}\n fileId={fileId}\n />\n );\n },\n);\n\nMigrationFromLegacyScenarios.displayName = 'MigrationFromLegacyScenarios';\nexport {MigrationFromLegacyScenarios};\n","/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a proprietary license.\n * See the License.txt file for more information. You may not use this file\n * except in compliance with the proprietary license.\n */\n\nimport {useEffect, useState} from 'react';\nimport {Dict} from 'mixpanel-browser';\n\nimport usePlayInitialization from 'modules/hooks/usePlayInitialization';\nimport PlayContext, {ContextType} from 'modules/PlayContext';\nimport trackingService from 'modules/services/TrackingService';\nimport zeebePlayService from 'modules/services/ZeebePlayService';\n\nimport InstanceHeader from '../Instance/InstanceHeader';\nimport {BottomBar} from '../BottomBar';\nimport {StartModal} from '../StartModal';\nimport {Diagram} from './Diagram';\nimport {processInstanceStore} from 'modules/stores/processInstance';\nimport {ProcessInstanceSuccessfullyCompletedModal} from 'Instance/ProcessInstanceSuccessfullyCompletedModal';\nimport {connectorsStore} from 'modules/stores/connectors';\nimport {playEnvironmentStore} from 'modules/stores/playEnvironment';\nimport {\n AuthConfig,\n CreateFunction,\n DeploymentHelpers,\n DisplayNotification,\n FeedbackButton,\n ProcessInstanceDetail,\n TestScenarioFileHelpers,\n UpdateFunction,\n} from 'modules/types';\nimport {\n observeBusinessRuleTaskCompletion,\n observeEventSubProcessStart,\n} from 'PlayMode/NotificationSystem';\nimport {reaction} from 'mobx';\nimport {diagramStore} from 'modules/stores/diagram';\nimport {\n generateHistoryKey,\n updateUserActionHistory,\n} from 'modules/utils/userActionHistory';\nimport {rewindStore} from 'modules/stores/rewind';\nimport {retryWrapper} from 'modules/utils/retryWrapper';\nimport {modificationsStore} from 'modules/stores/modifications';\nimport {bottomBarStore} from 'modules/stores/bottomBar';\nimport {scenariosStore} from 'modules/stores/scenarios';\nimport {clusterStore} from 'modules/stores/cluster';\nimport {LoadingOverlay} from './LoadingOverlay';\nimport {getDescription} from './LoadingOverlay/getDescription';\nimport {MigrationFromLegacyScenarios} from 'Instance/InstanceHeader/MigrationFromLegacyScenarios';\n\ntype Props = DeploymentHelpers &\n TestScenarioFileHelpers & {\n authConfig: AuthConfig;\n monacoLoaderConfig: {\n paths?:\n | {\n vs?: string | undefined;\n }\n | undefined;\n };\n featureFlags?: {\n isSaveExampleDataEnabled?: boolean;\n areAIFeaturesEnabled?: boolean;\n isReplayScenariosEnabled?: boolean;\n shouldUseOrchestrationClusterAPI?: boolean;\n areUserTasksWithJobImplementationDeprecated?: boolean;\n };\n xml: string;\n switchToImplementMode?: (shouldOpenOutputTab?: boolean) => void;\n mixpanelTrack?: (event: string, data: Dict | undefined) => void;\n displayNotification?: DisplayNotification;\n processId: string;\n projectId?: string;\n folderId?: string;\n processName?: string;\n isUserOrgOwnerOrAdmin?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handlePostRequest: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleGetRequest: any;\n consoleDashboardPageUrl: string;\n organizationManagementPageUrl?: string;\n currentDiagramRevision: number;\n updateFileById: UpdateFunction;\n createFile: CreateFunction;\n originAppInstanceId: string;\n canUserSaveExampleData: boolean;\n diagramId?: string;\n FeedbackButton: FeedbackButton;\n };\n\nconst PlayMode: React.FC<Props> = ({\n authConfig,\n monacoLoaderConfig,\n xml,\n switchToImplementMode,\n onDeploymentError,\n projectId,\n folderId,\n processId,\n processName,\n displayNotification,\n mixpanelTrack,\n handleGetRequest,\n handlePostRequest,\n fetchFilesByProcessId,\n fetchFilesByDecisionId,\n fetchFilesByFormId,\n fetchFileById,\n fetchTestsByProcessId,\n createFile,\n featureFlags,\n consoleDashboardPageUrl,\n isUserOrgOwnerOrAdmin,\n organizationManagementPageUrl,\n currentDiagramRevision,\n updateFileById,\n originAppInstanceId,\n canUserSaveExampleData,\n diagramId,\n FeedbackButton,\n}) => {\n const shouldUseOrchestrationClusterAPI =\n featureFlags?.shouldUseOrchestrationClusterAPI;\n const authType = authConfig?.type;\n const operateBaseUrl = authConfig?.config?.operateBaseUrl;\n const clusterId =\n authType === 'saas' ? authConfig.config.clusterId : undefined;\n\n const [isStartModalVisible, setIsStartModalVisible] = useState(true);\n\n const [isLoadingProcessInstanceDetails, setIsLoadingProcessInstanceDetails] =\n useState(false);\n\n useEffect(\n () =>\n reaction(\n () =>\n processInstanceStore.state.status === 'first-fetch' &&\n processInstanceStore.state.instanceType !== 'REWOUND_INSTANCE',\n (isLoadingProcessInstance) => {\n setIsLoadingProcessInstanceDetails(isLoadingProcessInstance);\n },\n ),\n [],\n );\n\n const [isRewinding, setIsRewinding] = useState(false);\n\n useEffect(\n () =>\n reaction(\n () => rewindStore.state.isRewinding,\n (isRewinding) => {\n setIsRewinding(isRewinding);\n },\n ),\n [],\n );\n\n useEffect(() => {\n if (authType === 'saas') {\n clusterStore.init();\n }\n\n bottomBarStore.init(featureFlags?.isReplayScenariosEnabled);\n\n return () => {\n if (authType === 'saas') {\n clusterStore.reset();\n }\n\n processInstanceStore.reset();\n connectorsStore.reset();\n playEnvironmentStore.reset();\n diagramStore.reset();\n bottomBarStore.reset();\n scenariosStore.reset();\n };\n }, [featureFlags?.isReplayScenariosEnabled, authType]);\n\n useEffect(() => {\n if (authType === 'saas' && !clusterId) {\n return;\n }\n\n trackingService.init({mixpanelTrack, processId, diagramId});\n zeebePlayService.init({\n authConfig,\n handlePostRequest,\n handleGetRequest,\n shouldUseOrchestrationClusterAPI,\n });\n\n modificationsStore.init({\n displayNotification,\n isSelfManagedEnv: authType === 'sm',\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n clusterId,\n authType,\n processId,\n diagramId,\n shouldUseOrchestrationClusterAPI,\n ]);\n\n useEffect(() => {\n playEnvironmentStore.init({\n projectId,\n folderId,\n processId,\n processName,\n fetchFilesByProcessId,\n fetchFilesByDecisionId,\n fetchFileById,\n fetchFilesByFormId,\n onDeploymentError,\n xml,\n consoleDashboardPageUrl,\n clusterId,\n currentDiagramRevision,\n updateFileById,\n originAppInstanceId,\n canUserSaveExampleData,\n diagramId,\n authType,\n operateBaseUrl,\n });\n }, [\n processId,\n projectId,\n folderId,\n processName,\n clusterId,\n fetchFilesByProcessId,\n fetchFilesByDecisionId,\n fetchFileById,\n fetchFilesByFormId,\n onDeploymentError,\n xml,\n consoleDashboardPageUrl,\n currentDiagramRevision,\n updateFileById,\n originAppInstanceId,\n canUserSaveExampleData,\n diagramId,\n authType,\n operateBaseUrl,\n ]);\n\n useEffect(() => {\n scenariosStore.init({\n fetchTestsByProcessId,\n displayNotification,\n createFile,\n updateFileById,\n originAppInstanceId,\n });\n }, [\n fetchTestsByProcessId,\n displayNotification,\n originAppInstanceId,\n createFile,\n updateFileById,\n ]);\n\n const playInfo = usePlayInitialization({\n authType,\n clusterId,\n displayNotification,\n });\n\n useEffect(() => {\n if (!isRewinding) {\n const observeBusinessRuleTaskCompletionDisposer =\n observeBusinessRuleTaskCompletion(displayNotification);\n const observeEventSubProcessStartDisposer =\n observeEventSubProcessStart(displayNotification);\n\n return () => {\n observeBusinessRuleTaskCompletionDisposer();\n observeEventSubProcessStartDisposer();\n };\n }\n }, [displayNotification, isRewinding]);\n\n function waitForNewInstanceFor(\n currentInstances: ProcessInstanceDetail[],\n ): Promise<number | null> {\n return retryWrapper(async () => {\n const {processInstances, success} = await zeebePlayService.fetchInstances(\n playEnvironmentStore.state.processDefinitionKey,\n );\n if (!success) {\n return null;\n } else {\n const newInstance = processInstances[0];\n if (newInstance && newInstance.key !== currentInstances[0]?.key) {\n return newInstance.key;\n } else {\n return null;\n }\n }\n });\n }\n\n const context: ContextType = {\n startInstance: async ({\n elementId,\n variables = '{}',\n }: {\n elementId: string;\n variables?: string;\n }) => {\n const {success, status, instanceId} =\n await zeebePlayService.startInstance({\n bpmnProcessId: processId,\n variables,\n });\n\n processInstanceStore.reset();\n\n if (success && instanceId !== undefined) {\n processInstanceStore.setInstanceDetails({\n instanceKey: instanceId,\n instanceType: 'NEW_INSTANCE',\n });\n\n updateUserActionHistory(generateHistoryKey(instanceId), {\n action: 'startInstance',\n elementId,\n type: 'start-event',\n variables,\n });\n }\n\n return {success, status};\n },\n publishMessage: async ({\n elementId,\n messageName,\n correlationKey,\n variables,\n timeToLive,\n messageId,\n isStartEvent,\n }: {\n elementId: string;\n messageName: string;\n correlationKey?: string;\n variables?: string;\n timeToLive?: string;\n messageId?: string;\n isStartEvent: boolean;\n }) => {\n let currentInstances: ProcessInstanceDetail[] = [];\n if (isStartEvent) {\n const result = await zeebePlayService.fetchInstances(\n playEnvironmentStore.state.processDefinitionKey,\n );\n if (!result.success) {\n return {success: false};\n }\n currentInstances = result.processInstances;\n }\n const {success, status} = await zeebePlayService.publishMessage({\n messageName,\n correlationKey,\n variables,\n timeToLive,\n messageId,\n });\n\n if (success === false) {\n return {success: false, status};\n }\n\n if (isStartEvent) {\n context.displayNotification?.info({\n title: `Message \"${messageName}\" published`,\n });\n setIsLoadingProcessInstanceDetails(true);\n const newProcessInstanceKey =\n await waitForNewInstanceFor(currentInstances);\n if (newProcessInstanceKey === null) {\n console.error('Could not get new instance');\n setIsLoadingProcessInstanceDetails(false);\n return {success: false, status};\n }\n processInstanceStore.reset();\n processInstanceStore.setInstanceDetails({\n instanceKey: newProcessInstanceKey,\n instanceType: 'NEW_INSTANCE',\n });\n setIsLoadingProcessInstanceDetails(false);\n\n updateUserActionHistory(generateHistoryKey(newProcessInstanceKey), {\n action: 'startInstance',\n type: 'message-start-event',\n elementId,\n variables,\n });\n return {success: true, instanceId: newProcessInstanceKey, status};\n }\n\n return {success: true, status};\n },\n broadcastSignal: async ({\n elementId,\n signalName,\n variables,\n isStartEvent,\n }: {\n elementId: string;\n signalName: string;\n variables?: string;\n isStartEvent: boolean;\n }) => {\n let currentInstances: ProcessInstanceDetail[] = [];\n if (isStartEvent) {\n const result = await zeebePlayService.fetchInstances(\n playEnvironmentStore.state.processDefinitionKey,\n );\n if (!result.success) {\n return {success: false};\n }\n currentInstances = result.processInstances;\n }\n const result = await zeebePlayService.broadcastSignal({\n signalName,\n variables,\n });\n\n if (result?.success === false) {\n return {success: false};\n }\n\n if (isStartEvent) {\n context.displayNotification?.info({\n title: `Signal \"${signalName}\" broadcasted`,\n });\n setIsLoadingProcessInstanceDetails(true);\n const newProcessInstanceKey =\n await waitForNewInstanceFor(currentInstances);\n if (newProcessInstanceKey === null) {\n console.error('Could not get new instance');\n setIsLoadingProcessInstanceDetails(false);\n return {success: false};\n }\n processInstanceStore.reset();\n processInstanceStore.setInstanceDetails({\n instanceKey: newProcessInstanceKey,\n instanceType: 'NEW_INSTANCE',\n });\n setIsLoadingProcessInstanceDetails(false);\n\n updateUserActionHistory(generateHistoryKey(newProcessInstanceKey), {\n action: 'startInstance',\n elementId,\n type: 'broadcast-signal-event',\n variables,\n });\n return {success: true, instanceId: newProcessInstanceKey};\n }\n\n return {success: true};\n },\n\n ...playInfo,\n switchToImplementMode,\n displayNotification,\n monacoLoaderConfig,\n featureFlags: {\n areAIFeaturesEnabled: featureFlags?.areAIFeaturesEnabled ?? false,\n isSaveExampleDataEnabled: featureFlags?.isSaveExampleDataEnabled ?? false,\n isReplayScenariosEnabled: featureFlags?.isReplayScenariosEnabled ?? false,\n shouldUseOrchestrationClusterAPI:\n featureFlags?.shouldUseOrchestrationClusterAPI ?? false,\n areUserTasksWithJobImplementationDeprecated:\n featureFlags?.areUserTasksWithJobImplementationDeprecated ?? false,\n },\n isUserOrgOwnerOrAdmin,\n organizationManagementPageUrl,\n };\n\n return (\n <PlayContext.Provider value={context}>\n <LoadingOverlay\n description={getDescription({\n isLoadingProcessInstanceDetails,\n isRewinding,\n })}\n />\n\n <InstanceHeader />\n <Diagram FeedbackButton={FeedbackButton} />\n\n {isStartModalVisible && (\n <StartModal\n authConfig={authConfig}\n close={() => setIsStartModalVisible(false)}\n switchToImplementMode={switchToImplementMode}\n />\n )}\n\n {!isStartModalVisible && <BottomBar />}\n\n <ProcessInstanceSuccessfullyCompletedModal />\n <MigrationFromLegacyScenarios\n processId={processId}\n projectId={projectId}\n folderId={folderId}\n />\n </PlayContext.Provider>\n );\n};\n\nexport {PlayMode};\n"],"names":["getExtensionElements","element","type","bo","getBusinessObject","elements","extensionElements","extensionValues","e","is","getExtensionElement","getZeebeProperty","name","p","EXAMPLE_JSON_PROPERTY_NAME","getExampleData","property","isValidJSONObject","str","generateHistoryKey","processId","elementId","setJobCompletionHistory","variables","getJobCompletionHistory","pickPrefillData","useCache","exampleData","rawCachedData","cachedData","hasCachedData","hasExampleData","TrackingService","mixpanelTrack","diagramId","success","errorMessage","fileId","fileType","count","process_id","incident","incidentTrackingState","path","status_code","areAIFeaturesEnabled","data","prefillData","prefillSource","exampleDataUsed","elementType","payload","url","newTotalCoverage","coverageIncrease","eventName","trackingService","mapDeployResourcesResponse","response","item","PICKER_KEY","buildDocumentFormData","key","file","metadata","formData","ZeebePlayService","authConfig","handlePostRequest","handleGetRequest","shouldUseOrchestrationClusterAPI","body","contentType","requestBody","secrets","secretName","secretValue","clusterId","uuid","value","processInstanceKey","resources","bpmnProcessId","status","instanceKey","processDefinitionKey","formId","taskDefinitionType","taskId","isZeebeUserTask","variablesPayload","errorCode","messageName","correlationKey","timeToLive","messageId","variableKey","elementInstanceKey","variablesString","jobKey","retries","incidentKey","activateInstructions","terminateInstructions","signalName","files","results","result","zeebePlayService","AUTHORIZATION_ERROR_CODE","REQUEST_FAILURE","SCENARIOS_LOAD_FAILURE","MISSING_PERMISSIONS","MISSING_PERMISSION_ACTION_PROPS","VARCHAR_MAX","BOTTOM_PANEL_HEADER_HEIGHT","NEW_PROCESS_INSTANCE","ELEMENTS_SUPPORT_REWIND","ELEMENTS_WITH_JOB_IMPLEMENTATION","JSON_OBJECT_PLACEHOLDER","POLLING_INTERVAL","BPMN_DIAGRAM_DEFAULT_NAME","ARROW_SIZE","DEFAULT_BINDING_TYPE","DEFAULT_STATE","Cluster","makeObservable","observable","action","computed","autorun","cluster","intervalId","operate","tasklist","zeebe","clusterStore","PollingHandler","when","callback","getFirstProcessCompleted","setFirstProcessCompleted","shouldHandleResponse","requestedProcessInstanceKey","currentProcessInstanceKey","isMultiInstance","businessObject","getTaskDefinitionType","getExecutionListener","executionListeners","eventType","collectCamundaConnectors","connectors","connectorIds","connectorJobTypes","inboundConnectorJobTypes","connectorElementTemplates","connectorElementTemplate","binding","isFlowNode","isBpmnError","isErrorBoundaryEvent","hasErrorEventDefinition","isErrorStartEvent","getFlowNodes","elementsById","getBpmnErrors","getElementsWithJobWorker","getElementsWithExecutionListeners","isErrorEvent","getErrorEvents","isStartEvent","isMessageStartEvent","hasEventDefinition","isSignalStartEvent","isMessageReceiveTask","isMessageBoundaryEvent","isSignalBoundaryEvent","isMessageEvent","isIntermediateMessageCatchEvent","isSignalEvent","isIntermediateSignalCatchEvent","isEventSubProcessMessageStartEvent","isEventSubProcessSignalStartEvent","findMessageRefForEvent","eventDefinition","findSignalRefForEvent","findCorrelationKey","messageRef","extensionElement","getMessageSubscriptionCandidates","attachedToElementId","sourceRef","getSignalCandidates","signalRef","isConnectorElement","modelerTemplateValue","isAttachedToAnEventBasedGateway","sequenceFlow","isWithinMultiInstance","isActivatable","isNil","BrowserDetector","ua","tem","M","moddle","BpmnModdle","parseDiagramXML","xml","ElementInstances","override","processInstanceStore","ignoreFailure","flowNodeInstances","processInstance","elementInstances","instance","isEqual","flowNodeId","diagramStore","id","elementInstancesStore","getFormDefinition","elem","isBusinessRuleTask","getCalledDecision","getCalledDecisionDetails","calledElement","isExpression","BPMN_PROCESS_ELEMENT_TYPE","getExecutableProcess","definitions","executableProcess","firstProcessFound","rootElements","rootElement","isCalledElement","getCalledElement","getCalledProcessDetails","getFormDetails","formDefinition","getFileFetchers","projectId","elementBusinessObjects","fetchFilesByDecisionId","fetchFilesByProcessId","fetchFilesByFormId","fetchFileById","relatedFiles","fileFetchers","fileReferences","elementBusinessObject","bindingType","decisionId","calledElementProcessId","collectFile","collectRelatedFiles","resolve","content","bpmnModdleDefinitions","BPMNModdle","getDeployment","getDeployments","addDeployment","deployments","getFileExtension","generateFileName","fileName","parseErrorString","errorString","errors","index","lines","i","line","lineWithError","message","removeBioc","xmlString","PlayEnvironment","makeAutoObservable","folderId","processName","onDeploymentError","consoleDashboardPageUrl","currentDiagramRevision","updateFileById","originAppInstanceId","canUserSaveExampleData","authType","operateBaseUrl","isRedeployment","deployedProcess","processedFiles","filesInfo","unavailableFiles","deployedFiles","newXml","diagramRelationId","updatePayload","errorResponse","dependentFiles","redeployment","errorObject","playEnvironmentStore","FlowNodeSelection","selection","flowNodeInstanceId","flowNodeSelectionStore","pluralSuffix","text","Modifications","#displayNotification","#isSelfManagedEnv","displayNotification","isSelfManagedEnv","flowNode","options","selectedFlowNodeId","sourceFlowNodeId","sourceFlowNodeInstanceKey","targetFlowNodeId","targetFlowNodeName","state","modificationsStore","isWithinEventSubprocess","parentElement","isEventSubProcess","browserDetector","Diagram$2","xmlWithLinkedForms","error","attachedToRef","eventDefinitions","errorId","errorEvent","attachedElementId","isLabel","startEvent","$type","formContent","errorBoundaryEvents","elementWithErrorBoundaryEvent","errorName","errorElementId","viewer","isLoaded","Diagram","retryWrapper","dynamicFunction","attempts","maxAttempts","interval","fetchUserTask","userTasks","userTask","taskDefinitionId","taskState","waitForActiveFlowNodeInstance","flowNodeInstance","fetchIncidentForFlowNodeInstance","incidents","elementInstance","processInstanceId","historyEntries","keyToDelete","updateUserActionHistory","historyKey","currentActionHistory","actions","setUserActionHistory","getUserActionHistory","storageKey","isCompleteUserActionHistoryAvailable","history","waitForNewInstance","currentInstances","processInstances","newInstance","isValidJSON","variable","scope","isUpdating","elementInstancesByElementId","variablesStore","Variables","canActivateEventSubProcess","isSubProcessStartEvent","activeElementIds","isProcessRunning","eventSubProcessId","grandParentId","isEventSubProcessActive","isGrandParentActive","isCandidateActive","candidate","Statistics","statistics","completed","activityId","statisticsStore","active","generateKeyCandidate","correlationDefinition","keyCandidate","valueCandidate","MessageSubscriptions","messageSubscriptionCandidates","activeElementIdsWithoutIncident","messageSubscriptionsStore","Signals","signalCandidates","isRunning","signalsStore","waitForCandidate","candidates","Rerun","messageCorrelationKey","hasJob","startActionType","newInstanceKey","definitionMessage","definitionSignal","untilElementId","breakOnFailure","newActions","translateToTestScenarioFile","scenariosToTranslate","testCases","scenario","testCaseResponse","translateToTestCase","translateToInstruction","instructions","instructionResponse","parseTestScenarioFile","jsonString","parsed","scenarioValidation","isTestScenarioValid","scenarios","testCase","testCaseValidation","validateTestCase","translateFromTestCase","generateScenarioKey","normalizedName","generateScenarioName","translateFromInstruction","instruction","instructionType","scenarioName","scenarioKey","getScenarioHistory","archiveScenarioHistory","processScenarios","deleteScenarioFromHistory","filteredScenarios","addScenario","coveredFlowNodes","coveredSequenceFlows","updateScenario","existingScenario","otherScenarios","getErrorMessage","messageFromError","toErrorWithMessage","isErrorWithMessage","maybeError","#handleErrorWithNotification","title","subtitle","fetchTestsByProcessId","createFile","#loadScenariosFromLocalStorage","testScenarioFiles","firstSortedTestScenarioFile","#sortScenariosByNameDescending","parseResult","hasMultipleTestFilesLinked","shouldDisplayNotificationOnFailure","translateResult","trimmedProcessName","createdFile","#addScenarioToLocalStorage","testScenarios","#getTestScenarioKey","#updateFile","#updateScenarioInLocalStorage","updatedScenario","updatedScenarios","#deleteScenarioFromLocalStorage","testScenarioFileId","revision","coveredFlowNode","currentCoveredFlowNodeIds","startInstanceAction","isCompleted","processInstanceKeyForScenarioRun","scenarioRun","isProcessing","useLocalStorage","a","b","nameComparison","scenariosStore","Scenarios","UNSAVED_SCENARIO_NAME","ProcessInstance","reaction","previousState","isProcessManuallyCompleted","refetchWhenNotFound","statusCode","instanceType","Incidents","numberOfRetries","incidentsStore","UserTasks","userTasksStore","Jobs","errorThrowableJobsByErrorId","jobsStore","ChildInstances","childInstances","childInstancesStore","SequenceFlows","sequenceFlows","sequenceFlowsStore","Instances","instancesStore","DecisionInstances","items","decisionInstances","decisionInstancesStore","usePlayInitialization","setInstanceKey","useState","setProcessDefinitionKey","useEffect","useCallback","existingXml","existingProcessId","existingProcessInstanceKey","processXmlResponse","PlayContext","createContext","WarningFilled","styled","BaseWarningFilled","CheckmarkOutline","BaseCheckmarkOutline","RadioButtonChecked","BaseRadioButtonChecked","stateIconsMap","Error","StateIcon","props","TargetComponent","getChevronDown","color","Wrapper","$variant","$isDropdown","$size","Content","Button","forwardRef","children","component","dropdown","disabled","loading","lightLoader","loaderSize","size","variant","ref","jsx","Styled.Wrapper","jsxs","Fragment","Loader","Styled.Content","spin","keyframes","light","Styled.Loader","noRadius","isActive","isHover","FormInput","FormTextarea","grow","FormLabel","FormGroup","hasMarginBottom","label","multiline","randomId","calculateHeight","evt","target","height","handleKeyUp","Styled.FormGroup","Styled.FormLabel","Styled.FormTextarea","Styled.FormInput","fade","$position","getColor","$align","$justify","withSharedState","Component","wrapped","showOnlyOnOverflow","interactive","anchorEl","setAnchorEl","timer","setTimer","Children","child","cloneElement","showTooltip","PropTypes","Tooltip","align","justify","controlledByTimer","onClose","keepOpen","position","setPosition","alignment","setAlignment","tooltip","useRef","top","bottom","left","width","insufficientSpaceAtBottom","getLeftPosition","getTopPosition","handleClick","createPortal","Tooltip$1","Dropdown","ListItem","$noPadding","$isDangerous","$isDisabled","$isActive","$isHover","sharedLinkStyles","css","ListItemDivider","MenuItemDivider","noPadding","Styled.ListItem","PureComponent","createRef","prevProps","coords","Styled.Dropdown","Styled.ListItemDivider","Header","Container","Table","Th","Td","ScenarioNameContainer","ScenarioName","ViewAllButton","ScenarioInfo","CoverageContainer","SkeletonText","BaseSkeletonText","$shouldAlignRight","SkeletonIcon","BaseSkeletonIcon","styles","Text","ModificationInfoBanner","button","BottomBar$1","isReplayScenariosEnabled","bottomBarStore","tab","BottomBar","TooltipWrapper","isDisabled","React","getButtonState","isScenarioSaved","canUserSaveScenario","Coverage","$isGreen","$hasPrecedingPlusIcon","ScenarioCoverage","isGreen","hasPrecedingPlusIcon","Info","SaveScenarioModal","observer","isOpen","onScenarioSaved","topContent","setScenarioName","setErrorMessage","Modal","Stack","Link","TextInput","event","Callout","SaveScenario","isSaveScenarioModalVisible","setIsSaveScenarioModalVisible","DefinitionTooltip","BaseDefinitionTooltip","BaseLink","isScenarioUpdated","canUserUpdateScenario","UpdateScenarioModal","onScenarioUpdated","InlineNotification","UpdateScenario","isUpdateScenarioModalVisible","setIsUpdateScenarioModalVisible","HEADER_COLUMN_WIDTH","getHeaderColumns","isCalledProcess","Skeleton","headerColumns","skeletonWidth","ModalHeader","BaseModalHeader","ModalBody","BaseModalBody","$enableContentOverflow","SecondaryButton","$hasIcon","ComposedModal","readOnly","isVisible","isPrimaryButtonDisabled","enableContentOverflow","primaryButtonLabel","secondaryButton","ghostButton","onSubmit","modalBody","dataTestId","BaseComposedModal","ModalFooter","BaseFormLabel","BaseActionableNotification","EditorContainer","loadMonaco","monacoLoaderConfig","loader","MonacoPlaceholder","Editor","BaseEditor","JSONEditor","placeholder","onChange","onValidate","onMount","hasJSONObjectValidation","useContext","monaco","setMonaco","isPlaceholderVisible","useLayoutEffect","editor","markers","TextContainer","ButtonContainer","updateExampleData","getOrCreateExtensionElement","zeebeProperties","getOrCreateZeebeProperties","existingProperty","exampleProperty","v","SaveExampleData","isValid","editedValue","onSuccess","tooltipTextForInvalid","setStatus","openImplementTab","buttonText","tooltipText","saveExampleData","wasUpdated","InlineLoading","ActionableNotification","ExampleDataSourceInformation","originalSource","isDescriptionVisible","description","Information","usePrefilledData","originalPrefillSource","setEditedValueInternal","setPrefillSource","isDirty","setIsDirty","resetPrefill","setEditedValue","BroadcastSignalModal","initialSignalName","context","setSignalName","isVariableValueValid","setVariables","editorRef","CarbonForm","useBroadcastSignal","broadcastSignalCandidate","isModalOpen","setIsModalOpen","broadcastSignal","signalCandidate","broadcastSignalWithVariables","BroadcastSignal","PublishMessageModal","initialMessageName","initialCorrelationKey","setMessageName","setCorrelationKey","ttl","setTTL","setMessageId","usePublishMessage","publishMessageCandidate","publishMessage","messageSubscription","publishMessageWithVariables","PublishMessage","useStartInstance","isStartingInstance","setIsStartingInstance","startProcessInstance","isFormModalOpen","setIsFormModalOpen","startInstanceWithVariables","startInstanceWithForm","startInstance","successNotificationSubtitle","JSONEditorModal","isValidInput","secondaryButtonLabel","hasResetButton","onReset","editorTopContent","clearOnReset","setIsValid","newValue","input","ExampleDataEditorModal","showCachedPrefillData","setShowCachedPrefillData","setOriginalPrefillSource","getCachedAndExampleData","cachedVariables","variablesFromExampleData","prefillForm","formVariableNames","existingVariables","acc","formVariableName","useTaskForm","getFormBody","formPrefillSettings","hasFormLoadError","setHasFormLoadError","formVariables","setFormVariables","isFormContentValid","setIsFormContentValid","formContainerRef","taskForm","getIsPrefilledFromExistingData","isPrefilledFromExampleData","isPrefilledFromCache","handleFormChange","fetchVariables","processVariables","variablesByUserTask","getParsedForm","form","formBody","getPrefilledFormVariables","ignoreCachedVariables","parsedForm","prefilledFormVariables","getSchemaVariables","prepareAndImportForm","warnings","renderForm","formViewer","Form","resetForm","flattenObject","basePath","entries","val","currentPath","nestedPaths","nestedPath","nestedValue","extractFilePath","flattened","filePaths","injectFileMetadataIntoData","fileMetadata","pathsToInject","filepickerPath","fileKey","set","TaskFormModal","isLoading","setIsLoading","handleFileUpload","document","pickerKey","documentResult","handleFormSubmit","enrichedData","CarbonButton","Renew","linkedStartForm","startEventFormDefinition","startEventFormKey","getExtensionElementsList","StartInstance","hasForm","variableModalContent","generateLabel","prefix","onRestartClick","onRestartWithVariablesClick","MenuButton","MenuItem","RestartInstance","firstElementId","messageCandidate","InstanceHeader","featureFlags","reInitializePlay","scenarioRuns","sanitizedOperateBaseUrl","hasLinkToOperate","handleViewParentProcessInstance","parentProcessInstanceKey","parentInstanceDetails","parentProcessDefinitionKey","parentBpmnProcessId","operateUrl","failedScenarioName","Launch","DefinitionTooltipLink","Title","StatusText","Tab","ErrorCounterTag","Tag","TableContainer","$isEmpty","EmptyMessage","THead","TBody","NameColumn","ValueColumn","ActionColumn","RowActions","ActionButton","TdName","TdValue","CodeSnippet","BaseCodeSnippet","TabList","BaseTabList","PanelContainer","TabPanel","BaseTabPanel","BaseInlineLoading","beautifyJSON","spacing","parsedValue","BaseModal","AddVariableModal","validateVariableName","variableNameError","setVariableNameError","setIsVariableValueValid","variableName","setVariableName","variableValue","setVariableValue","validationResult","Ul","Li","VariableRow","_","selectedScope","editingVariable","setEditingVariable","modalTitle","setModalTitle","isInProgress","setIsInProgress","isEditVariableModalVisible","setIsEditVariableModalVisible","isAddVariableModalVisible","setIsAddVariableModalVisible","variablesInScope","Styled.Container","Tabs","Styled.TabList","Styled.TabPanel","Styled.PanelContainer","Styled.TableContainer","Styled.EmptyMessage","Styled.Table","Styled.THead","Styled.NameColumn","Styled.ValueColumn","Styled.ActionColumn","Styled.TBody","Styled.TdName","Styled.TdValue","Layer","Styled.CodeSnippet","Styled.RowActions","Styled.InlineLoading","Styled.ActionButton","variableWithFullValue","Edit","View","Add","newVariableName","DragHandle","$isResizing","HistoryTree","TreeViewContainer","TreeNode","BaseTreeNode","TreeNodeLabel","Icon","IconContainer","BPMNIcon","BaseTag","$isVisible","VariableModifiedTag","scopeKey","setIsVisible","timerRef","disposer","currentVariables","previousVariables","currentKey","currentVariable","previousVariable","InstanceTreeNode","childNodes","isSelected","carbonTreeNodeProps","isProcessInstance","createElement","Styled.TreeNode","Styled.IconContainer","Styled.TreeNodeLabel","Styled.Icon","InstanceHistory","containerHeight","setContainerHeight","isResizing","setIsResizing","dragInfo","getRootNodes","keyMap","rootNodes","rootNodeEntry","entry","startDragging","parentNode","updater","cleanup","Styled.DragHandle","Styled.HistoryTree","Styled.Header","Styled.TreeViewContainer","TreeView","rootNode","sanitizeName","fallback","sanitized","DELIMITER","buildSlug","SvgDropdown","SvgEditForm","SvgEnvelope","SvgSuccess","SvgRewind","SvgCamundaChampion","SvgPlus","SvgMinus","SvgTarget","SvgMap","SvgDisableFullscreen","SvgEnableFullscreen","SvgAiSparkle","SvgSignal","SvgModelerWarning","SvgWebModelerWarning","EmptyState","SuccessIcon","Success","EmptyStateMessage","WarningIcon","WebModelerWarning","extractSecrets","secretsMatch","secretsRegex","findConnectorElementsWithSecrets","connectorElements","connectorElementsWithSecrets","inputParameters","moddleElement","properties","ioMappingSecrets","inputParameter","propertiesSecrets","referencedSecrets","Connectors","el","existingSecrets","connectorElementsWithMissingSecrets","missingSecrets","secret","missingSecret","newSecrets","connectorsStore","Problems","problemsStore","ErrorPanel","fileProblems","handleVisibility","elementsWithExecutionListeners","TableHead","TableRow","TableHeader","TableBody","problem","TableCell","Styled.WarningIcon","Styled.EmptyState","Styled.SuccessIcon","Styled.EmptyStateMessage","BaseTableCell","Percentage","CheckmarkFilled","BaseCheckmarkFilled","ErrorFilled","BaseErrorFilled","BaseTableRow","$isClickable","ResolveActions","OverallCoverage","BaseButton","TestScenarioNameBox","generateTestScenarioFileLink","baseUri","diagramsIndex","TestScenarioFileName","Toggletip","ToggletipButton","ToggletipContent","LinkIcon","ScenarioTopBar","areAllTestsRunning","setAreAllTestsRunning","Loading","PlayFilledAlt","ScenarioRow","ErrorState","onReload","scenarioToDelete","setScenarioToDelete","canUserSaveScenarios","selectedScenario","scenarioRunStatus","IconButton","TrashCan","formatStartTime","startTime","EmptyHeader","EmptyDescription","InstanceButton","BaseTableHeader","Processes","instances","startDate","activeTab","isScenariosTabVisible","problemCount","PlayIntro","ModalButton","Video","getLoadingState","isInitial","isDeployingFiles","hasAuthorizationError","hasDiagramError","hasProblems","areConnectorsReady","StartModal","close","switchToImplementMode","videoRef","isPlayEnvironmentReady","isDiagramLoaded","helperText","loadingStatus","Styled.Modal","Styled.ModalBody","Styled.Video","ProgressBar","Styled.ModalFooter","Styled.ModalButton","bpmnRendererColors","isNonSelectableFlowNode","bpmnElement","selectableFlowNodes","MODIFICATION_NOT_SUPPORTED","BpmnJS","#xml","#selectableFlowNodeIds","#selectedFlowNodeIds","#nonSelectableFlowNodeIds","#handleElementClick","container","selectableFlowNodeIds","selectedFlowNodeIds","#createViewer","elementRegistry","#removeTooltip","nonSelectableFlowNodes","#addTooltip","className","canvas","titleElement","#removeOverlay","node","#destroy","NavigatedViewer","ElementTemplatesIconsRenderer","gridModule","minimapModule","HighContrastCanvasModule","OutlineModule","step","DiagramCanvas","$isSelectionAllowed","MainButton","primaryAction","secondaryActions","Styled.MainButton","DropdownIcon","args","StartButtons","onPrimaryButtonClick","onSecondaryButtonClick","Playlist","TriggerMessageSubscriptionButton","Envelope","topLeft","startButtonsAlignment","bottomLeft","PROBLEM","INCIDENT_BUTTON","START_INSTANCE_BUTTON","TRIGGER_MESSAGE_SUBSCRIPTION_BUTTON","TRIGGER_MESSAGE_SUBSCRIPTION_START_BUTTON","SEQUENCE_FLOW_HIGHLIGHTER","CHILD_INSTANCE_BUTTON","JOB_COMPLETE_BUTTON","USER_TASK_COMPLETE_BUTTON","TASK_FORM_BUTTON","FINISHED_OVERLAY","REWIND_OVERLAY","VIEW_DECISION_INSTANCE_BUTTON","BROADCAST_SIGNAL_BUTTON","BROADCAST_SIGNAL_START_BUTTON","THROW_ERROR_BUTTON","StartInstanceButton","startLabel","getCalledProcessId","getChildInstance","calledProcessId","allChildInstances","childInstance","ChildInstanceButton","BaseStack","Checkmark","CompletedOverlay","IncidentButton","isIncidentModalOpen","setIsIncidentModalOpen","showAskAIButton","isSecondaryButtonEnabled","askAiButton","AISparkle","Warning","SequenceFlowHighlighter","completedElementInstances","isInstanceDetailPageVisible","generateErrorThrownMessage","jobWorkerElementTypeToHumanReadable","bpmnType","wordPart","notifyActionManuallyCompleted","typeName","notification","JobCompleteButton","isExampleDataEditorModalOpen","setIsExampleDataEditorModalOpen","isThrowModalOpen","setIsThrowModalOpen","setErrorCode","availableErrorEvents","handleThrowError","isSuccess","handleJobCompletionFailure","ComboBox","selectedItem","Rewind","BaseRewind","waitForProcessInstance","validateRewindSuccessful","rewindStore","RewindButton","oldInstanceKey","isOldInstanceActive","isRewindSuccessful","BroadcastSignalButton","Signal","ViewDecisionInstanceButton","decisionInstance","decision","canUserViewDecisionInstance","getDecisionId","TriggerErrorButton","selectedElementId","setSelectedElementId","selectedJob","elementName","useUserTaskCompletion","userTaskJob","isCompletingUserTask","setIsCompletingUserTask","completeUserTask","FORM_KEY_PREFIX","schema","OpenTaskFormButton","EditForm","UserTaskCompleteButton","hasActiveUserTaskJob","DiagramOverlay","addOverlay","connector","definitionMessageSubscription","subscription","signal","userTaskWithForm","zLayoutBase","above","zCarbonCopyButton","zDiagramControls","zLoadingOverlay","zClusterWarning","DiagramControlButton","FeedbackButtonSlot","DiagramControls","handleZoomReset","handleZoomIn","handleZoomOut","handleMinimap","FeedbackButton","handleFullscreenToggle","isFullscreenActive","isMinimapActive","feedbackButtonSlotRef","DisableFullscreen","EnableFullscreen","Map","Target","Minus","Plus","Arrow","getArrowPosition","side","x","y","getSide","placement","getValueWhenValidNumber","Popover","referenceElement","onOutsideClick","middlewareOptions","autoUpdatePosition","arrowElementRef","strategy","middlewareData","actualPlacement","floating","setFloating","useFloating","arrow","autoUpdate","isHidden","setIsHidden","arrowX","arrowY","ButtonTooltipWrapper","ModificationButton","renderIcon","onClick","notificationTitle","ModificationDropdown","selectedFlowNodeRef","diagramCanvasRef","selectedFlowNodeName","availableModifications","canSelectedFlowNodeBeModified","offset","flip","ArrowRight","ModelerWarning","ConnectorSecretOverlay","ProblemOverlay","FlowNodeHighlighter","coveredFlowNodeIds","notificationMargin","ClusterUnavailableNotification","clusterName","viewerRef","isMovingToken","getViewer","renderDiagram","StyledDiagram","SuccessIconWrapper","CamundaChampion","BaseCamundaChampion","ProcessInstanceSuccessfullyCompletedModal","observeBusinessRuleTaskCompletion","currentElementInstances","previousElementInstances","currentCompletedBusinessRuleTasks","previouslyCompletedBusinessRuleTasksKeys","flowNodeName","observeEventSubProcessStart","currentStartedEventSubProcesses","previouslyStartedEventSubProcesses","LoadingOverlay","getDescription","isLoadingProcessInstanceDetails","isRewinding","ScenariosMigratedModal","open","UnorderedList","useMigrateScenarios","isMigrationCompletedModalVisible","setIsMigrationCompletedModalVisible","setFileName","setFileId","migrateScenarios","legacyScenarios","migrateScenariosDisposer","MigrationFromLegacyScenarios","PlayMode","isUserOrgOwnerOrAdmin","organizationManagementPageUrl","isStartModalVisible","setIsStartModalVisible","setIsLoadingProcessInstanceDetails","isLoadingProcessInstance","setIsRewinding","playInfo","observeBusinessRuleTaskCompletionDisposer","observeEventSubProcessStartDisposer","waitForNewInstanceFor","instanceId","newProcessInstanceKey"],"mappings":"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"}