cognite-neat 0.87.6__py3-none-any.whl → 0.88.1__py3-none-any.whl

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.

Potentially problematic release.


This version of cognite-neat might be problematic. Click here for more details.

Files changed (171) hide show
  1. cognite/neat/_version.py +1 -1
  2. cognite/neat/app/api/data_classes/rest.py +0 -19
  3. cognite/neat/app/api/explorer.py +6 -4
  4. cognite/neat/app/api/routers/configuration.py +1 -1
  5. cognite/neat/app/api/routers/crud.py +11 -21
  6. cognite/neat/app/api/routers/workflows.py +24 -94
  7. cognite/neat/app/ui/neat-app/build/asset-manifest.json +7 -7
  8. cognite/neat/app/ui/neat-app/build/index.html +1 -1
  9. cognite/neat/app/ui/neat-app/build/static/css/{main.38a62222.css → main.72e3d92e.css} +2 -2
  10. cognite/neat/app/ui/neat-app/build/static/css/main.72e3d92e.css.map +1 -0
  11. cognite/neat/app/ui/neat-app/build/static/js/main.5a52cf09.js +3 -0
  12. cognite/neat/app/ui/neat-app/build/static/js/{main.ec7f72e2.js.LICENSE.txt → main.5a52cf09.js.LICENSE.txt} +0 -9
  13. cognite/neat/app/ui/neat-app/build/static/js/main.5a52cf09.js.map +1 -0
  14. cognite/neat/config.py +44 -27
  15. cognite/neat/exceptions.py +6 -0
  16. cognite/neat/graph/extractors/_classic_cdf/_assets.py +21 -73
  17. cognite/neat/graph/extractors/_classic_cdf/_base.py +102 -0
  18. cognite/neat/graph/extractors/_classic_cdf/_events.py +46 -42
  19. cognite/neat/graph/extractors/_classic_cdf/_files.py +41 -45
  20. cognite/neat/graph/extractors/_classic_cdf/_labels.py +75 -52
  21. cognite/neat/graph/extractors/_classic_cdf/_relationships.py +49 -27
  22. cognite/neat/graph/extractors/_classic_cdf/_sequences.py +47 -50
  23. cognite/neat/graph/extractors/_classic_cdf/_timeseries.py +47 -49
  24. cognite/neat/graph/queries/_base.py +22 -29
  25. cognite/neat/graph/queries/_shared.py +1 -1
  26. cognite/neat/graph/stores/_base.py +24 -11
  27. cognite/neat/graph/transformers/_rdfpath.py +3 -2
  28. cognite/neat/issues.py +8 -0
  29. cognite/neat/rules/exporters/_rules2ontology.py +28 -20
  30. cognite/neat/rules/exporters/_validation.py +15 -21
  31. cognite/neat/rules/importers/_inference2rules.py +31 -35
  32. cognite/neat/rules/importers/_owl2rules/_owl2metadata.py +3 -7
  33. cognite/neat/rules/importers/_spreadsheet2rules.py +30 -27
  34. cognite/neat/rules/issues/dms.py +20 -0
  35. cognite/neat/rules/issues/importing.py +15 -0
  36. cognite/neat/rules/issues/ontology.py +298 -0
  37. cognite/neat/rules/issues/spreadsheet.py +48 -0
  38. cognite/neat/rules/issues/tables.py +72 -0
  39. cognite/neat/rules/models/_rdfpath.py +4 -4
  40. cognite/neat/rules/models/_types/_field.py +9 -19
  41. cognite/neat/rules/models/information/_rules.py +5 -4
  42. cognite/neat/utils/rdf_.py +17 -9
  43. cognite/neat/utils/regex_patterns.py +52 -0
  44. cognite/neat/workflows/steps/data_contracts.py +17 -43
  45. cognite/neat/workflows/steps/lib/current/graph_extractor.py +28 -24
  46. cognite/neat/workflows/steps/lib/current/graph_loader.py +4 -21
  47. cognite/neat/workflows/steps/lib/current/graph_store.py +18 -134
  48. cognite/neat/workflows/steps_registry.py +5 -7
  49. {cognite_neat-0.87.6.dist-info → cognite_neat-0.88.1.dist-info}/METADATA +2 -6
  50. cognite_neat-0.88.1.dist-info/RECORD +209 -0
  51. cognite/neat/app/api/routers/core.py +0 -91
  52. cognite/neat/app/api/routers/data_exploration.py +0 -336
  53. cognite/neat/app/api/routers/rules.py +0 -203
  54. cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +0 -1
  55. cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js +0 -3
  56. cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.map +0 -1
  57. cognite/neat/graph/stores/_oxrdflib.py +0 -247
  58. cognite/neat/legacy/__init__.py +0 -0
  59. cognite/neat/legacy/graph/__init__.py +0 -3
  60. cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -20182
  61. cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44.xml +0 -20163
  62. cognite/neat/legacy/graph/examples/__init__.py +0 -10
  63. cognite/neat/legacy/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  64. cognite/neat/legacy/graph/exceptions.py +0 -90
  65. cognite/neat/legacy/graph/extractors/__init__.py +0 -6
  66. cognite/neat/legacy/graph/extractors/_base.py +0 -14
  67. cognite/neat/legacy/graph/extractors/_dexpi.py +0 -44
  68. cognite/neat/legacy/graph/extractors/_graph_capturing_sheet.py +0 -403
  69. cognite/neat/legacy/graph/extractors/_mock_graph_generator.py +0 -361
  70. cognite/neat/legacy/graph/loaders/__init__.py +0 -23
  71. cognite/neat/legacy/graph/loaders/_asset_loader.py +0 -511
  72. cognite/neat/legacy/graph/loaders/_base.py +0 -67
  73. cognite/neat/legacy/graph/loaders/_exceptions.py +0 -85
  74. cognite/neat/legacy/graph/loaders/core/__init__.py +0 -0
  75. cognite/neat/legacy/graph/loaders/core/labels.py +0 -58
  76. cognite/neat/legacy/graph/loaders/core/models.py +0 -136
  77. cognite/neat/legacy/graph/loaders/core/rdf_to_assets.py +0 -1046
  78. cognite/neat/legacy/graph/loaders/core/rdf_to_relationships.py +0 -559
  79. cognite/neat/legacy/graph/loaders/rdf_to_dms.py +0 -309
  80. cognite/neat/legacy/graph/loaders/validator.py +0 -87
  81. cognite/neat/legacy/graph/models.py +0 -6
  82. cognite/neat/legacy/graph/stores/__init__.py +0 -13
  83. cognite/neat/legacy/graph/stores/_base.py +0 -400
  84. cognite/neat/legacy/graph/stores/_graphdb_store.py +0 -52
  85. cognite/neat/legacy/graph/stores/_memory_store.py +0 -43
  86. cognite/neat/legacy/graph/stores/_oxigraph_store.py +0 -151
  87. cognite/neat/legacy/graph/stores/_oxrdflib.py +0 -247
  88. cognite/neat/legacy/graph/stores/_rdf_to_graph.py +0 -42
  89. cognite/neat/legacy/graph/transformations/__init__.py +0 -0
  90. cognite/neat/legacy/graph/transformations/entity_matcher.py +0 -101
  91. cognite/neat/legacy/graph/transformations/query_generator/__init__.py +0 -3
  92. cognite/neat/legacy/graph/transformations/query_generator/sparql.py +0 -575
  93. cognite/neat/legacy/graph/transformations/transformer.py +0 -322
  94. cognite/neat/legacy/rules/__init__.py +0 -0
  95. cognite/neat/legacy/rules/analysis.py +0 -231
  96. cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
  97. cognite/neat/legacy/rules/examples/Rules-Nordic44.xlsx +0 -0
  98. cognite/neat/legacy/rules/examples/__init__.py +0 -18
  99. cognite/neat/legacy/rules/examples/power-grid-containers.yaml +0 -124
  100. cognite/neat/legacy/rules/examples/power-grid-example.xlsx +0 -0
  101. cognite/neat/legacy/rules/examples/power-grid-model.yaml +0 -224
  102. cognite/neat/legacy/rules/examples/rules-template.xlsx +0 -0
  103. cognite/neat/legacy/rules/examples/sheet2cdf-transformation-rules.xlsx +0 -0
  104. cognite/neat/legacy/rules/examples/skos-rules.xlsx +0 -0
  105. cognite/neat/legacy/rules/examples/source-to-solution-mapping-rules.xlsx +0 -0
  106. cognite/neat/legacy/rules/examples/wind-energy.owl +0 -1511
  107. cognite/neat/legacy/rules/exceptions.py +0 -2972
  108. cognite/neat/legacy/rules/exporters/__init__.py +0 -20
  109. cognite/neat/legacy/rules/exporters/_base.py +0 -45
  110. cognite/neat/legacy/rules/exporters/_core/__init__.py +0 -5
  111. cognite/neat/legacy/rules/exporters/_core/rules2labels.py +0 -24
  112. cognite/neat/legacy/rules/exporters/_rules2dms.py +0 -885
  113. cognite/neat/legacy/rules/exporters/_rules2excel.py +0 -213
  114. cognite/neat/legacy/rules/exporters/_rules2graphql.py +0 -183
  115. cognite/neat/legacy/rules/exporters/_rules2ontology.py +0 -524
  116. cognite/neat/legacy/rules/exporters/_rules2pydantic_models.py +0 -748
  117. cognite/neat/legacy/rules/exporters/_rules2rules.py +0 -105
  118. cognite/neat/legacy/rules/exporters/_rules2triples.py +0 -38
  119. cognite/neat/legacy/rules/exporters/_validation.py +0 -146
  120. cognite/neat/legacy/rules/importers/__init__.py +0 -22
  121. cognite/neat/legacy/rules/importers/_base.py +0 -66
  122. cognite/neat/legacy/rules/importers/_dict2rules.py +0 -158
  123. cognite/neat/legacy/rules/importers/_dms2rules.py +0 -194
  124. cognite/neat/legacy/rules/importers/_graph2rules.py +0 -308
  125. cognite/neat/legacy/rules/importers/_json2rules.py +0 -39
  126. cognite/neat/legacy/rules/importers/_owl2rules/__init__.py +0 -3
  127. cognite/neat/legacy/rules/importers/_owl2rules/_owl2classes.py +0 -239
  128. cognite/neat/legacy/rules/importers/_owl2rules/_owl2metadata.py +0 -260
  129. cognite/neat/legacy/rules/importers/_owl2rules/_owl2properties.py +0 -217
  130. cognite/neat/legacy/rules/importers/_owl2rules/_owl2rules.py +0 -290
  131. cognite/neat/legacy/rules/importers/_spreadsheet2rules.py +0 -45
  132. cognite/neat/legacy/rules/importers/_xsd2rules.py +0 -20
  133. cognite/neat/legacy/rules/importers/_yaml2rules.py +0 -39
  134. cognite/neat/legacy/rules/models/__init__.py +0 -5
  135. cognite/neat/legacy/rules/models/_base.py +0 -151
  136. cognite/neat/legacy/rules/models/raw_rules.py +0 -316
  137. cognite/neat/legacy/rules/models/rdfpath.py +0 -237
  138. cognite/neat/legacy/rules/models/rules.py +0 -1289
  139. cognite/neat/legacy/rules/models/tables.py +0 -9
  140. cognite/neat/legacy/rules/models/value_types.py +0 -118
  141. cognite/neat/legacy/workflows/examples/Export_DMS/workflow.yaml +0 -89
  142. cognite/neat/legacy/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -152
  143. cognite/neat/legacy/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -139
  144. cognite/neat/legacy/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +0 -270
  145. cognite/neat/legacy/workflows/examples/Import_DMS/workflow.yaml +0 -65
  146. cognite/neat/legacy/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -116
  147. cognite/neat/legacy/workflows/examples/Validate_Rules/workflow.yaml +0 -67
  148. cognite/neat/legacy/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -64
  149. cognite/neat/legacy/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -95
  150. cognite/neat/legacy/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -111
  151. cognite/neat/rules/exceptions.py +0 -2972
  152. cognite/neat/rules/models/_types/_base.py +0 -16
  153. cognite/neat/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -152
  154. cognite/neat/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -139
  155. cognite/neat/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +0 -270
  156. cognite/neat/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -116
  157. cognite/neat/workflows/migration/__init__.py +0 -0
  158. cognite/neat/workflows/migration/steps.py +0 -91
  159. cognite/neat/workflows/migration/wf_manifests.py +0 -33
  160. cognite/neat/workflows/steps/lib/legacy/__init__.py +0 -7
  161. cognite/neat/workflows/steps/lib/legacy/graph_contextualization.py +0 -82
  162. cognite/neat/workflows/steps/lib/legacy/graph_extractor.py +0 -746
  163. cognite/neat/workflows/steps/lib/legacy/graph_loader.py +0 -606
  164. cognite/neat/workflows/steps/lib/legacy/graph_store.py +0 -307
  165. cognite/neat/workflows/steps/lib/legacy/graph_transformer.py +0 -58
  166. cognite/neat/workflows/steps/lib/legacy/rules_exporter.py +0 -511
  167. cognite/neat/workflows/steps/lib/legacy/rules_importer.py +0 -612
  168. cognite_neat-0.87.6.dist-info/RECORD +0 -319
  169. {cognite_neat-0.87.6.dist-info → cognite_neat-0.88.1.dist-info}/LICENSE +0 -0
  170. {cognite_neat-0.87.6.dist-info → cognite_neat-0.88.1.dist-info}/WHEEL +0 -0
  171. {cognite_neat-0.87.6.dist-info → cognite_neat-0.88.1.dist-info}/entry_points.txt +0 -0
