From 739442d5711f37bd54fd792d80dcbc0ddf19cf37 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 2 May 2023 13:40:41 -0400 Subject: [PATCH 1/5] * Adding signal_buttons to tasks, which will prompt the frontend to display a button that when pressed will cause the signal to fire. * This alters how the send_event endpoint responds - it originally responded with a process instance, it now responds with the next task, in keeping with how other task completion endpoints behave. * I was forced to upgrade some of the bpmn-js libraries which fixes some of the linting errors on the front end. * The "Return to home" button isn't always displayed. It will not display when it is redirecting, or when the current task is running. . --- .../src/spiffworkflow_backend/models/task.py | 1 + .../routes/process_api_blueprint.py | 8 +- .../routes/tasks_controller.py | 1 + .../services/task_service.py | 22 +- .../signal_event_extensions.bpmn | 86 ++ .../integration/test_process_api.py | 3 +- .../unit/test_task_service.py | 28 + spiffworkflow-frontend/package-lock.json | 1022 ++++++++++++----- spiffworkflow-frontend/package.json | 6 +- .../src/components/ReactDiagramEditor.tsx | 2 - spiffworkflow-frontend/src/interfaces.ts | 6 + .../src/routes/ProcessInterstitial.tsx | 10 +- .../src/routes/TaskShow.tsx | 33 +- 13 files changed, 891 insertions(+), 337 deletions(-) create mode 100644 spiffworkflow-backend/tests/data/signal_event_extensions/signal_event_extensions.bpmn diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py index 773ed240..1b759cf2 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py @@ -85,6 +85,7 @@ class TaskModel(SpiffworkflowBaseDBModel): can_complete: Optional[bool] = None extensions: Optional[dict] = None name_for_display: Optional[str] = None + signal_buttons: Optional[dict] = None def get_data(self) -> dict: return {**self.python_env_data(), **self.json_data()} diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py index 0543d9bc..00ea6086 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py @@ -32,6 +32,7 @@ from spiffworkflow_backend.services.process_caller_service import ProcessCallerS from spiffworkflow_backend.services.process_instance_processor import ( ProcessInstanceProcessor, ) +from spiffworkflow_backend.services.process_instance_service import ProcessInstanceService from spiffworkflow_backend.services.process_model_service import ProcessModelService @@ -199,16 +200,13 @@ def send_bpmn_event( if process_instance: processor = ProcessInstanceProcessor(process_instance) processor.send_bpmn_event(body) + task = ProcessInstanceService.spiff_task_to_api_task(processor, processor.next_task()) + return make_response(jsonify(task), 200) else: raise ApiError( error_code="send_bpmn_event_error", message=f"Could not send event to Instance: {process_instance_id}", ) - return Response( - json.dumps(ProcessInstanceModelSchema().dump(process_instance)), - status=200, - mimetype="application/json", - ) def _commit_and_push_to_git(message: str) -> None: diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/tasks_controller.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/tasks_controller.py index 64c22c5b..8ff43385 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/tasks_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/tasks_controller.py @@ -288,6 +288,7 @@ def task_show(process_instance_id: int, task_guid: str = "next") -> flask.wrappe task_model = _get_task_model_from_guid_or_raise(task_guid, process_instance_id) task_definition = task_model.task_definition extensions = TaskService.get_extensions_from_task_model(task_model) + task_model.signal_buttons = TaskService.get_ready_signals_with_button_labels(process_instance_id) if "properties" in extensions: properties = extensions["properties"] diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py index 14441475..9bbff115 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py @@ -2,7 +2,7 @@ import copy import json import time from hashlib import sha256 -from typing import Optional +from typing import Optional, List from typing import Tuple from typing import TypedDict from typing import Union @@ -633,6 +633,26 @@ class TaskService: ) return extensions + @classmethod + def get_ready_signals_with_button_labels(cls, process_instance_id: int) -> list[dict]: + waiting_tasks: List[TaskModel] = TaskModel.query.filter_by( + state="WAITING", process_instance_id=process_instance_id + ).all() + result = [] + for task_model in waiting_tasks: + task_definition = task_model.task_definition + extensions: dict = ( + task_definition.properties_json["extensions"] if "extensions" in task_definition.properties_json else {} + ) + event_definition: dict = ( + task_definition.properties_json["event_definition"] if "event_definition" in task_definition.properties_json else {} + ) + if 'signalButtonLabel' in extensions and 'name' in event_definition: + result.append({'event': event_definition, 'label': extensions['signalButtonLabel']}) + return result + + + @classmethod def get_spec_reference_from_bpmn_process(cls, bpmn_process: BpmnProcessModel) -> SpecReferenceCache: """Get the bpmn file for a given task model. diff --git a/spiffworkflow-backend/tests/data/signal_event_extensions/signal_event_extensions.bpmn b/spiffworkflow-backend/tests/data/signal_event_extensions/signal_event_extensions.bpmn new file mode 100644 index 00000000..0e580661 --- /dev/null +++ b/spiffworkflow-backend/tests/data/signal_event_extensions/signal_event_extensions.bpmn @@ -0,0 +1,86 @@ + + + + + Flow_0elszck + + + + Flow_1akz8b3 + + + + + Flow_16bzuvz + + + + + # Welcome +This manual task has Two Buttons! The first is standard submit button that will take you to the end. The second button will fire a signal event and take you to a different manual task. + + Flow_0elszck + Flow_1akz8b3 + + + + # Spam Eaten! +Congratulations! You have selected the Eat Additional Spam option, which opens up new doors to vast previously uncharted culinary eating experiences! Oh the Joy! Oh the Reward! Sweet savory wonderful Spam! + + Flow_0uenxs3 + Flow_16bzuvz + + + + Eat Spam + + Flow_0uenxs3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py index fa49cac0..28ca2288 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py @@ -2747,7 +2747,8 @@ class TestProcessApi(BaseTest): ) assert response.status_code == 200 assert response.json is not None - assert response.json["status"] == "complete" + assert response.json["type"] == "End Event" + assert response.json["state"] == "COMPLETED" response = client.get( f"/v1.0/process-instances/{self.modify_process_identifier_for_path_param(process_model_identifier)}/{process_instance_id}/task-info?all_tasks=true", diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py index c0b48be7..21fd7d32 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py @@ -156,3 +156,31 @@ class TestTaskService(BaseTest): assert task_model_level_3 is not None bpmn_process = TaskService.bpmn_process_for_called_activity_or_top_level_process(task_model_level_3) assert bpmn_process.bpmn_process_definition.bpmn_identifier == "Level3" + + + def test_get_button_labels_for_waiting_signal_event_tasks( + self, + app: Flask, + with_db_and_bpmn_file_cleanup: None, + ) -> None: + process_model = load_test_spec( + "test_group/signal_event_extensions", + process_model_source_directory="signal_event_extensions", + bpmn_file_name="signal_event_extensions", + ) + load_test_spec( + f"test_group/SpiffCatchEventExtensions", + process_model_source_directory="call_activity_nested", + bpmn_file_name="SpiffCatchEventExtensions" + ) + process_instance = self.create_process_instance_from_process_model(process_model) + processor = ProcessInstanceProcessor(process_instance) + processor.do_engine_steps(save=True, execution_strategy_name="greedy") + events = TaskService.get_ready_signals_with_button_labels(process_instance.id) + assert(len(events) == 1) + signal_event = events[0] + assert(signal_event['event']['name'] == 'eat_spam') + assert(signal_event['event']['typename'] == 'SignalEventDefinition') + assert(signal_event['label'] == 'Eat Spam') + + print(events) diff --git a/spiffworkflow-frontend/package-lock.json b/spiffworkflow-frontend/package-lock.json index f0651d0e..9642f5f9 100644 --- a/spiffworkflow-frontend/package-lock.json +++ b/spiffworkflow-frontend/package-lock.json @@ -36,14 +36,14 @@ "autoprefixer": "10.4.8", "axios": "^0.27.2", "bootstrap": "^5.2.0", - "bpmn-js": "^9.3.2", - "bpmn-js-properties-panel": "^1.10.0", + "bpmn-js": "^13.0.0", + "bpmn-js-properties-panel": "^1.22.0", "bpmn-js-spiffworkflow": "github:sartography/bpmn-js-spiffworkflow#main", "cookie": "^0.5.0", "craco": "^0.0.3", "cypress-slow-down": "^1.2.1", "date-fns": "^2.28.0", - "diagram-js": "^8.5.0", + "diagram-js": "^11.9.1", "dmn-js": "^12.2.0", "dmn-js-properties-panel": "^1.1", "dmn-js-shared": "^12.1.1", @@ -2062,12 +2062,12 @@ } }, "node_modules/@bpmn-io/element-templates-validator": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-0.13.0.tgz", - "integrity": "sha512-eu2S2lXRxfbGpZk0JiB7Q+TzKm1+1hTsDJJEw7+AAvW8woY+URIz8qOaRB/j/q/V9SrijP7n78dzW41Eurrf6w==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-0.14.0.tgz", + "integrity": "sha512-b7/6AAFIG8e5mzgGZR7sLaQ/B36Iy0SKEdKvX7zYZVbguvqTP9GtBSAwDRSbJzKX0HKWSUfmjRFgfRhsjSNurA==", "dependencies": { - "@camunda/element-templates-json-schema": "^0.12.0", - "@camunda/zeebe-element-templates-json-schema": "^0.8.0", + "@camunda/element-templates-json-schema": "^0.12.1", + "@camunda/zeebe-element-templates-json-schema": "^0.9.0", "json-source-map": "^0.6.1", "min-dash": "^4.0.0" } @@ -2125,14 +2125,14 @@ } }, "node_modules/@camunda/element-templates-json-schema": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.12.0.tgz", - "integrity": "sha512-f5r/Xe0KgtSl+dG7TQVEATP70pGNMEn3Od8DVBpLXDgMiJWbQ9XR2XNlsao0XEoCu0AW0veLUD5/ItAEt0/a1A==" + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.12.1.tgz", + "integrity": "sha512-Hk0Fggw1fqsoeYXTC6/Ca5MyuseS3S2OAg6PGf9w7xcJf1RxJVHp20azAYhPK3bmgFXw/tBl/DMzZhyp+EDKtw==" }, "node_modules/@camunda/zeebe-element-templates-json-schema": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.8.0.tgz", - "integrity": "sha512-KwGFOQrgROmqip+yyxgvT727b2JB1WQh72Y81AKdX+jEt417eE92mNP2FjhmDcbHmqLJDxzh9Ic9turZQGiE7A==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.9.0.tgz", + "integrity": "sha512-umeLoy8erTiFCG92Z29kJ8VH6fHfFE+75HwQH/WwIRqa2AvNYrkSCNpXtTGwW/EjnyvGA6VcfqirZhibuuHMaA==" }, "node_modules/@carbon/colors": { "version": "11.14.0", @@ -8055,6 +8055,76 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bio-dts": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/bio-dts/-/bio-dts-0.8.1.tgz", + "integrity": "sha512-8Dy5NgZKl1mHJS6PUVGi8HYFIwvbCmV4RNnW85i2YtSLWeo2t7iSAaJVcJ6n6xPDKlkqVcW04VYN13QZ94nKAQ==", + "dependencies": { + "@babel/parser": "^7.21.2", + "recast": "^0.22.0", + "tiny-glob": "^0.2.9" + }, + "bin": { + "bio-dts": "bin/cmd.js" + } + }, + "node_modules/bio-dts/node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/bio-dts/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bio-dts/node_modules/recast": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.22.0.tgz", + "integrity": "sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==", + "dependencies": { + "assert": "^2.0.0", + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/bio-dts/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bio-dts/node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -8303,28 +8373,27 @@ } }, "node_modules/bpmn-js": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/bpmn-js/-/bpmn-js-9.4.1.tgz", - "integrity": "sha512-uid1EctbT0c3dO5+Ghm9Qu8EQCSVjZS1Ff7z9qQ0ZoxRWayvbWaHUYSVdKlzXZi7911Pe7rkSqCuXpQ68ouPRw==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/bpmn-js/-/bpmn-js-13.0.4.tgz", + "integrity": "sha512-f5TsuUFpeuWLDS9H6kJJ1utQxJIOJ8Mlr6luuLDmVF0HT9eFMnphs4vH8g6Q5k8W+zELVDh6n/jCZbG9lGCE3Q==", "dependencies": { - "bpmn-moddle": "^7.1.3", - "css.escape": "^1.5.1", - "diagram-js": "^8.9.0", - "diagram-js-direct-editing": "^1.7.0", + "bpmn-moddle": "^8.0.0", + "diagram-js": "^12.0.2", + "diagram-js-direct-editing": "^2.0.0", "ids": "^1.0.0", - "inherits-browser": "0.0.1", - "min-dash": "^3.5.2", - "min-dom": "^3.2.1", + "inherits-browser": "^0.1.0", + "min-dash": "^4.0.0", + "min-dom": "^4.0.3", "object-refs": "^0.3.0", - "tiny-svg": "^2.2.4" + "tiny-svg": "^3.0.0" } }, "node_modules/bpmn-js-properties-panel": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.21.0.tgz", - "integrity": "sha512-w++3hH8ArQ1XiqClN/WERs3D/UPM90lb/gW05YpoF7WFBpuN9qN2GpwxO/HijfR8bLnhwbcxEP7MHTiG+K/R1w==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.22.0.tgz", + "integrity": "sha512-pJZCuYSDAVcpfOyhimwhrhM87NDE+XkWwRuxVjkoe97TjSFaT1UW4e7ZKLP9JJOT2P4TMmbRLKE8ftJe0Hm9Rw==", "dependencies": { - "@bpmn-io/element-templates-validator": "^0.13.0", + "@bpmn-io/element-templates-validator": "^0.14.0", "@bpmn-io/extract-process-variables": "^0.8.0", "array-move": "^3.0.1", "classnames": "^2.3.1", @@ -8332,18 +8401,27 @@ "min-dash": "^4.0.0", "min-dom": "^4.0.3", "preact-markup": "^2.1.1", - "semver-compare": "^1.0.0" + "semver-compare": "^1.0.0", + "uuid": "^9.0.0" }, "peerDependencies": { "@bpmn-io/properties-panel": "^1.0.1", - "bpmn-js": ">= 8", + "bpmn-js": ">= 11.5", "camunda-bpmn-js-behaviors": ">= 0.4", - "diagram-js": ">= 7" + "diagram-js": ">= 11.9" + } + }, + "node_modules/bpmn-js-properties-panel/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/bpmn-js-spiffworkflow": { "version": "0.0.8", - "resolved": "git+ssh://git@github.com/sartography/bpmn-js-spiffworkflow.git#313969da1067fce0a51b152626a609a122697693", + "resolved": "git+ssh://git@github.com/sartography/bpmn-js-spiffworkflow.git#0a9db509a0e85aa7adecc8301d8fbca9db75ac7c", "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -8381,42 +8459,78 @@ "min-dash": "^3.8.1" } }, - "node_modules/bpmn-js/node_modules/component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" - }, - "node_modules/bpmn-js/node_modules/min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" - }, - "node_modules/bpmn-js/node_modules/min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", + "node_modules/bpmn-js/node_modules/diagram-js": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-12.0.2.tgz", + "integrity": "sha512-eXQb+7NPPkUHJDmyz+5iLzcC4jn0peq5S+o7QQBeHiA+8TKciccKvGgdX1KjknelIAkn9usmL/tN/T+f1M/hqg==", "dependencies": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" + "@bpmn-io/diagram-js-ui": "^0.2.2", + "bio-dts": "^0.8.0", + "clsx": "^1.2.1", + "didi": "^9.0.2", + "hammerjs": "^2.0.1", + "inherits-browser": "^0.1.0", + "min-dash": "^4.1.0", + "min-dom": "^4.1.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^3.0.1" } }, + "node_modules/bpmn-js/node_modules/diagram-js-direct-editing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/diagram-js-direct-editing/-/diagram-js-direct-editing-2.0.0.tgz", + "integrity": "sha512-/12OWL0B0RMCfaT1w3723c729MD42r5fay4wtm2DvxNFNBMdPaEvOHCTA/khLKjFzOzMVKxSzbAp7IEwBGonVw==", + "dependencies": { + "min-dash": "^4.0.0", + "min-dom": "^4.0.2" + }, + "peerDependencies": { + "diagram-js": "*" + } + }, + "node_modules/bpmn-js/node_modules/didi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", + "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" + }, + "node_modules/bpmn-js/node_modules/inherits-browser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", + "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" + }, + "node_modules/bpmn-js/node_modules/tiny-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", + "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" + }, "node_modules/bpmn-moddle": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz", - "integrity": "sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz", + "integrity": "sha512-mwZcrWhi52+JH5Oq58WwKYcUxQ1ZMiDQuzt1bpqiqEEFFnQLqCgtLwEXQuDXFmAuQPdMAghyPzqdOZQqIQVesw==", "dependencies": { - "min-dash": "^3.5.2", - "moddle": "^5.0.2", - "moddle-xml": "^9.0.6" + "min-dash": "^4.0.0", + "moddle": "^6.0.0", + "moddle-xml": "^10.0.0" } }, - "node_modules/bpmn-moddle/node_modules/min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" + "node_modules/bpmn-moddle/node_modules/moddle": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/moddle/-/moddle-6.2.1.tgz", + "integrity": "sha512-rBT4P19k9wKOerFHNJQugw25CK6DK5m4lVZGac7godbWNPsbJgr1K4GJ+pqM1ErbRYxljXCTDgPhJLoDWE4wwQ==", + "dependencies": { + "min-dash": "^4.0.0" + } + }, + "node_modules/bpmn-moddle/node_modules/moddle-xml": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-10.1.0.tgz", + "integrity": "sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg==", + "dependencies": { + "min-dash": "^4.0.0", + "moddle": "^6.0.0", + "saxen": "^8.1.2" + } }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -11620,19 +11734,20 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/diagram-js": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", - "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-11.13.1.tgz", + "integrity": "sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ==", "dependencies": { - "css.escape": "^1.5.1", - "didi": "^8.0.1", + "@bpmn-io/diagram-js-ui": "^0.2.2", + "clsx": "^1.2.1", + "didi": "^9.0.2", "hammerjs": "^2.0.1", - "inherits-browser": "0.0.1", - "min-dash": "^3.5.2", - "min-dom": "^3.2.0", + "inherits-browser": "^0.1.0", + "min-dash": "^4.1.0", + "min-dom": "^4.1.0", "object-refs": "^0.3.0", "path-intersection": "^2.2.1", - "tiny-svg": "^2.2.2" + "tiny-svg": "^3.0.1" } }, "node_modules/diagram-js-direct-editing": { @@ -11669,27 +11784,20 @@ "min-dash": "^3.8.1" } }, - "node_modules/diagram-js/node_modules/component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" + "node_modules/diagram-js/node_modules/didi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", + "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" }, - "node_modules/diagram-js/node_modules/min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" + "node_modules/diagram-js/node_modules/inherits-browser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", + "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" }, - "node_modules/diagram-js/node_modules/min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", - "dependencies": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" - } + "node_modules/diagram-js/node_modules/tiny-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", + "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" }, "node_modules/didi": { "version": "8.0.2", @@ -11792,6 +11900,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "node_modules/dmn-js-decision-table/node_modules/diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "dependencies": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "node_modules/dmn-js-decision-table/node_modules/min-dash": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", @@ -11809,6 +11933,22 @@ "min-dash": "^3.8.1" } }, + "node_modules/dmn-js-decision-table/node_modules/table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "dependencies": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + }, + "peerDependencies": { + "diagram-js": "4.x || 5.x || 6.x || 7.x || 8.x", + "inferno": "^5.0.5" + } + }, "node_modules/dmn-js-drd": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/dmn-js-drd/-/dmn-js-drd-12.3.0.tgz", @@ -11829,6 +11969,27 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "node_modules/dmn-js-drd/node_modules/diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "dependencies": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, + "node_modules/dmn-js-drd/node_modules/diagram-js/node_modules/inherits-browser": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.0.1.tgz", + "integrity": "sha512-kaDA3DkCdCpvrKIo/1T/3yVn+qpFUHLjYtSHmTYewb+QfjfaQy6FGQ7LwBu7st0tG9UvYad/XAlqQmdIh6CICw==" + }, "node_modules/dmn-js-drd/node_modules/inherits-browser": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", @@ -11870,6 +12031,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "node_modules/dmn-js-literal-expression/node_modules/diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "dependencies": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "node_modules/dmn-js-literal-expression/node_modules/min-dash": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", @@ -11887,6 +12064,22 @@ "min-dash": "^3.8.1" } }, + "node_modules/dmn-js-literal-expression/node_modules/table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "dependencies": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + }, + "peerDependencies": { + "diagram-js": "4.x || 5.x || 6.x || 7.x || 8.x", + "inferno": "^5.0.5" + } + }, "node_modules/dmn-js-properties-panel": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dmn-js-properties-panel/-/dmn-js-properties-panel-1.3.2.tgz", @@ -11901,38 +12094,6 @@ "dmn-js": ">=11" } }, - "node_modules/dmn-js-properties-panel/node_modules/diagram-js": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-11.13.0.tgz", - "integrity": "sha512-10jE//ZN1BHUCvDpzOjqULyRyZPCmNjBdNsF+Q77w8zFYD8z9VBB7TJrWfDblPRgPins9bj2HA+MfJK5f+ZsLw==", - "dependencies": { - "@bpmn-io/diagram-js-ui": "^0.2.2", - "clsx": "^1.2.1", - "didi": "^9.0.2", - "hammerjs": "^2.0.1", - "inherits-browser": "^0.1.0", - "min-dash": "^4.1.0", - "min-dom": "^4.1.0", - "object-refs": "^0.3.0", - "path-intersection": "^2.2.1", - "tiny-svg": "^3.0.1" - } - }, - "node_modules/dmn-js-properties-panel/node_modules/didi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", - "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" - }, - "node_modules/dmn-js-properties-panel/node_modules/inherits-browser": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", - "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" - }, - "node_modules/dmn-js-properties-panel/node_modules/tiny-svg": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", - "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" - }, "node_modules/dmn-js-shared": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/dmn-js-shared/-/dmn-js-shared-12.3.0.tgz", @@ -11955,6 +12116,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "node_modules/dmn-js-shared/node_modules/diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "dependencies": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "node_modules/dmn-js-shared/node_modules/ids": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/ids/-/ids-0.2.2.tgz", @@ -11980,6 +12157,27 @@ "min-dash": "^3.8.1" } }, + "node_modules/dmn-js-shared/node_modules/table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "dependencies": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + }, + "peerDependencies": { + "diagram-js": "4.x || 5.x || 6.x || 7.x || 8.x", + "inferno": "^5.0.5" + } + }, + "node_modules/dmn-js-shared/node_modules/table-js/node_modules/ids": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ids/-/ids-1.0.0.tgz", + "integrity": "sha512-Zvtq1xUto4LttpstyOlFum8lKx+i1OmRfg+6A9drFS9iSZsDPMHG4Sof/qwNR4kCU7jBeWFPrY2ocHxiz7cCRw==" + }, "node_modules/dmn-moddle": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dmn-moddle/-/dmn-moddle-10.0.0.tgz", @@ -12548,6 +12746,11 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -15047,6 +15250,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -15066,6 +15274,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -16343,6 +16556,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -16392,6 +16619,21 @@ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -28333,44 +28575,6 @@ "node": ">=10.0.0" } }, - "node_modules/table-js": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", - "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", - "dependencies": { - "didi": "^8.0.1", - "ids": "^1.0.0", - "min-dash": "^3.8.1", - "min-dom": "^3.2.1", - "selection-ranges": "^3.0.3" - }, - "peerDependencies": { - "diagram-js": "4.x || 5.x || 6.x || 7.x || 8.x", - "inferno": "^5.0.5" - } - }, - "node_modules/table-js/node_modules/component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" - }, - "node_modules/table-js/node_modules/min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" - }, - "node_modules/table-js/node_modules/min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", - "dependencies": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" - } - }, "node_modules/table/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -28941,6 +29145,15 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tiny-svg": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-2.2.4.tgz", @@ -33535,12 +33748,12 @@ } }, "@bpmn-io/element-templates-validator": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-0.13.0.tgz", - "integrity": "sha512-eu2S2lXRxfbGpZk0JiB7Q+TzKm1+1hTsDJJEw7+AAvW8woY+URIz8qOaRB/j/q/V9SrijP7n78dzW41Eurrf6w==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/element-templates-validator/-/element-templates-validator-0.14.0.tgz", + "integrity": "sha512-b7/6AAFIG8e5mzgGZR7sLaQ/B36Iy0SKEdKvX7zYZVbguvqTP9GtBSAwDRSbJzKX0HKWSUfmjRFgfRhsjSNurA==", "requires": { - "@camunda/element-templates-json-schema": "^0.12.0", - "@camunda/zeebe-element-templates-json-schema": "^0.8.0", + "@camunda/element-templates-json-schema": "^0.12.1", + "@camunda/zeebe-element-templates-json-schema": "^0.9.0", "json-source-map": "^0.6.1", "min-dash": "^4.0.0" } @@ -33598,14 +33811,14 @@ } }, "@camunda/element-templates-json-schema": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.12.0.tgz", - "integrity": "sha512-f5r/Xe0KgtSl+dG7TQVEATP70pGNMEn3Od8DVBpLXDgMiJWbQ9XR2XNlsao0XEoCu0AW0veLUD5/ItAEt0/a1A==" + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.12.1.tgz", + "integrity": "sha512-Hk0Fggw1fqsoeYXTC6/Ca5MyuseS3S2OAg6PGf9w7xcJf1RxJVHp20azAYhPK3bmgFXw/tBl/DMzZhyp+EDKtw==" }, "@camunda/zeebe-element-templates-json-schema": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.8.0.tgz", - "integrity": "sha512-KwGFOQrgROmqip+yyxgvT727b2JB1WQh72Y81AKdX+jEt417eE92mNP2FjhmDcbHmqLJDxzh9Ic9turZQGiE7A==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@camunda/zeebe-element-templates-json-schema/-/zeebe-element-templates-json-schema-0.9.0.tgz", + "integrity": "sha512-umeLoy8erTiFCG92Z29kJ8VH6fHfFE+75HwQH/WwIRqa2AvNYrkSCNpXtTGwW/EjnyvGA6VcfqirZhibuuHMaA==" }, "@carbon/colors": { "version": "11.14.0", @@ -37988,6 +38201,66 @@ "file-uri-to-path": "1.0.0" } }, + "bio-dts": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/bio-dts/-/bio-dts-0.8.1.tgz", + "integrity": "sha512-8Dy5NgZKl1mHJS6PUVGi8HYFIwvbCmV4RNnW85i2YtSLWeo2t7iSAaJVcJ6n6xPDKlkqVcW04VYN13QZ94nKAQ==", + "requires": { + "@babel/parser": "^7.21.2", + "recast": "^0.22.0", + "tiny-glob": "^0.2.9" + }, + "dependencies": { + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "requires": { + "tslib": "^2.0.1" + } + }, + "recast": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.22.0.tgz", + "integrity": "sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==", + "requires": { + "assert": "^2.0.0", + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + } + } + }, "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -38158,52 +38431,71 @@ } }, "bpmn-js": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/bpmn-js/-/bpmn-js-9.4.1.tgz", - "integrity": "sha512-uid1EctbT0c3dO5+Ghm9Qu8EQCSVjZS1Ff7z9qQ0ZoxRWayvbWaHUYSVdKlzXZi7911Pe7rkSqCuXpQ68ouPRw==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/bpmn-js/-/bpmn-js-13.0.4.tgz", + "integrity": "sha512-f5TsuUFpeuWLDS9H6kJJ1utQxJIOJ8Mlr6luuLDmVF0HT9eFMnphs4vH8g6Q5k8W+zELVDh6n/jCZbG9lGCE3Q==", "requires": { - "bpmn-moddle": "^7.1.3", - "css.escape": "^1.5.1", - "diagram-js": "^8.9.0", - "diagram-js-direct-editing": "^1.7.0", + "bpmn-moddle": "^8.0.0", + "diagram-js": "^12.0.2", + "diagram-js-direct-editing": "^2.0.0", "ids": "^1.0.0", - "inherits-browser": "0.0.1", - "min-dash": "^3.5.2", - "min-dom": "^3.2.1", + "inherits-browser": "^0.1.0", + "min-dash": "^4.0.0", + "min-dom": "^4.0.3", "object-refs": "^0.3.0", - "tiny-svg": "^2.2.4" + "tiny-svg": "^3.0.0" }, "dependencies": { - "component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" - }, - "min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" - }, - "min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", + "diagram-js": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-12.0.2.tgz", + "integrity": "sha512-eXQb+7NPPkUHJDmyz+5iLzcC4jn0peq5S+o7QQBeHiA+8TKciccKvGgdX1KjknelIAkn9usmL/tN/T+f1M/hqg==", "requires": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" + "@bpmn-io/diagram-js-ui": "^0.2.2", + "bio-dts": "^0.8.0", + "clsx": "^1.2.1", + "didi": "^9.0.2", + "hammerjs": "^2.0.1", + "inherits-browser": "^0.1.0", + "min-dash": "^4.1.0", + "min-dom": "^4.1.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^3.0.1" } + }, + "diagram-js-direct-editing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/diagram-js-direct-editing/-/diagram-js-direct-editing-2.0.0.tgz", + "integrity": "sha512-/12OWL0B0RMCfaT1w3723c729MD42r5fay4wtm2DvxNFNBMdPaEvOHCTA/khLKjFzOzMVKxSzbAp7IEwBGonVw==", + "requires": { + "min-dash": "^4.0.0", + "min-dom": "^4.0.2" + } + }, + "didi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", + "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" + }, + "inherits-browser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", + "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" + }, + "tiny-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", + "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" } } }, "bpmn-js-properties-panel": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.21.0.tgz", - "integrity": "sha512-w++3hH8ArQ1XiqClN/WERs3D/UPM90lb/gW05YpoF7WFBpuN9qN2GpwxO/HijfR8bLnhwbcxEP7MHTiG+K/R1w==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/bpmn-js-properties-panel/-/bpmn-js-properties-panel-1.22.0.tgz", + "integrity": "sha512-pJZCuYSDAVcpfOyhimwhrhM87NDE+XkWwRuxVjkoe97TjSFaT1UW4e7ZKLP9JJOT2P4TMmbRLKE8ftJe0Hm9Rw==", "requires": { - "@bpmn-io/element-templates-validator": "^0.13.0", + "@bpmn-io/element-templates-validator": "^0.14.0", "@bpmn-io/extract-process-variables": "^0.8.0", "array-move": "^3.0.1", "classnames": "^2.3.1", @@ -38211,11 +38503,19 @@ "min-dash": "^4.0.0", "min-dom": "^4.0.3", "preact-markup": "^2.1.1", - "semver-compare": "^1.0.0" + "semver-compare": "^1.0.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } } }, "bpmn-js-spiffworkflow": { - "version": "git+ssh://git@github.com/sartography/bpmn-js-spiffworkflow.git#313969da1067fce0a51b152626a609a122697693", + "version": "git+ssh://git@github.com/sartography/bpmn-js-spiffworkflow.git#0a9db509a0e85aa7adecc8301d8fbca9db75ac7c", "from": "bpmn-js-spiffworkflow@github:sartography/bpmn-js-spiffworkflow#main", "requires": { "inherits": "^2.0.4", @@ -38251,19 +38551,32 @@ } }, "bpmn-moddle": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz", - "integrity": "sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/bpmn-moddle/-/bpmn-moddle-8.0.1.tgz", + "integrity": "sha512-mwZcrWhi52+JH5Oq58WwKYcUxQ1ZMiDQuzt1bpqiqEEFFnQLqCgtLwEXQuDXFmAuQPdMAghyPzqdOZQqIQVesw==", "requires": { - "min-dash": "^3.5.2", - "moddle": "^5.0.2", - "moddle-xml": "^9.0.6" + "min-dash": "^4.0.0", + "moddle": "^6.0.0", + "moddle-xml": "^10.0.0" }, "dependencies": { - "min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" + "moddle": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/moddle/-/moddle-6.2.1.tgz", + "integrity": "sha512-rBT4P19k9wKOerFHNJQugw25CK6DK5m4lVZGac7godbWNPsbJgr1K4GJ+pqM1ErbRYxljXCTDgPhJLoDWE4wwQ==", + "requires": { + "min-dash": "^4.0.0" + } + }, + "moddle-xml": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/moddle-xml/-/moddle-xml-10.1.0.tgz", + "integrity": "sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg==", + "requires": { + "min-dash": "^4.0.0", + "moddle": "^6.0.0", + "saxen": "^8.1.2" + } } } }, @@ -40728,42 +41041,36 @@ } }, "diagram-js": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", - "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-11.13.1.tgz", + "integrity": "sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ==", "requires": { - "css.escape": "^1.5.1", - "didi": "^8.0.1", + "@bpmn-io/diagram-js-ui": "^0.2.2", + "clsx": "^1.2.1", + "didi": "^9.0.2", "hammerjs": "^2.0.1", - "inherits-browser": "0.0.1", - "min-dash": "^3.5.2", - "min-dom": "^3.2.0", + "inherits-browser": "^0.1.0", + "min-dash": "^4.1.0", + "min-dom": "^4.1.0", "object-refs": "^0.3.0", "path-intersection": "^2.2.1", - "tiny-svg": "^2.2.2" + "tiny-svg": "^3.0.1" }, "dependencies": { - "component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" + "didi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", + "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" }, - "min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" + "inherits-browser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", + "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" }, - "min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", - "requires": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" - } + "tiny-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", + "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" } } }, @@ -40887,6 +41194,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "requires": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "min-dash": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", @@ -40903,6 +41226,18 @@ "matches-selector": "^1.2.0", "min-dash": "^3.8.1" } + }, + "table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "requires": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + } } } }, @@ -40926,6 +41261,29 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "requires": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + }, + "dependencies": { + "inherits-browser": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.0.1.tgz", + "integrity": "sha512-kaDA3DkCdCpvrKIo/1T/3yVn+qpFUHLjYtSHmTYewb+QfjfaQy6FGQ7LwBu7st0tG9UvYad/XAlqQmdIh6CICw==" + } + } + }, "inherits-browser": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", @@ -40969,6 +41327,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "requires": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "min-dash": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", @@ -40985,6 +41359,18 @@ "matches-selector": "^1.2.0", "min-dash": "^3.8.1" } + }, + "table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "requires": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + } } } }, @@ -40996,40 +41382,6 @@ "diagram-js": "^11.11.0", "min-dash": "^4.0.0", "min-dom": "^4.1.0" - }, - "dependencies": { - "diagram-js": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-11.13.0.tgz", - "integrity": "sha512-10jE//ZN1BHUCvDpzOjqULyRyZPCmNjBdNsF+Q77w8zFYD8z9VBB7TJrWfDblPRgPins9bj2HA+MfJK5f+ZsLw==", - "requires": { - "@bpmn-io/diagram-js-ui": "^0.2.2", - "clsx": "^1.2.1", - "didi": "^9.0.2", - "hammerjs": "^2.0.1", - "inherits-browser": "^0.1.0", - "min-dash": "^4.1.0", - "min-dom": "^4.1.0", - "object-refs": "^0.3.0", - "path-intersection": "^2.2.1", - "tiny-svg": "^3.0.1" - } - }, - "didi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/didi/-/didi-9.0.2.tgz", - "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" - }, - "inherits-browser": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/inherits-browser/-/inherits-browser-0.1.0.tgz", - "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" - }, - "tiny-svg": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-3.0.1.tgz", - "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" - } } }, "dmn-js-shared": { @@ -41054,6 +41406,22 @@ "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" }, + "diagram-js": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/diagram-js/-/diagram-js-8.9.0.tgz", + "integrity": "sha512-577bUEbkwZ7id4SCXcD2qrlKoRPXry2SDSPt5T6tEOjwKrTllKr5d1HZoJzGws4VMQq5fmY51Gce1iFT9S4Dlw==", + "requires": { + "css.escape": "^1.5.1", + "didi": "^8.0.1", + "hammerjs": "^2.0.1", + "inherits-browser": "0.0.1", + "min-dash": "^3.5.2", + "min-dom": "^3.2.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^2.2.2" + } + }, "ids": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/ids/-/ids-0.2.2.tgz", @@ -41078,6 +41446,25 @@ "matches-selector": "^1.2.0", "min-dash": "^3.8.1" } + }, + "table-js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", + "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", + "requires": { + "didi": "^8.0.1", + "ids": "^1.0.0", + "min-dash": "^3.8.1", + "min-dom": "^3.2.1", + "selection-ranges": "^3.0.3" + }, + "dependencies": { + "ids": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ids/-/ids-1.0.0.tgz", + "integrity": "sha512-Zvtq1xUto4LttpstyOlFum8lKx+i1OmRfg+6A9drFS9iSZsDPMHG4Sof/qwNR4kCU7jBeWFPrY2ocHxiz7cCRw==" + } + } } } }, @@ -41560,6 +41947,11 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -43443,6 +43835,11 @@ "define-properties": "^1.1.3" } }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -43456,6 +43853,11 @@ "slash": "^3.0.0" } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -44386,6 +44788,14 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -44419,6 +44829,15 @@ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -53235,42 +53654,6 @@ } } }, - "table-js": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/table-js/-/table-js-7.3.0.tgz", - "integrity": "sha512-4SkzffNPPM3x3JC2c1WQ967lC+B5FjtfLBt/SZzqKBavzf0dp/lfPIQMU5obYFnKua6OViXEIkq8lIem/UPXDw==", - "requires": { - "didi": "^8.0.1", - "ids": "^1.0.0", - "min-dash": "^3.8.1", - "min-dom": "^3.2.1", - "selection-ranges": "^3.0.3" - }, - "dependencies": { - "component-event": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/component-event/-/component-event-0.1.4.tgz", - "integrity": "sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==" - }, - "min-dash": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/min-dash/-/min-dash-3.8.1.tgz", - "integrity": "sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==" - }, - "min-dom": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/min-dom/-/min-dom-3.2.1.tgz", - "integrity": "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==", - "requires": { - "component-event": "^0.1.4", - "domify": "^1.3.1", - "indexof": "0.0.1", - "matches-selector": "^1.2.0", - "min-dash": "^3.8.1" - } - } - } - }, "tailwindcss": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", @@ -53661,6 +54044,15 @@ "setimmediate": "^1.0.4" } }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tiny-svg": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/tiny-svg/-/tiny-svg-2.2.4.tgz", diff --git a/spiffworkflow-frontend/package.json b/spiffworkflow-frontend/package.json index 151b12a4..85e00d59 100644 --- a/spiffworkflow-frontend/package.json +++ b/spiffworkflow-frontend/package.json @@ -31,14 +31,14 @@ "autoprefixer": "10.4.8", "axios": "^0.27.2", "bootstrap": "^5.2.0", - "bpmn-js": "^9.3.2", - "bpmn-js-properties-panel": "^1.10.0", + "bpmn-js": "^13.0.0", + "bpmn-js-properties-panel": "^1.22.0", "bpmn-js-spiffworkflow": "github:sartography/bpmn-js-spiffworkflow#main", "cookie": "^0.5.0", "craco": "^0.0.3", "cypress-slow-down": "^1.2.1", "date-fns": "^2.28.0", - "diagram-js": "^8.5.0", + "diagram-js": "^11.9.1", "dmn-js": "^12.2.0", "dmn-js-properties-panel": "^1.1", "dmn-js-shared": "^12.1.1", diff --git a/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx b/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx index 212014cf..f4ecc227 100644 --- a/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx +++ b/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx @@ -1,7 +1,5 @@ /* eslint-disable sonarjs/cognitive-complexity */ -// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'bpmn... Remove this comment to see the full error message import BpmnModeler from 'bpmn-js/lib/Modeler'; -// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'bpmn... Remove this comment to see the full error message import BpmnViewer from 'bpmn-js/lib/Viewer'; import { BpmnPropertiesPanelModule, diff --git a/spiffworkflow-frontend/src/interfaces.ts b/spiffworkflow-frontend/src/interfaces.ts index aa0579e9..9b760c2e 100644 --- a/spiffworkflow-frontend/src/interfaces.ts +++ b/spiffworkflow-frontend/src/interfaces.ts @@ -37,6 +37,11 @@ export interface EventDefinition { message_var?: string; } +export interface SignalButton { + label: string; + event: EventDefinition; +} + // TODO: merge with ProcessInstanceTask export interface Task { id: number; @@ -60,6 +65,7 @@ export interface Task { can_complete: boolean; form_schema: any; form_ui_schema: any; + signal_buttons: SignalButton[]; } export interface ProcessInstanceTask { diff --git a/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx b/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx index 3a74abb5..254737fd 100644 --- a/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx +++ b/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx @@ -58,7 +58,6 @@ export default function ProcessInterstitial() { // Added this seperate use effect so that the timer interval will be cleared if // we end up redirecting back to the TaskShow page. if (shouldRedirect(lastTask)) { - setState('REDIRECTING'); lastTask.properties.instructionsForEndUser = ''; const timerId = setInterval(() => { navigate(`/tasks/${lastTask.process_instance_id}/${lastTask.id}`); @@ -103,16 +102,17 @@ export default function ProcessInterstitial() { const getReturnHomeButton = (index: number) => { if ( index === 0 && - state !== 'REDIRECTING' && + !shouldRedirect(lastTask) && ['WAITING', 'ERROR', 'LOCKED', 'COMPLETED', 'READY'].includes(getStatus()) - ) + ) { return ( -
+
); + } return ''; }; @@ -165,7 +165,7 @@ export default function ProcessInterstitial() { /** In the event there is no task information and the connection closed, * redirect to the home page. */ - if (state === 'closed' && lastTask === null) { + if (state === 'CLOSED' && lastTask === null) { navigate(`/tasks`); } if (lastTask) { diff --git a/spiffworkflow-frontend/src/routes/TaskShow.tsx b/spiffworkflow-frontend/src/routes/TaskShow.tsx index 6468f655..9d2bda02 100644 --- a/spiffworkflow-frontend/src/routes/TaskShow.tsx +++ b/spiffworkflow-frontend/src/routes/TaskShow.tsx @@ -18,7 +18,7 @@ import Form from '../themes/carbon'; import HttpService from '../services/HttpService'; import useAPIError from '../hooks/UseApiError'; import { modifyProcessIdentifierForPathParam } from '../helpers'; -import { Task } from '../interfaces'; +import {EventDefinition, Task} from '../interfaces'; import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; import InstructionsForEndUser from '../components/InstructionsForEndUser'; @@ -195,6 +195,24 @@ export default function TaskShow() { }); }; + const handleSignalSubmit = (event: EventDefinition) => { + console.log("Signal Event ", event) + if (disabled || !task) { + return; + } + HttpService.makeCallToBackend({ + path: `/send-event/${modifyProcessIdentifierForPathParam( + task.process_model_identifier + )}/${params.process_instance_id}`, + successCallback: processSubmitResult, + failureCallback: (error: any) => { + addError(error); + }, + httpMethod: 'POST', + postBody: event, + }); + } + const buildTaskNavigation = () => { let userTasksElement; let selectedTabIndex = 0; @@ -349,14 +367,19 @@ export default function TaskShow() { ); } - reactFragmentToHideSubmitButton = ( - + reactFragmentToHideSubmitButton = {saveAsDraftButton} - - ); + <> + {task.signal_buttons.map((signal, i) => + + )} + + ; } const customValidate = (formData: any, errors: any) => { From a3bf16c902623991e1a38b55c2c26be47a339c2b Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 2 May 2023 14:00:15 -0400 Subject: [PATCH 2/5] run_pyl --- .../spiffworkflow_backend/config/__init__.py | 12 +++++----- .../models/process_instance.py | 6 ++--- .../src/spiffworkflow_backend/models/task.py | 3 ++- .../routes/process_api_blueprint.py | 1 - .../services/process_instance_processor.py | 12 +++++----- .../services/task_service.py | 17 ++++++++------ .../unit/test_task_service.py | 13 +++++------ .../src/routes/ProcessInterstitial.tsx | 2 +- .../src/routes/TaskShow.tsx | 22 ++++++++++++------- 9 files changed, 48 insertions(+), 40 deletions(-) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/config/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/config/__init__.py index 7711c36f..eaf67f6c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/config/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/config/__init__.py @@ -18,13 +18,13 @@ def setup_database_uri(app: Flask) -> None: if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_URI") is None: database_name = f"spiffworkflow_backend_{app.config['ENV_IDENTIFIER']}" if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "sqlite": - app.config["SQLALCHEMY_DATABASE_URI"] = ( - f"sqlite:///{app.instance_path}/db_{app.config['ENV_IDENTIFIER']}.sqlite3" - ) + app.config[ + "SQLALCHEMY_DATABASE_URI" + ] = f"sqlite:///{app.instance_path}/db_{app.config['ENV_IDENTIFIER']}.sqlite3" elif app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "postgres": - app.config["SQLALCHEMY_DATABASE_URI"] = ( - f"postgresql://spiffworkflow_backend:spiffworkflow_backend@localhost:5432/{database_name}" - ) + app.config[ + "SQLALCHEMY_DATABASE_URI" + ] = f"postgresql://spiffworkflow_backend:spiffworkflow_backend@localhost:5432/{database_name}" else: # use pswd to trick flake8 with hardcoded passwords db_pswd = app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD") diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py index 61887102..2cc0053e 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py @@ -129,9 +129,9 @@ class ProcessInstanceModel(SpiffworkflowBaseDBModel): def serialized_with_metadata(self) -> dict[str, Any]: process_instance_attributes = self.serialized process_instance_attributes["process_metadata"] = self.process_metadata - process_instance_attributes["process_model_with_diagram_identifier"] = ( - self.process_model_with_diagram_identifier - ) + process_instance_attributes[ + "process_model_with_diagram_identifier" + ] = self.process_model_with_diagram_identifier return process_instance_attributes @property diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py index 1b759cf2..04e08f26 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/task.py @@ -2,6 +2,7 @@ import enum from dataclasses import dataclass from typing import Any +from typing import List from typing import Optional from typing import TYPE_CHECKING from typing import Union @@ -85,7 +86,7 @@ class TaskModel(SpiffworkflowBaseDBModel): can_complete: Optional[bool] = None extensions: Optional[dict] = None name_for_display: Optional[str] = None - signal_buttons: Optional[dict] = None + signal_buttons: Optional[List[dict]] = None def get_data(self) -> dict: return {**self.python_env_data(), **self.json_data()} diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py index 00ea6086..3380d76d 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py @@ -18,7 +18,6 @@ from spiffworkflow_backend.exceptions.process_entity_not_found_error import ( ) from spiffworkflow_backend.models.principal import PrincipalModel from spiffworkflow_backend.models.process_instance import ProcessInstanceModel -from spiffworkflow_backend.models.process_instance import ProcessInstanceModelSchema from spiffworkflow_backend.models.process_instance_file_data import ( ProcessInstanceFileDataModel, ) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py index 45d27509..017d9e79 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py @@ -423,9 +423,9 @@ class ProcessInstanceProcessor: tld.process_instance_id = process_instance_model.id # we want this to be the fully qualified path to the process model including all group subcomponents - current_app.config["THREAD_LOCAL_DATA"].process_model_identifier = ( - f"{process_instance_model.process_model_identifier}" - ) + current_app.config[ + "THREAD_LOCAL_DATA" + ].process_model_identifier = f"{process_instance_model.process_model_identifier}" self.process_instance_model = process_instance_model self.process_model_service = ProcessModelService() @@ -585,9 +585,9 @@ class ProcessInstanceProcessor: bpmn_subprocess_definition.bpmn_identifier ] = bpmn_process_definition_dict spiff_bpmn_process_dict["subprocess_specs"][bpmn_subprocess_definition.bpmn_identifier]["task_specs"] = {} - bpmn_subprocess_definition_bpmn_identifiers[bpmn_subprocess_definition.id] = ( - bpmn_subprocess_definition.bpmn_identifier - ) + bpmn_subprocess_definition_bpmn_identifiers[ + bpmn_subprocess_definition.id + ] = bpmn_subprocess_definition.bpmn_identifier task_definitions = TaskDefinitionModel.query.filter( TaskDefinitionModel.bpmn_process_definition_id.in_( # type: ignore diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py index 9bbff115..047f8f50 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/task_service.py @@ -2,7 +2,8 @@ import copy import json import time from hashlib import sha256 -from typing import Optional, List +from typing import List +from typing import Optional from typing import Tuple from typing import TypedDict from typing import Union @@ -642,17 +643,19 @@ class TaskService: for task_model in waiting_tasks: task_definition = task_model.task_definition extensions: dict = ( - task_definition.properties_json["extensions"] if "extensions" in task_definition.properties_json else {} + task_definition.properties_json["extensions"] + if "extensions" in task_definition.properties_json + else {} ) event_definition: dict = ( - task_definition.properties_json["event_definition"] if "event_definition" in task_definition.properties_json else {} + task_definition.properties_json["event_definition"] + if "event_definition" in task_definition.properties_json + else {} ) - if 'signalButtonLabel' in extensions and 'name' in event_definition: - result.append({'event': event_definition, 'label': extensions['signalButtonLabel']}) + if "signalButtonLabel" in extensions and "name" in event_definition: + result.append({"event": event_definition, "label": extensions["signalButtonLabel"]}) return result - - @classmethod def get_spec_reference_from_bpmn_process(cls, bpmn_process: BpmnProcessModel) -> SpecReferenceCache: """Get the bpmn file for a given task model. diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py index 21fd7d32..d1064317 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/unit/test_task_service.py @@ -157,7 +157,6 @@ class TestTaskService(BaseTest): bpmn_process = TaskService.bpmn_process_for_called_activity_or_top_level_process(task_model_level_3) assert bpmn_process.bpmn_process_definition.bpmn_identifier == "Level3" - def test_get_button_labels_for_waiting_signal_event_tasks( self, app: Flask, @@ -169,18 +168,18 @@ class TestTaskService(BaseTest): bpmn_file_name="signal_event_extensions", ) load_test_spec( - f"test_group/SpiffCatchEventExtensions", + "test_group/SpiffCatchEventExtensions", process_model_source_directory="call_activity_nested", - bpmn_file_name="SpiffCatchEventExtensions" + bpmn_file_name="SpiffCatchEventExtensions", ) process_instance = self.create_process_instance_from_process_model(process_model) processor = ProcessInstanceProcessor(process_instance) processor.do_engine_steps(save=True, execution_strategy_name="greedy") events = TaskService.get_ready_signals_with_button_labels(process_instance.id) - assert(len(events) == 1) + assert len(events) == 1 signal_event = events[0] - assert(signal_event['event']['name'] == 'eat_spam') - assert(signal_event['event']['typename'] == 'SignalEventDefinition') - assert(signal_event['label'] == 'Eat Spam') + assert signal_event["event"]["name"] == "eat_spam" + assert signal_event["event"]["typename"] == "SignalEventDefinition" + assert signal_event["label"] == "Eat Spam" print(events) diff --git a/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx b/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx index 254737fd..a5f6b3d3 100644 --- a/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx +++ b/spiffworkflow-frontend/src/routes/ProcessInterstitial.tsx @@ -106,7 +106,7 @@ export default function ProcessInterstitial() { ['WAITING', 'ERROR', 'LOCKED', 'COMPLETED', 'READY'].includes(getStatus()) ) { return ( -
+
diff --git a/spiffworkflow-frontend/src/routes/TaskShow.tsx b/spiffworkflow-frontend/src/routes/TaskShow.tsx index 9d2bda02..7d14ecf8 100644 --- a/spiffworkflow-frontend/src/routes/TaskShow.tsx +++ b/spiffworkflow-frontend/src/routes/TaskShow.tsx @@ -18,7 +18,7 @@ import Form from '../themes/carbon'; import HttpService from '../services/HttpService'; import useAPIError from '../hooks/UseApiError'; import { modifyProcessIdentifierForPathParam } from '../helpers'; -import {EventDefinition, Task} from '../interfaces'; +import { EventDefinition, Task } from '../interfaces'; import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; import InstructionsForEndUser from '../components/InstructionsForEndUser'; @@ -196,7 +196,7 @@ export default function TaskShow() { }; const handleSignalSubmit = (event: EventDefinition) => { - console.log("Signal Event ", event) + console.log('Signal Event ', event); if (disabled || !task) { return; } @@ -211,7 +211,7 @@ export default function TaskShow() { httpMethod: 'POST', postBody: event, }); - } + }; const buildTaskNavigation = () => { let userTasksElement; @@ -367,19 +367,25 @@ export default function TaskShow() { ); } - reactFragmentToHideSubmitButton = + reactFragmentToHideSubmitButton = ( + {saveAsDraftButton} <> - {task.signal_buttons.map((signal, i) => - - )} + ))} - ; + + ); } const customValidate = (formData: any, errors: any) => { From 7e676406208db4f50e2a6e131e48dfa8c3626f29 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 2 May 2023 14:53:39 -0400 Subject: [PATCH 3/5] hide the js-properties-panel if we are in view-only mode. --- .../src/components/ReactDiagramEditor.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx b/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx index f4ecc227..cddb7211 100644 --- a/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx +++ b/spiffworkflow-frontend/src/components/ReactDiagramEditor.tsx @@ -142,11 +142,14 @@ export default function ReactDiagramEditor({ } const temp = document.createElement('template'); + const panelId: string = + diagramType === 'readonly' + ? 'hidden-properties-panel' + : 'js-properties-panel'; temp.innerHTML = `
-
-
+
+
`; const frag = temp.content; From c0dda4a2f22fc9d87e09fd08157b7e8e7cc5df6a Mon Sep 17 00:00:00 2001 From: burnettk Date: Wed, 3 May 2023 10:11:48 -0400 Subject: [PATCH 4/5] remove deprecated script --- .../scripts/get_process_info.py | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_process_info.py diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_process_info.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_process_info.py deleted file mode 100644 index bebf51cc..00000000 --- a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_process_info.py +++ /dev/null @@ -1,28 +0,0 @@ -"""Get_process_info.""" -from typing import Any - -from spiffworkflow_backend.models.script_attributes_context import ( - ScriptAttributesContext, -) -from spiffworkflow_backend.scripts.script import Script - - -# DEPRECATED: please use GetToplevelProcessInfo instead -class GetProcessInfo(Script): - """GetProcessInfo.""" - - @staticmethod - def requires_privileged_permissions() -> bool: - """We have deemed this function safe to run without elevated permissions.""" - return False - - def get_description(self) -> str: - """Get_description.""" - return """Returns a dictionary of information about the currently running process.""" - - def run(self, script_attributes_context: ScriptAttributesContext, *_args: Any, **kwargs: Any) -> Any: - """Run.""" - return { - "process_instance_id": script_attributes_context.process_instance_id, - "process_model_identifier": script_attributes_context.process_model_identifier, - } From da0e2480e43e9fa67a9df1d240a1e0dde6317e9f Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 3 May 2023 10:11:54 -0400 Subject: [PATCH 5/5] remove chatty console log. --- spiffworkflow-frontend/src/routes/TaskShow.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/spiffworkflow-frontend/src/routes/TaskShow.tsx b/spiffworkflow-frontend/src/routes/TaskShow.tsx index 7d14ecf8..ed58af14 100644 --- a/spiffworkflow-frontend/src/routes/TaskShow.tsx +++ b/spiffworkflow-frontend/src/routes/TaskShow.tsx @@ -196,7 +196,6 @@ export default function TaskShow() { }; const handleSignalSubmit = (event: EventDefinition) => { - console.log('Signal Event ', event); if (disabled || !task) { return; }