@@ -1,203 +0,0 @@
1
- import logging
2
- from pathlib import Path
3
- from typing import Any, cast
4
-
5
- from fastapi import APIRouter, Response
6
- from rdflib import Namespace
7
-
8
- from cognite.neat.app.api.configuration import NEAT_APP
9
- from cognite.neat.app.api.data_classes.rest import TransformationRulesUpdateRequest
10
- from cognite.neat.legacy.rules import exporters as legacy_exporters
11
- from cognite.neat.legacy.rules import importers as legacy_importers
12
- from cognite.neat.legacy.rules.models._base import EntityTypes
13
- from cognite.neat.legacy.rules.models.rules import Class, Classes, Metadata, Properties, Property, Rules
14
- from cognite.neat.rules import importers
15
- from cognite.neat.rules.models import RoleTypes
16
- from cognite.neat.workflows.steps.data_contracts import RulesData
17
- from cognite.neat.workflows.steps.lib.current.rules_exporter import RulesToExcel
18
- from cognite.neat.workflows.steps.lib.current.rules_importer import ExcelToRules
19
- from cognite.neat.workflows.steps.lib.legacy.rules_importer import ImportExcelToRules
20
- from cognite.neat.workflows.utils import get_file_hash
21
-
22
- router = APIRouter()
23
-
24
-
25
- @router.get("/api/rules/list")
26
- def get_rules_list():
27
- rules_dir = Path(NEAT_APP.config.rules_store_path)
28
- return {"result": [str(file.name) for file in rules_dir.glob("*.xlsx")]}
29
-
30
-
31
- @router.get("/api/rules")
32
- def get_rules(
33
- sheetname: str = "Properties",
34
- url: str | None = None,
35
- source_type: str | None = None,
36
- orient: str = "columns",
37
- workflow_name: str = "default",
38
- file_name: str | None = None,
39
- version: str | None = None,
40
- as_role: str | None = None,
41
- ) -> dict[str, Any]:
42
- rules_schema_version = ""
43
- if NEAT_APP.cdf_store is None or NEAT_APP.workflow_manager is None:
44
- return {"error": "NeatApp is not initialized"}
45
- if workflow_name != "undefined":
46
- workflow = NEAT_APP.workflow_manager.get_workflow(workflow_name)
47
- if workflow is None:
48
- return {"error": f"Workflow {workflow_name} is not found"}
49
- workflow_definition = workflow.get_workflow_definition()
50
- if not file_name:
51
- for step in workflow_definition.steps:
52
- if step.method == ImportExcelToRules.__name__:
53
- file_name = step.configs["file_name"]
54
- version = step.configs["version"]
55
- break
56
- if step.method == RulesToExcel.__name__ or step.method == ExcelToRules.__name__:
57
- rules_schema_version = "v2"
58
- as_role = step.configs.get("as_role", "")
59
- file_name = step.configs.get("File name", "")
60
- if file_name:
61
- break
62
- file_name = step.configs.get("File path", "")
63
- break
64
-
65
- if not file_name:
66
- return {"error": "File name is not provided"}
67
- rules_file = Path(file_name)
68
- if str(rules_file.parent) == ".":
69
- path = Path(NEAT_APP.config.rules_store_path) / rules_file
70
- else:
71
- path = Path(NEAT_APP.config.data_store_path) / rules_file
72
-
73
- src = "local"
74
- if url:
75
- path = Path(url)
76
-
77
- if path.exists() and not version:
78
- logging.info(f"Loading rules from {path}")
79
- elif path.exists() and version:
80
- hash_ = get_file_hash(path)
81
- if hash_ != version:
82
- NEAT_APP.cdf_store.load_rules_file_from_cdf(file_name, version)
83
- src = "cdf"
84
- else:
85
- NEAT_APP.cdf_store.load_rules_file_from_cdf(file_name, version)
86
- src = "cdf"
87
-
88
- error_text = ""
89
- properties = []
90
- classes = []
91
- remaped_rules = {}
92
- try:
93
- # Trying to load rules V1
94
- if rules_schema_version == "" or rules_schema_version == "v1":
95
- rules = cast(
96
- Rules, legacy_importers.ExcelImporter(path).to_rules(return_report=False, skip_validation=False)
97
- )
98
- properties = [
99
- {
100
- "class": value.class_id,
101
- "property": value.property_id,
102
- "property_description": value.description,
103
- "property_type": (
104
- value.expected_value_type.versioned_id
105
- if value.property_type == EntityTypes.object_property
106
- else value.expected_value_type.suffix
107
- ),
108
- "cdf_resource_type": value.cdf_resource_type,
109
- "cdf_metadata_type": value.resource_type_property,
110
- "rule_type": value.rule_type,
111
- "rule": value.rule,
112
- }
113
- for value in rules.properties.values()
114
- ]
115
-
116
- classes = [
117
- {
118
- "class": value.class_id,
119
- "class_description": value.description,
120
- "cdf_resource_type": value.cdf_resource_type,
121
- }
122
- for value in rules.classes.values()
123
- ]
124
- rules_schema_version = "v1"
125
- remaped_rules = {"properties": properties, "metadata": rules.metadata.model_dump(), "classes": classes}
126
- except Exception as e:
127
- error_text = str(e)
128
-
129
- if rules_schema_version == "" or rules_schema_version == "v2":
130
- try:
131
- role = RoleTypes(as_role) if as_role else None
132
- rules_v2, issues = importers.ExcelImporter(path).to_rules(role=role)
133
- error_text = ""
134
- rules_schema_version = "v2"
135
- if rules_v2:
136
- remaped_rules = rules_v2.model_dump()
137
- except Exception as e:
138
- error_text = str(e)
139
- rules_schema_version = "unknown"
140
-
141
- return {
142
- "rules": remaped_rules,
143
- "file_name": path.name,
144
- "hash": get_file_hash(path),
145
- "error_text": error_text,
146
- "src": src,
147
- "rules_schema_version": rules_schema_version,
148
- }
149
-
150
-
151
- @router.get("/api/rules/from_file")
152
- def get_original_rules_from_file(file_name: str):
153
- # """Endpoint for retrieving raw transformation from file"""
154
- path = Path(NEAT_APP.config.rules_store_path) / file_name
155
- rules = cast(
156
- Rules, legacy_importers.ExcelImporter(filepath=path).to_rules(return_report=False, skip_validation=False)
157
- )
158
- return Response(content=rules.model_dump_json(), media_type="application/json")
159
-
160
-
161
- @router.get("/api/rules/from_workflow")
162
- def get_original_rules_from_workflow(workflow_name: str):
163
- """Endpoing for retrieving transformation from memmory"""
164
- workflow = NEAT_APP.workflow_manager.get_workflow(workflow_name)
165
- if workflow is None:
166
- return {"error": f"Workflow {workflow_name} is not found"}
167
- context = workflow.get_context()
168
- rules_data = context["RulesData"]
169
- if type(rules_data) is not RulesData:
170
- return {"error": "RulesData is not found in workflow context"}
171
-
172
- return Response(content=rules_data.rules.model_dump_json(), media_type="application/json")
173
-
174
-
175
- @router.post("/api/rules/model_and_transformations")
176
- def upsert_rules(request: TransformationRulesUpdateRequest):
177
- """Endpoing for updating transformation rules via API . This endpoint is still experimental"""
178
- rules = request.rules_object
179
- rules["metadata"]["namespace"] = Namespace(rules["metadata"]["namespace"])
180
- metadata = Metadata(**rules["metadata"])
181
- classes = Classes()
182
- for class_, val in rules["classes"].items():
183
- classes[class_] = Class(**val)
184
- properties = Properties()
185
-
186
- for prop, val in rules["properties"].items():
187
- val["resource_type_property"] = []
188
- properties[prop] = Property(**val)
189
-
190
- prefixes: dict[str, Namespace] = {}
191
- for prefix, val in rules["prefixes"].items():
192
- prefixes[prefix] = Namespace(val)
193
-
194
- rules = Rules(metadata=metadata, classes=classes, properties=properties, prefixes=prefixes, instances=[])
195
- if request.output_format == "excel":
196
- rules_file = Path(request.file_name)
197
- if str(rules_file.parent) == ".":
198
- path = Path(NEAT_APP.config.rules_store_path) / rules_file
199
- else:
200
- path = Path(NEAT_APP.config.data_store_path) / rules_file
201
-
202
- legacy_exporters.ExcelExporter(rules=rules).export_to_file(path)
203
- return {"status": "ok"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/css/main.38a62222.css","mappings":"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","sources":["index.css","../node_modules/reactflow/dist/style.css","../node_modules/@react-sigma/core/lib/react-sigma.min.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","/* this gets exported as style.css and can be used for the default theming */\n/* these are the necessary styles for React Flow, they get used by base.css and style.css */\n.react-flow__container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n}\n.react-flow__pane {\n z-index: 1;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.react-flow__pane.dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n }\n.react-flow__viewport {\n transform-origin: 0 0;\n z-index: 2;\n pointer-events: none;\n}\n.react-flow__renderer {\n z-index: 4;\n}\n.react-flow__selectionpane {\n z-index: 5;\n}\n.react-flow__nodesselection-rect:focus,\n.react-flow__nodesselection-rect:focus-visible {\n outline: none;\n}\n.react-flow .react-flow__edges {\n pointer-events: none;\n overflow: visible;\n}\n.react-flow__edge-path,\n.react-flow__connection-path {\n stroke: #b1b1b7;\n stroke-width: 1;\n fill: none;\n}\n.react-flow__edge {\n pointer-events: visibleStroke;\n cursor: pointer;\n}\n.react-flow__edge.animated path {\n stroke-dasharray: 5;\n -webkit-animation: dashdraw 0.5s linear infinite;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__edge.animated path.react-flow__edge-interaction {\n stroke-dasharray: none;\n -webkit-animation: none;\n animation: none;\n }\n.react-flow__edge.inactive {\n pointer-events: none;\n }\n.react-flow__edge.selected,\n .react-flow__edge:focus,\n .react-flow__edge:focus-visible {\n outline: none;\n }\n.react-flow__edge.selected .react-flow__edge-path,\n .react-flow__edge:focus .react-flow__edge-path,\n .react-flow__edge:focus-visible .react-flow__edge-path {\n stroke: #555;\n }\n.react-flow__edge-textwrapper {\n pointer-events: all;\n }\n.react-flow__edge-textbg {\n fill: white;\n }\n.react-flow__edge .react-flow__edge-text {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n.react-flow__connection {\n pointer-events: none;\n}\n.react-flow__connection.animated {\n stroke-dasharray: 5;\n -webkit-animation: dashdraw 0.5s linear infinite;\n animation: dashdraw 0.5s linear infinite;\n }\n.react-flow__connectionline {\n z-index: 1001;\n}\n.react-flow__nodes {\n pointer-events: none;\n transform-origin: 0 0;\n}\n.react-flow__node {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n box-sizing: border-box;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.react-flow__node.dragging {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n }\n.react-flow__nodesselection {\n z-index: 3;\n transform-origin: left top;\n pointer-events: none;\n}\n.react-flow__nodesselection-rect {\n position: absolute;\n pointer-events: all;\n cursor: -webkit-grab;\n cursor: grab;\n }\n.react-flow__handle {\n position: absolute;\n pointer-events: none;\n min-width: 5px;\n min-height: 5px;\n width: 6px;\n height: 6px;\n background: #1a192b;\n border: 1px solid white;\n border-radius: 100%;\n}\n.react-flow__handle.connectable {\n pointer-events: all;\n cursor: crosshair;\n }\n.react-flow__handle-bottom {\n top: auto;\n left: 50%;\n bottom: -4px;\n transform: translate(-50%, 0);\n }\n.react-flow__handle-top {\n left: 50%;\n top: -4px;\n transform: translate(-50%, 0);\n }\n.react-flow__handle-left {\n top: 50%;\n left: -4px;\n transform: translate(0, -50%);\n }\n.react-flow__handle-right {\n right: -4px;\n top: 50%;\n transform: translate(0, -50%);\n }\n.react-flow__edgeupdater {\n cursor: move;\n pointer-events: all;\n}\n.react-flow__panel {\n position: absolute;\n z-index: 5;\n margin: 15px;\n}\n.react-flow__panel.top {\n top: 0;\n }\n.react-flow__panel.bottom {\n bottom: 0;\n }\n.react-flow__panel.left {\n left: 0;\n }\n.react-flow__panel.right {\n right: 0;\n }\n.react-flow__panel.center {\n left: 50%;\n transform: translateX(-50%);\n }\n.react-flow__attribution {\n font-size: 10px;\n background: rgba(255, 255, 255, 0.5);\n padding: 2px 3px;\n margin: 0;\n}\n.react-flow__attribution a {\n text-decoration: none;\n color: #999;\n }\n@-webkit-keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n@keyframes dashdraw {\n from {\n stroke-dashoffset: 10;\n }\n}\n.react-flow__edgelabel-renderer {\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.react-flow__edge.updating .react-flow__edge-path {\n stroke: #777;\n }\n.react-flow__edge-text {\n font-size: 10px;\n }\n.react-flow__node-default,\n.react-flow__node-input,\n.react-flow__node-output,\n.react-flow__node-group {\n padding: 10px;\n border-radius: 3px;\n width: 150px;\n font-size: 12px;\n color: #222;\n text-align: center;\n border-width: 1px;\n border-style: solid;\n border-color: #1a192b;\n background-color: white;\n}\n.react-flow__node-default.selectable:hover, .react-flow__node-input.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {\n box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.08);\n }\n.react-flow__node-default.selectable.selected,\n .react-flow__node-default.selectable:focus,\n .react-flow__node-default.selectable:focus-visible,\n .react-flow__node-input.selectable.selected,\n .react-flow__node-input.selectable:focus,\n .react-flow__node-input.selectable:focus-visible,\n .react-flow__node-output.selectable.selected,\n .react-flow__node-output.selectable:focus,\n .react-flow__node-output.selectable:focus-visible,\n .react-flow__node-group.selectable.selected,\n .react-flow__node-group.selectable:focus,\n .react-flow__node-group.selectable:focus-visible {\n box-shadow: 0 0 0 0.5px #1a192b;\n outline: none;\n }\n.react-flow__node-group {\n background-color: rgba(240, 240, 240, 0.25);\n}\n.react-flow__nodesselection-rect,\n.react-flow__selection {\n background: rgba(0, 89, 220, 0.08);\n border: 1px dotted rgba(0, 89, 220, 0.8);\n}\n.react-flow__nodesselection-rect:focus,\n .react-flow__nodesselection-rect:focus-visible,\n .react-flow__selection:focus,\n .react-flow__selection:focus-visible {\n outline: none;\n }\n.react-flow__controls {\n box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08);\n}\n.react-flow__controls-button {\n border: none;\n background: #fefefe;\n border-bottom: 1px solid #eee;\n box-sizing: content-box;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16px;\n height: 16px;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n padding: 5px;\n }\n.react-flow__controls-button:hover {\n background: #f4f4f4;\n }\n.react-flow__controls-button svg {\n width: 100%;\n max-width: 12px;\n max-height: 12px;\n }\n.react-flow__minimap {\n background-color: #fff;\n}\n",":root{--sigma-background-color:#fff;--sigma-controls-background-color:#fff;--sigma-controls-background-color-hover:rgba(0,0,0,0.2);--sigma-controls-border-color:rgba(0,0,0,0.2);--sigma-controls-color:#000;--sigma-controls-zindex:100;--sigma-controls-margin:5px;--sigma-controls-size:30px;}div.react-sigma{height:100%;width:100%;position:relative;background:var(--sigma-background-color);}div.sigma-container{height:100%;width:100%;}.react-sigma-controls{position:absolute;z-index:var(--sigma-controls-zindex);border:2px solid var(--sigma-controls-border-color);border-radius:4px;color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color);}.react-sigma-controls.bottom-right{bottom:var(--sigma-controls-margin);right:var(--sigma-controls-margin);}.react-sigma-controls.bottom-left{bottom:var(--sigma-controls-margin);left:var(--sigma-controls-margin);}.react-sigma-controls.top-right{top:var(--sigma-controls-margin);right:var(--sigma-controls-margin);}.react-sigma-controls.top-left{top:var(--sigma-controls-margin);left:var(--sigma-controls-margin);}.react-sigma-controls:first-child{border-top-left-radius:2px;border-top-right-radius:2px;}.react-sigma-controls:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px;}.react-sigma-control{width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-color:var(--sigma-controls-background-color);border-bottom:1px solid var(--sigma-controls-border-color);}.react-sigma-control:last-child{border-bottom:none;}.react-sigma-control > *{box-sizing:border-box;}.react-sigma-control > button{display:block;border:none;margin:0;padding:0;width:var(--sigma-controls-size);height:var(--sigma-controls-size);line-height:var(--sigma-controls-size);background-position:center;background-size:50%;background-repeat:no-repeat;background-color:var(--sigma-controls-background-color);clip:rect(0,0,0,0);}.react-sigma-control > button:hover{background-color:var(--sigma-controls-background-color-hover);}.react-sigma-search{background-color:var(--sigma-controls-background-color);}.react-sigma-search label{visibility:hidden;}.react-sigma-search input{color:var(--sigma-controls-color);background-color:var(--sigma-controls-background-color);font-size:1em;width:100%;margin:0;border:none;padding:var(--sigma-controls-margin);box-sizing:border-box;}"],"names":[],"sourceRoot":""}