Compare commits
7 Commits
1f84abbc24
...
760c4cd659
Author | SHA1 | Date | |
---|---|---|---|
![]() |
760c4cd659 | ||
![]() |
861cb382ee | ||
![]() |
ca4ed9b928 | ||
![]() |
e1969b017b | ||
![]() |
ff38802cc1 | ||
![]() |
bfd429e004 | ||
![]() |
df4323d214 |
|
@ -107,6 +107,7 @@ class LibraryItem(Model):
|
||||||
verbose_name = 'Схема'
|
verbose_name = 'Схема'
|
||||||
verbose_name_plural = 'Схемы'
|
verbose_name_plural = 'Схемы'
|
||||||
|
|
||||||
|
# pylint: disable=invalid-str-returned
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f'{self.alias}'
|
return f'{self.alias}'
|
||||||
|
|
||||||
|
|
|
@ -400,7 +400,7 @@ class OperationSchema:
|
||||||
if child_schema.change_cst_type(successor_id, ctype):
|
if child_schema.change_cst_type(successor_id, ctype):
|
||||||
self._cascade_change_cst_type(child_id, successor_id, ctype)
|
self._cascade_change_cst_type(child_id, successor_id, ctype)
|
||||||
|
|
||||||
# pylint: disable=too-many-arguments
|
# pylint: disable=too-many-arguments, too-many-positional-arguments
|
||||||
def _cascade_update_cst(
|
def _cascade_update_cst(
|
||||||
self,
|
self,
|
||||||
operation: int,
|
operation: int,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from .basics import (
|
from .basics import (
|
||||||
ASTNodeSerializer,
|
ASTNodeSerializer,
|
||||||
|
ConstituentaCheckSerializer,
|
||||||
ExpressionParseSerializer,
|
ExpressionParseSerializer,
|
||||||
ExpressionSerializer,
|
ExpressionSerializer,
|
||||||
InheritanceDataSerializer,
|
InheritanceDataSerializer,
|
||||||
|
|
|
@ -10,6 +10,13 @@ class ExpressionSerializer(serializers.Serializer):
|
||||||
expression = serializers.CharField()
|
expression = serializers.CharField()
|
||||||
|
|
||||||
|
|
||||||
|
class ConstituentaCheckSerializer(serializers.Serializer):
|
||||||
|
''' Serializer: RSLang expression. '''
|
||||||
|
alias = serializers.CharField()
|
||||||
|
definition_formal = serializers.CharField(allow_blank=True)
|
||||||
|
cst_type = serializers.CharField()
|
||||||
|
|
||||||
|
|
||||||
class WordFormSerializer(serializers.Serializer):
|
class WordFormSerializer(serializers.Serializer):
|
||||||
''' Serializer: inflect request. '''
|
''' Serializer: inflect request. '''
|
||||||
text = serializers.CharField()
|
text = serializers.CharField()
|
||||||
|
@ -85,6 +92,7 @@ class ASTNodeSerializer(serializers.Serializer):
|
||||||
class ExpressionParseSerializer(serializers.Serializer):
|
class ExpressionParseSerializer(serializers.Serializer):
|
||||||
''' Serializer: RSlang expression parse result. '''
|
''' Serializer: RSlang expression parse result. '''
|
||||||
parseResult = serializers.BooleanField()
|
parseResult = serializers.BooleanField()
|
||||||
|
prefixLen = serializers.IntegerField()
|
||||||
syntax = serializers.CharField()
|
syntax = serializers.CharField()
|
||||||
typification = serializers.CharField()
|
typification = serializers.CharField()
|
||||||
valueClass = serializers.CharField()
|
valueClass = serializers.CharField()
|
||||||
|
|
|
@ -113,8 +113,8 @@ class TestRSFormViewset(EndpointTester):
|
||||||
self.executeForbidden(item=self.private_id)
|
self.executeForbidden(item=self.private_id)
|
||||||
|
|
||||||
|
|
||||||
@decl_endpoint('/api/rsforms/{item}/check', method='post')
|
@decl_endpoint('/api/rsforms/{item}/check-expression', method='post')
|
||||||
def test_check(self):
|
def test_check_expression(self):
|
||||||
self.owned.insert_new('X1')
|
self.owned.insert_new('X1')
|
||||||
data = {'expression': 'X1=X1'}
|
data = {'expression': 'X1=X1'}
|
||||||
response = self.executeOK(data=data, item=self.owned_id)
|
response = self.executeOK(data=data, item=self.owned_id)
|
||||||
|
@ -127,6 +127,24 @@ class TestRSFormViewset(EndpointTester):
|
||||||
self.executeOK(data=data, item=self.unowned_id)
|
self.executeOK(data=data, item=self.unowned_id)
|
||||||
|
|
||||||
|
|
||||||
|
@decl_endpoint('/api/rsforms/{item}/check-constituenta', method='post')
|
||||||
|
def test_check_constituenta(self):
|
||||||
|
self.owned.insert_new('X1')
|
||||||
|
data = {'definition_formal': 'X1=X1', 'alias': 'A111', 'cst_type': CstType.AXIOM}
|
||||||
|
response = self.executeOK(data=data, item=self.owned_id)
|
||||||
|
self.assertEqual(response.data['parseResult'], True)
|
||||||
|
self.assertEqual(response.data['syntax'], 'math')
|
||||||
|
self.assertEqual(response.data['astText'], '[:==[A111][=[X1][X1]]]')
|
||||||
|
self.assertEqual(response.data['typification'], 'LOGIC')
|
||||||
|
self.assertEqual(response.data['valueClass'], 'value')
|
||||||
|
|
||||||
|
@decl_endpoint('/api/rsforms/{item}/check-constituenta', method='post')
|
||||||
|
def test_check_constituenta_error(self):
|
||||||
|
self.owned.insert_new('X1')
|
||||||
|
data = {'definition_formal': 'X1=X1', 'alias': 'D111', 'cst_type': CstType.TERM}
|
||||||
|
response = self.executeOK(data=data, item=self.owned_id)
|
||||||
|
self.assertEqual(response.data['parseResult'], False)
|
||||||
|
|
||||||
@decl_endpoint('/api/rsforms/{item}/resolve', method='post')
|
@decl_endpoint('/api/rsforms/{item}/resolve', method='post')
|
||||||
def test_resolve(self):
|
def test_resolve(self):
|
||||||
x1 = self.owned.insert_new(
|
x1 = self.owned.insert_new(
|
||||||
|
|
|
@ -56,7 +56,8 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
||||||
'details',
|
'details',
|
||||||
'export_trs',
|
'export_trs',
|
||||||
'resolve',
|
'resolve',
|
||||||
'check'
|
'check_expression',
|
||||||
|
'check_constituenta'
|
||||||
]:
|
]:
|
||||||
permission_list = [permissions.ItemAnyone]
|
permission_list = [permissions.ItemAnyone]
|
||||||
else:
|
else:
|
||||||
|
@ -424,8 +425,8 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
||||||
c.HTTP_404_NOT_FOUND: None
|
c.HTTP_404_NOT_FOUND: None
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@action(detail=True, methods=['post'], url_path='check')
|
@action(detail=True, methods=['post'], url_path='check-expression')
|
||||||
def check(self, request: Request, pk) -> HttpResponse:
|
def check_expression(self, request: Request, pk) -> HttpResponse:
|
||||||
''' Endpoint: Check RSLang expression against schema context. '''
|
''' Endpoint: Check RSLang expression against schema context. '''
|
||||||
serializer = s.ExpressionSerializer(data=request.data)
|
serializer = s.ExpressionSerializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
|
@ -437,6 +438,31 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
||||||
data=json.loads(result)
|
data=json.loads(result)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
summary='check expression for specific CstType',
|
||||||
|
tags=['RSForm', 'FormalLanguage'],
|
||||||
|
request=s.ConstituentaCheckSerializer,
|
||||||
|
responses={
|
||||||
|
c.HTTP_200_OK: s.ExpressionParseSerializer,
|
||||||
|
c.HTTP_404_NOT_FOUND: None
|
||||||
|
},
|
||||||
|
)
|
||||||
|
@action(detail=True, methods=['post'], url_path='check-constituenta')
|
||||||
|
def check_constituenta(self, request: Request, pk) -> HttpResponse:
|
||||||
|
''' Endpoint: Check RSLang expression against schema context. '''
|
||||||
|
serializer = s.ConstituentaCheckSerializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
expression = serializer.validated_data['definition_formal']
|
||||||
|
alias = serializer.validated_data['alias']
|
||||||
|
cst_type = cast(m.CstType, serializer.validated_data['cst_type'])
|
||||||
|
|
||||||
|
pySchema = s.PyConceptAdapter(m.RSForm(self.get_object()))
|
||||||
|
result = pyconcept.check_constituenta(json.dumps(pySchema.data), alias, expression, cst_type)
|
||||||
|
return Response(
|
||||||
|
status=c.HTTP_200_OK,
|
||||||
|
data=json.loads(result)
|
||||||
|
)
|
||||||
|
|
||||||
@extend_schema(
|
@extend_schema(
|
||||||
summary='resolve text with references',
|
summary='resolve text with references',
|
||||||
tags=['RSForm', 'NaturalLanguage'],
|
tags=['RSForm', 'NaturalLanguage'],
|
||||||
|
|
|
@ -8,13 +8,12 @@ drf-spectacular-sidecar==2024.7.1
|
||||||
coreapi==2.3.3
|
coreapi==2.3.3
|
||||||
django-rest-passwordreset==1.4.1
|
django-rest-passwordreset==1.4.1
|
||||||
cctext==0.1.4
|
cctext==0.1.4
|
||||||
pyconcept==0.1.6
|
pyconcept==0.1.8
|
||||||
|
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.9
|
||||||
gunicorn==23.0.0
|
gunicorn==23.0.0
|
||||||
|
|
||||||
djangorestframework-stubs==3.15.1
|
djangorestframework-stubs==3.15.1
|
||||||
django-extensions==3.2.3
|
django-extensions==3.2.3
|
||||||
mypy==1.11.2
|
mypy==1.11.2
|
||||||
pylint==3.2.7
|
pylint==3.3.0
|
||||||
coverage==7.6.1
|
coverage==7.6.1
|
|
@ -8,7 +8,7 @@ drf-spectacular-sidecar==2024.7.1
|
||||||
coreapi==2.3.3
|
coreapi==2.3.3
|
||||||
django-rest-passwordreset==1.4.1
|
django-rest-passwordreset==1.4.1
|
||||||
cctext==0.1.4
|
cctext==0.1.4
|
||||||
pyconcept==0.1.6
|
pyconcept==0.1.8
|
||||||
|
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.9
|
||||||
gunicorn==23.0.0
|
gunicorn==23.0.0
|
|
@ -15,7 +15,7 @@
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
<link
|
<link
|
||||||
href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Fira+Code:wght@300..700&family=Noto+Sans+Math&family=Noto+Sans+Symbols+2&family=Alegreya+Sans+SC:wght@100;300;400;500;700;800;900"
|
href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Fira+Code:wght@300..700&family=Noto+Sans+Math&family=Noto+Sans+Symbols+2&family=Alegreya+Sans+SC:wght@100;300;400;500;700;800;900&family=Noto+Color+Emoji"
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
280
rsconcept/frontend/package-lock.json
generated
280
rsconcept/frontend/package-lock.json
generated
|
@ -10,21 +10,21 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lezer/lr": "^1.4.2",
|
"@lezer/lr": "^1.4.2",
|
||||||
"@tanstack/react-table": "^8.20.5",
|
"@tanstack/react-table": "^8.20.5",
|
||||||
"@uiw/codemirror-themes": "^4.23.2",
|
"@uiw/codemirror-themes": "^4.23.3",
|
||||||
"@uiw/react-codemirror": "^4.23.2",
|
"@uiw/react-codemirror": "^4.23.3",
|
||||||
"axios": "^1.7.7",
|
"axios": "^1.7.7",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"framer-motion": "^11.5.4",
|
"framer-motion": "^11.5.6",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"js-file-download": "^0.4.12",
|
"js-file-download": "^0.4.12",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-error-boundary": "^4.0.13",
|
"react-error-boundary": "^4.0.13",
|
||||||
"react-icons": "^5.3.0",
|
"react-icons": "^5.3.0",
|
||||||
"react-intl": "^6.6.8",
|
"react-intl": "^6.7.0",
|
||||||
"react-loader-spinner": "^6.1.6",
|
"react-loader-spinner": "^6.1.6",
|
||||||
"react-router-dom": "^6.26.2",
|
"react-router-dom": "^6.26.2",
|
||||||
"react-select": "^5.8.0",
|
"react-select": "^5.8.1",
|
||||||
"react-tabs": "^6.0.2",
|
"react-tabs": "^6.0.2",
|
||||||
"react-toastify": "^10.0.5",
|
"react-toastify": "^10.0.5",
|
||||||
"react-tooltip": "^5.28.0",
|
"react-tooltip": "^5.28.0",
|
||||||
|
@ -37,13 +37,13 @@
|
||||||
"@lezer/generator": "^1.7.1",
|
"@lezer/generator": "^1.7.1",
|
||||||
"@types/jest": "^29.5.13",
|
"@types/jest": "^29.5.13",
|
||||||
"@types/node": "^22.5.5",
|
"@types/node": "^22.5.5",
|
||||||
"@types/react": "^18.3.7",
|
"@types/react": "^18.3.8",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^18.3.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
||||||
"@typescript-eslint/parser": "^8.0.1",
|
"@typescript-eslint/parser": "^8.0.1",
|
||||||
"@vitejs/plugin-react": "^4.3.1",
|
"@vitejs/plugin-react": "^4.3.1",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"eslint": "^9.10.0",
|
"eslint": "^9.11.0",
|
||||||
"eslint-plugin-react": "^7.36.1",
|
"eslint-plugin-react": "^7.36.1",
|
||||||
"eslint-plugin-simple-import-sort": "^12.1.1",
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
||||||
"globals": "^15.9.0",
|
"globals": "^15.9.0",
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.2.5",
|
||||||
"typescript": "^5.6.2",
|
"typescript": "^5.6.2",
|
||||||
"typescript-eslint": "^8.6.0",
|
"typescript-eslint": "^8.6.0",
|
||||||
"vite": "^5.4.6"
|
"vite": "^5.4.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@alloc/quick-lru": {
|
"node_modules/@alloc/quick-lru": {
|
||||||
|
@ -693,9 +693,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@codemirror/language": {
|
"node_modules/@codemirror/language": {
|
||||||
"version": "6.10.2",
|
"version": "6.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.3.tgz",
|
||||||
"integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==",
|
"integrity": "sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/state": "^6.0.0",
|
"@codemirror/state": "^6.0.0",
|
||||||
|
@ -868,15 +868,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emotion/serialize": {
|
"node_modules/@emotion/serialize": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz",
|
||||||
"integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==",
|
"integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/hash": "^0.9.2",
|
"@emotion/hash": "^0.9.2",
|
||||||
"@emotion/memoize": "^0.9.0",
|
"@emotion/memoize": "^0.9.0",
|
||||||
"@emotion/unitless": "^0.10.0",
|
"@emotion/unitless": "^0.10.0",
|
||||||
"@emotion/utils": "^1.4.0",
|
"@emotion/utils": "^1.4.1",
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -902,9 +902,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emotion/utils": {
|
"node_modules/@emotion/utils": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz",
|
||||||
"integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==",
|
"integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@emotion/weak-memoize": {
|
"node_modules/@emotion/weak-memoize": {
|
||||||
|
@ -1431,9 +1431,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "9.10.0",
|
"version": "9.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz",
|
||||||
"integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
|
"integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -1451,9 +1451,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/plugin-kit": {
|
"node_modules/@eslint/plugin-kit": {
|
||||||
"version": "0.1.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz",
|
||||||
"integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==",
|
"integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1529,9 +1529,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@formatjs/intl": {
|
"node_modules/@formatjs/intl": {
|
||||||
"version": "2.10.4",
|
"version": "2.10.5",
|
||||||
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz",
|
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.5.tgz",
|
||||||
"integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==",
|
"integrity": "sha512-f9qPNNgLrh2KvoFvHGIfcPTmNGbyy7lyyV4/P6JioDqtTE7Akdmgt+ZzVndr+yMLZnssUShyTMXxM/6aV9eVuQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formatjs/ecma402-abstract": "2.0.0",
|
"@formatjs/ecma402-abstract": "2.0.0",
|
||||||
|
@ -2897,9 +2897,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
|
||||||
"integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==",
|
"integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
@ -2911,9 +2911,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm64": {
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
|
||||||
"integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==",
|
"integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -2925,9 +2925,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
|
||||||
"integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==",
|
"integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -2939,9 +2939,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-x64": {
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
|
||||||
"integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==",
|
"integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -2953,9 +2953,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
|
||||||
"integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==",
|
"integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
@ -2967,9 +2967,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
|
||||||
"integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==",
|
"integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
@ -2981,9 +2981,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
|
||||||
"integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==",
|
"integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -2995,9 +2995,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
|
||||||
"integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==",
|
"integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -3009,9 +3009,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
|
||||||
"integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==",
|
"integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
|
@ -3023,9 +3023,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
|
||||||
"integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==",
|
"integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
|
@ -3037,9 +3037,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
|
||||||
"integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==",
|
"integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
|
@ -3051,9 +3051,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
|
||||||
"integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==",
|
"integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -3065,9 +3065,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
|
||||||
"integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==",
|
"integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -3079,9 +3079,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
|
||||||
"integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==",
|
"integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -3093,9 +3093,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
|
||||||
"integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==",
|
"integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
|
@ -3107,9 +3107,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
|
||||||
"integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==",
|
"integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -3590,9 +3590,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/react": {
|
"node_modules/@types/react": {
|
||||||
"version": "18.3.7",
|
"version": "18.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
|
||||||
"integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==",
|
"integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
|
@ -3875,9 +3875,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@uiw/codemirror-extensions-basic-setup": {
|
"node_modules/@uiw/codemirror-extensions-basic-setup": {
|
||||||
"version": "4.23.2",
|
"version": "4.23.3",
|
||||||
"resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.2.tgz",
|
"resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.3.tgz",
|
||||||
"integrity": "sha512-eacivkj7wzskl2HBYs4rfN0CbYlsSQh5ADtOYWTpc8Txm4ONw8RTi4/rxF6Ks2vdaovizewU5QaHximbxoNTrw==",
|
"integrity": "sha512-nEMjgbCyeLx+UQgOGAAoUWYFE34z5TlyaKNszuig/BddYFDb0WKcgmC37bDFxR2dZssf3K/lwGWLpXnGKXePbA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.0.0",
|
"@codemirror/autocomplete": "^6.0.0",
|
||||||
|
@ -3902,9 +3902,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@uiw/codemirror-themes": {
|
"node_modules/@uiw/codemirror-themes": {
|
||||||
"version": "4.23.2",
|
"version": "4.23.3",
|
||||||
"resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.23.2.tgz",
|
"resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.23.3.tgz",
|
||||||
"integrity": "sha512-g8x+oPqgbzxXSkHhRf7e1AM1mI9/Nl3URReS89pHitRKv8MZNrE+ey+HE8ycfNXRUatrb6zTSRV3M75uoZwNYw==",
|
"integrity": "sha512-oUq2qoj+hMrR34Xhbp7S1P2elPtySWyzij97IwsZAdGZD/yS+c9+2yRSMYqtaWh7D9M4sJmwgU1lZibmwLZOfQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/language": "^6.0.0",
|
"@codemirror/language": "^6.0.0",
|
||||||
|
@ -3921,16 +3921,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@uiw/react-codemirror": {
|
"node_modules/@uiw/react-codemirror": {
|
||||||
"version": "4.23.2",
|
"version": "4.23.3",
|
||||||
"resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.23.2.tgz",
|
"resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.23.3.tgz",
|
||||||
"integrity": "sha512-MmFL6P5V1Mr81JLkJyWNedfxENKdRhsvyU7Izji9wp337m8dqRAz7rCF5XWarGKx+iQ7q2H5ryl07nLqKLSvtQ==",
|
"integrity": "sha512-TBBLUbeqXmfQSfO+f3rPNOAb+QXbSm7KPB64FHQWLGg2WJNbpOhjLOWMyL+C4ZP3aSCNc2Y5aftEK1vp3wCKTA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.18.6",
|
"@babel/runtime": "^7.18.6",
|
||||||
"@codemirror/commands": "^6.1.0",
|
"@codemirror/commands": "^6.1.0",
|
||||||
"@codemirror/state": "^6.1.1",
|
"@codemirror/state": "^6.1.1",
|
||||||
"@codemirror/theme-one-dark": "^6.0.0",
|
"@codemirror/theme-one-dark": "^6.0.0",
|
||||||
"@uiw/codemirror-extensions-basic-setup": "4.23.2",
|
"@uiw/codemirror-extensions-basic-setup": "4.23.3",
|
||||||
"codemirror": "^6.0.0"
|
"codemirror": "^6.0.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
|
@ -3985,9 +3985,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@webgpu/types": {
|
"node_modules/@webgpu/types": {
|
||||||
"version": "0.1.45",
|
"version": "0.1.46",
|
||||||
"resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.45.tgz",
|
"resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.46.tgz",
|
||||||
"integrity": "sha512-0TBBF/mhakJoK0qUWCZugBnh23x+VwmYA5RLmtNQwvZt1pQ4P2fzIvQUiSe6jxzkBi4GF8R4BejJjro0ZSoSXQ==",
|
"integrity": "sha512-2iogO6Zh0pTbKLGZuuGWEmJpF/fTABGs7G9wXxpn7s24XSJchSUIiMqIJHURi5zsMZRRTuXrV/3GLOkmOFjq5w==",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
|
@ -4742,9 +4742,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001660",
|
"version": "1.0.30001663",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
|
||||||
"integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==",
|
"integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -5534,9 +5534,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/detect-gpu": {
|
"node_modules/detect-gpu": {
|
||||||
"version": "5.0.48",
|
"version": "5.0.49",
|
||||||
"resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.48.tgz",
|
"resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.49.tgz",
|
||||||
"integrity": "sha512-AdG8ur7loIIIzG8XBjNiLk6Seq4jGp7GAL2TEsjq7etgK8ia6ha3rTbBCRCHsnwYiLqYn4uWJfS7hVwZz7DKNQ==",
|
"integrity": "sha512-XXPqzsKJErNcafLnoye+hnSa5GzwMwpoOMz4nCnmhV0wQMy3wJVi2j5/FSMYxxH+elR12N/x7QjGxegd4AmdpQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"webgl-constants": "^1.1.1"
|
"webgl-constants": "^1.1.1"
|
||||||
|
@ -5629,9 +5629,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.25",
|
"version": "1.5.27",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz",
|
||||||
"integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==",
|
"integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
@ -5895,9 +5895,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "9.10.0",
|
"version": "9.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz",
|
||||||
"integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==",
|
"integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -5905,8 +5905,8 @@
|
||||||
"@eslint-community/regexpp": "^4.11.0",
|
"@eslint-community/regexpp": "^4.11.0",
|
||||||
"@eslint/config-array": "^0.18.0",
|
"@eslint/config-array": "^0.18.0",
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
"@eslint/eslintrc": "^3.1.0",
|
||||||
"@eslint/js": "9.10.0",
|
"@eslint/js": "9.11.0",
|
||||||
"@eslint/plugin-kit": "^0.1.0",
|
"@eslint/plugin-kit": "^0.2.0",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
"@humanwhocodes/retry": "^0.3.0",
|
"@humanwhocodes/retry": "^0.3.0",
|
||||||
"@nodelib/fs.walk": "^1.2.8",
|
"@nodelib/fs.walk": "^1.2.8",
|
||||||
|
@ -6596,9 +6596,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/framer-motion": {
|
"node_modules/framer-motion": {
|
||||||
"version": "11.5.4",
|
"version": "11.5.6",
|
||||||
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.5.6.tgz",
|
||||||
"integrity": "sha512-E+tb3/G6SO69POkdJT+3EpdMuhmtCh9EWuK4I1DnIC23L7tFPrl8vxP+LSovwaw6uUr73rUbpb4FgK011wbRJQ==",
|
"integrity": "sha512-JMwUpAxv/DWgul9vPgX0ElKn0G66sUc6O9tOXsYwn3zxwvhxFljSXC0XT2QCzuTYBshwC8nyDAa1SYcV0Ldbhw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.4.0"
|
"tslib": "^2.4.0"
|
||||||
|
@ -10953,14 +10953,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-intl": {
|
"node_modules/react-intl": {
|
||||||
"version": "6.6.8",
|
"version": "6.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz",
|
"resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.7.0.tgz",
|
||||||
"integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==",
|
"integrity": "sha512-f5QhjuKb+WEqiAbL5hDqUs2+sSRkF0vxkTbJ4A8ompt55XTyOHcrDlCXGq4o73ywFFrpgz+78C9IXegSLlya2A==",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formatjs/ecma402-abstract": "2.0.0",
|
"@formatjs/ecma402-abstract": "2.0.0",
|
||||||
"@formatjs/icu-messageformat-parser": "2.7.8",
|
"@formatjs/icu-messageformat-parser": "2.7.8",
|
||||||
"@formatjs/intl": "2.10.4",
|
"@formatjs/intl": "2.10.5",
|
||||||
"@formatjs/intl-displaynames": "6.6.8",
|
"@formatjs/intl-displaynames": "6.6.8",
|
||||||
"@formatjs/intl-listformat": "7.5.7",
|
"@formatjs/intl-listformat": "7.5.7",
|
||||||
"@types/hoist-non-react-statics": "^3.3.1",
|
"@types/hoist-non-react-statics": "^3.3.1",
|
||||||
|
@ -11080,9 +11080,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-select": {
|
"node_modules/react-select": {
|
||||||
"version": "5.8.0",
|
"version": "5.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.1.tgz",
|
||||||
"integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==",
|
"integrity": "sha512-RT1CJmuc+ejqm5MPgzyZujqDskdvB9a9ZqrdnVLsvAHjJ3Tj0hELnLeVPQlmYdVKCdCpxanepl6z7R5KhXhWzg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.12.0",
|
"@babel/runtime": "^7.12.0",
|
||||||
|
@ -11442,9 +11442,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "4.21.3",
|
"version": "4.22.4",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
|
||||||
"integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==",
|
"integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -11458,22 +11458,22 @@
|
||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rollup/rollup-android-arm-eabi": "4.21.3",
|
"@rollup/rollup-android-arm-eabi": "4.22.4",
|
||||||
"@rollup/rollup-android-arm64": "4.21.3",
|
"@rollup/rollup-android-arm64": "4.22.4",
|
||||||
"@rollup/rollup-darwin-arm64": "4.21.3",
|
"@rollup/rollup-darwin-arm64": "4.22.4",
|
||||||
"@rollup/rollup-darwin-x64": "4.21.3",
|
"@rollup/rollup-darwin-x64": "4.22.4",
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.21.3",
|
"@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "4.21.3",
|
"@rollup/rollup-linux-arm-musleabihf": "4.22.4",
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.21.3",
|
"@rollup/rollup-linux-arm64-gnu": "4.22.4",
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.21.3",
|
"@rollup/rollup-linux-arm64-musl": "4.22.4",
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.21.3",
|
"@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.21.3",
|
"@rollup/rollup-linux-riscv64-gnu": "4.22.4",
|
||||||
"@rollup/rollup-linux-s390x-gnu": "4.21.3",
|
"@rollup/rollup-linux-s390x-gnu": "4.22.4",
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.21.3",
|
"@rollup/rollup-linux-x64-gnu": "4.22.4",
|
||||||
"@rollup/rollup-linux-x64-musl": "4.21.3",
|
"@rollup/rollup-linux-x64-musl": "4.22.4",
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.21.3",
|
"@rollup/rollup-win32-arm64-msvc": "4.22.4",
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.21.3",
|
"@rollup/rollup-win32-ia32-msvc": "4.22.4",
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.21.3",
|
"@rollup/rollup-win32-x64-msvc": "4.22.4",
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -12242,9 +12242,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/three-mesh-bvh": {
|
"node_modules/three-mesh-bvh": {
|
||||||
"version": "0.7.8",
|
"version": "0.7.6",
|
||||||
"resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.8.tgz",
|
"resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.6.tgz",
|
||||||
"integrity": "sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==",
|
"integrity": "sha512-rCjsnxEqR9r1/C/lCqzGLS67NDty/S/eT6rAJfDvsanrIctTWdNoR4ZOGWewCB13h1QkVo2BpmC0wakj1+0m8A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"three": ">= 0.151.0"
|
"three": ">= 0.151.0"
|
||||||
|
@ -12711,9 +12711,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "5.4.6",
|
"version": "5.4.7",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.7.tgz",
|
||||||
"integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==",
|
"integrity": "sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -14,21 +14,21 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lezer/lr": "^1.4.2",
|
"@lezer/lr": "^1.4.2",
|
||||||
"@tanstack/react-table": "^8.20.5",
|
"@tanstack/react-table": "^8.20.5",
|
||||||
"@uiw/codemirror-themes": "^4.23.2",
|
"@uiw/codemirror-themes": "^4.23.3",
|
||||||
"@uiw/react-codemirror": "^4.23.2",
|
"@uiw/react-codemirror": "^4.23.3",
|
||||||
"axios": "^1.7.7",
|
"axios": "^1.7.7",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"framer-motion": "^11.5.4",
|
"framer-motion": "^11.5.6",
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"js-file-download": "^0.4.12",
|
"js-file-download": "^0.4.12",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-error-boundary": "^4.0.13",
|
"react-error-boundary": "^4.0.13",
|
||||||
"react-icons": "^5.3.0",
|
"react-icons": "^5.3.0",
|
||||||
"react-intl": "^6.6.8",
|
"react-intl": "^6.7.0",
|
||||||
"react-loader-spinner": "^6.1.6",
|
"react-loader-spinner": "^6.1.6",
|
||||||
"react-router-dom": "^6.26.2",
|
"react-router-dom": "^6.26.2",
|
||||||
"react-select": "^5.8.0",
|
"react-select": "^5.8.1",
|
||||||
"react-tabs": "^6.0.2",
|
"react-tabs": "^6.0.2",
|
||||||
"react-toastify": "^10.0.5",
|
"react-toastify": "^10.0.5",
|
||||||
"react-tooltip": "^5.28.0",
|
"react-tooltip": "^5.28.0",
|
||||||
|
@ -41,13 +41,13 @@
|
||||||
"@lezer/generator": "^1.7.1",
|
"@lezer/generator": "^1.7.1",
|
||||||
"@types/jest": "^29.5.13",
|
"@types/jest": "^29.5.13",
|
||||||
"@types/node": "^22.5.5",
|
"@types/node": "^22.5.5",
|
||||||
"@types/react": "^18.3.7",
|
"@types/react": "^18.3.8",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^18.3.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
||||||
"@typescript-eslint/parser": "^8.0.1",
|
"@typescript-eslint/parser": "^8.0.1",
|
||||||
"@vitejs/plugin-react": "^4.3.1",
|
"@vitejs/plugin-react": "^4.3.1",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"eslint": "^9.10.0",
|
"eslint": "^9.11.0",
|
||||||
"eslint-plugin-react": "^7.36.1",
|
"eslint-plugin-react": "^7.36.1",
|
||||||
"eslint-plugin-simple-import-sort": "^12.1.1",
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
||||||
"globals": "^15.9.0",
|
"globals": "^15.9.0",
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.2.5",
|
||||||
"typescript": "^5.6.2",
|
"typescript": "^5.6.2",
|
||||||
"typescript-eslint": "^8.6.0",
|
"typescript-eslint": "^8.6.0",
|
||||||
"vite": "^5.4.6"
|
"vite": "^5.4.7"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"preset": "ts-jest",
|
"preset": "ts-jest",
|
||||||
|
|
|
@ -11,7 +11,7 @@ function ApplicationLayout() {
|
||||||
const { viewportHeight, mainHeight, showScroll } = useConceptOptions();
|
const { viewportHeight, mainHeight, showScroll } = useConceptOptions();
|
||||||
return (
|
return (
|
||||||
<NavigationState>
|
<NavigationState>
|
||||||
<div className='min-w-[20rem] clr-app antialiased h-full'>
|
<div className='min-w-[20rem] clr-app antialiased h-full max-w-[120rem] mx-auto'>
|
||||||
<ConceptToaster
|
<ConceptToaster
|
||||||
className='mt-[4rem] text-[14px]' // prettier: split lines
|
className='mt-[4rem] text-[14px]' // prettier: split lines
|
||||||
autoClose={3000}
|
autoClose={3000}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
import { ILibraryCreateData, ILibraryItem } from '@/models/library';
|
import { ILibraryCreateData, ILibraryItem } from '@/models/library';
|
||||||
import { ICstSubstituteData } from '@/models/oss';
|
import { ICstSubstituteData } from '@/models/oss';
|
||||||
import {
|
import {
|
||||||
|
ICheckConstituentaData,
|
||||||
IConstituentaList,
|
IConstituentaList,
|
||||||
IConstituentaMeta,
|
IConstituentaMeta,
|
||||||
ICstCreateData,
|
ICstCreateData,
|
||||||
|
@ -18,7 +19,7 @@ import {
|
||||||
IRSFormUploadData,
|
IRSFormUploadData,
|
||||||
ITargetCst
|
ITargetCst
|
||||||
} from '@/models/rsform';
|
} from '@/models/rsform';
|
||||||
import { IExpressionParse, IRSExpression } from '@/models/rslang';
|
import { IExpressionParse } from '@/models/rslang';
|
||||||
|
|
||||||
import { AxiosGet, AxiosPatch, AxiosPost, FrontExchange, FrontPull } from './apiTransport';
|
import { AxiosGet, AxiosPatch, AxiosPost, FrontExchange, FrontPull } from './apiTransport';
|
||||||
|
|
||||||
|
@ -113,9 +114,12 @@ export function patchMoveConstituenta(schema: string, request: FrontExchange<ICs
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function postCheckExpression(schema: string, request: FrontExchange<IRSExpression, IExpressionParse>) {
|
export function postCheckConstituenta(
|
||||||
|
schema: string,
|
||||||
|
request: FrontExchange<ICheckConstituentaData, IExpressionParse>
|
||||||
|
) {
|
||||||
AxiosPost({
|
AxiosPost({
|
||||||
endpoint: `/api/rsforms/${schema}/check`,
|
endpoint: `/api/rsforms/${schema}/check-constituenta`,
|
||||||
request: request
|
request: request
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,8 +96,6 @@ export function DependencyIcon({ value, size = '1.25rem', className }: DomIconPr
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case DependencyMode.ALL:
|
case DependencyMode.ALL:
|
||||||
return <IconSettings size={size} className={className} />;
|
return <IconSettings size={size} className={className} />;
|
||||||
case DependencyMode.EXPRESSION:
|
|
||||||
return <IconText size={size} className={className ?? 'clr-text-primary'} />;
|
|
||||||
case DependencyMode.OUTPUTS:
|
case DependencyMode.OUTPUTS:
|
||||||
return <IconGraphOutputs size={size} className={className ?? 'clr-text-primary'} />;
|
return <IconGraphOutputs size={size} className={className ?? 'clr-text-primary'} />;
|
||||||
case DependencyMode.INPUTS:
|
case DependencyMode.INPUTS:
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
|
|
||||||
import { IConstituenta } from '@/models/rsform';
|
import { CstClass, IConstituenta } from '@/models/rsform';
|
||||||
import { isMockCst } from '@/models/rsformAPI';
|
|
||||||
import { colorFgCstStatus, IColorTheme } from '@/styling/color';
|
import { colorFgCstStatus, IColorTheme } from '@/styling/color';
|
||||||
|
|
||||||
import { CProps } from '../props';
|
import { CProps } from '../props';
|
||||||
|
@ -28,7 +27,7 @@ function BadgeConstituenta({ value, prefixID, className, style, theme }: BadgeCo
|
||||||
style={{
|
style={{
|
||||||
borderColor: colorFgCstStatus(value.status, theme),
|
borderColor: colorFgCstStatus(value.status, theme),
|
||||||
color: colorFgCstStatus(value.status, theme),
|
color: colorFgCstStatus(value.status, theme),
|
||||||
backgroundColor: isMockCst(value) ? theme.bgWarning : theme.bgInput,
|
backgroundColor: value.cst_class === CstClass.BASIC ? theme.bgGreen25 : theme.bgInput,
|
||||||
...style
|
...style
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
|
@ -95,9 +95,7 @@ function FormCreateCst({ schema, state, partialUpdate, setValidated }: FormCreat
|
||||||
: 'Формальное определение'
|
: 'Формальное определение'
|
||||||
}
|
}
|
||||||
placeholder={
|
placeholder={
|
||||||
state.cst_type !== CstType.STRUCTURED
|
state.cst_type !== CstType.STRUCTURED ? 'Родоструктурное выражение' : 'Типизация родовой структуры'
|
||||||
? 'Родоструктурное выражение'
|
|
||||||
: 'Определение множества, которому принадлежат элементы родовой структуры'
|
|
||||||
}
|
}
|
||||||
value={state.definition_formal}
|
value={state.definition_formal}
|
||||||
onChange={value => partialUpdate({ definition_formal: value })}
|
onChange={value => partialUpdate({ definition_formal: value })}
|
||||||
|
|
40
rsconcept/frontend/src/hooks/useCheckConstituenta.ts
Normal file
40
rsconcept/frontend/src/hooks/useCheckConstituenta.ts
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
|
import { DataCallback } from '@/backend/apiTransport';
|
||||||
|
import { postCheckConstituenta } from '@/backend/rsforms';
|
||||||
|
import { type ErrorData } from '@/components/info/InfoError';
|
||||||
|
import { ICheckConstituentaData, IConstituenta, type IRSForm } from '@/models/rsform';
|
||||||
|
import { IExpressionParse } from '@/models/rslang';
|
||||||
|
|
||||||
|
function useCheckConstituenta({ schema }: { schema?: IRSForm }) {
|
||||||
|
const [processing, setProcessing] = useState(false);
|
||||||
|
const [error, setError] = useState<ErrorData>(undefined);
|
||||||
|
const [parseData, setParseData] = useState<IExpressionParse | undefined>(undefined);
|
||||||
|
|
||||||
|
const resetParse = useCallback(() => setParseData(undefined), []);
|
||||||
|
|
||||||
|
function checkConstituenta(expression: string, activeCst: IConstituenta, onSuccess?: DataCallback<IExpressionParse>) {
|
||||||
|
const data: ICheckConstituentaData = {
|
||||||
|
definition_formal: expression,
|
||||||
|
alias: activeCst.alias,
|
||||||
|
cst_type: activeCst.cst_type
|
||||||
|
};
|
||||||
|
setError(undefined);
|
||||||
|
postCheckConstituenta(String(schema!.id), {
|
||||||
|
data: data,
|
||||||
|
showError: true,
|
||||||
|
setLoading: setProcessing,
|
||||||
|
onError: setError,
|
||||||
|
onSuccess: parse => {
|
||||||
|
setParseData(parse);
|
||||||
|
if (onSuccess) onSuccess(parse);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return { parseData, checkConstituenta, resetParse, error, setError, processing };
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useCheckConstituenta;
|
|
@ -1,100 +0,0 @@
|
||||||
'use client';
|
|
||||||
|
|
||||||
import { useCallback, useState } from 'react';
|
|
||||||
|
|
||||||
import { DataCallback } from '@/backend/apiTransport';
|
|
||||||
import { postCheckExpression } from '@/backend/rsforms';
|
|
||||||
import { type ErrorData } from '@/components/info/InfoError';
|
|
||||||
import { CstType, IConstituenta, type IRSForm } from '@/models/rsform';
|
|
||||||
import { getDefinitionPrefix } from '@/models/rsformAPI';
|
|
||||||
import { IArgumentInfo, IExpressionParse } from '@/models/rslang';
|
|
||||||
import { RSErrorType } from '@/models/rslang';
|
|
||||||
import { PARAMETER } from '@/utils/constants';
|
|
||||||
|
|
||||||
function useCheckExpression({ schema }: { schema?: IRSForm }) {
|
|
||||||
const [processing, setProcessing] = useState(false);
|
|
||||||
const [error, setError] = useState<ErrorData>(undefined);
|
|
||||||
const [parseData, setParseData] = useState<IExpressionParse | undefined>(undefined);
|
|
||||||
|
|
||||||
const resetParse = useCallback(() => setParseData(undefined), []);
|
|
||||||
|
|
||||||
function checkExpression(expression: string, activeCst?: IConstituenta, onSuccess?: DataCallback<IExpressionParse>) {
|
|
||||||
setError(undefined);
|
|
||||||
postCheckExpression(String(schema!.id), {
|
|
||||||
data: { expression: expression },
|
|
||||||
showError: true,
|
|
||||||
setLoading: setProcessing,
|
|
||||||
onError: setError,
|
|
||||||
onSuccess: parse => {
|
|
||||||
if (activeCst) {
|
|
||||||
adjustResults(parse, expression.trim() === getDefinitionPrefix(activeCst), activeCst.cst_type);
|
|
||||||
}
|
|
||||||
setParseData(parse);
|
|
||||||
if (onSuccess) onSuccess(parse);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return { parseData, checkExpression, resetParse, error, setError, processing };
|
|
||||||
}
|
|
||||||
|
|
||||||
export default useCheckExpression;
|
|
||||||
|
|
||||||
// ===== Internals ========
|
|
||||||
function checkTypeConsistency(type: CstType, typification: string, args: IArgumentInfo[]): boolean {
|
|
||||||
switch (type) {
|
|
||||||
case CstType.BASE:
|
|
||||||
case CstType.CONSTANT:
|
|
||||||
case CstType.STRUCTURED:
|
|
||||||
case CstType.TERM:
|
|
||||||
return typification !== PARAMETER.logicLabel && args.length === 0;
|
|
||||||
|
|
||||||
case CstType.AXIOM:
|
|
||||||
case CstType.THEOREM:
|
|
||||||
return typification === PARAMETER.logicLabel && args.length === 0;
|
|
||||||
|
|
||||||
case CstType.FUNCTION:
|
|
||||||
return typification !== PARAMETER.logicLabel && args.length !== 0;
|
|
||||||
|
|
||||||
case CstType.PREDICATE:
|
|
||||||
return typification === PARAMETER.logicLabel && args.length !== 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function adjustResults(parse: IExpressionParse, emptyExpression: boolean, cstType: CstType) {
|
|
||||||
if (!parse.parseResult && parse.errors.length > 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cstType === CstType.BASE || cstType === CstType.CONSTANT) {
|
|
||||||
if (!emptyExpression) {
|
|
||||||
parse.parseResult = false;
|
|
||||||
parse.errors.push({
|
|
||||||
errorType: RSErrorType.globalNonemptyBase,
|
|
||||||
isCritical: true,
|
|
||||||
params: [],
|
|
||||||
position: 0
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (emptyExpression) {
|
|
||||||
parse.parseResult = false;
|
|
||||||
parse.errors.push({
|
|
||||||
errorType: RSErrorType.globalEmptyDerived,
|
|
||||||
isCritical: true,
|
|
||||||
params: [],
|
|
||||||
position: 0
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!checkTypeConsistency(cstType, parse.typification, parse.args)) {
|
|
||||||
parse.parseResult = false;
|
|
||||||
parse.errors.push({
|
|
||||||
errorType: RSErrorType.globalUnexpectedType,
|
|
||||||
isCritical: true,
|
|
||||||
params: [],
|
|
||||||
position: 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,7 +12,6 @@ import { IOperation } from './oss';
|
||||||
*/
|
*/
|
||||||
export enum DependencyMode {
|
export enum DependencyMode {
|
||||||
ALL = 0,
|
ALL = 0,
|
||||||
EXPRESSION,
|
|
||||||
OUTPUTS,
|
OUTPUTS,
|
||||||
INPUTS,
|
INPUTS,
|
||||||
EXPAND_OUTPUTS,
|
EXPAND_OUTPUTS,
|
||||||
|
|
|
@ -144,6 +144,11 @@ export interface IConstituentaList {
|
||||||
items: ConstituentaID[];
|
items: ConstituentaID[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents {@link IConstituenta} data, used for checking expression.
|
||||||
|
*/
|
||||||
|
export interface ICheckConstituentaData extends Pick<IConstituentaMeta, 'alias' | 'cst_type' | 'definition_formal'> {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents {@link IConstituenta} data, used in creation process.
|
* Represents {@link IConstituenta} data, used in creation process.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,15 +6,7 @@ import { TextMatcher } from '@/utils/utils';
|
||||||
|
|
||||||
import { BASIC_SCHEMAS, ILibraryItem } from './library';
|
import { BASIC_SCHEMAS, ILibraryItem } from './library';
|
||||||
import { CstMatchMode } from './miscellaneous';
|
import { CstMatchMode } from './miscellaneous';
|
||||||
import {
|
import { CATEGORY_CST_TYPE, CstClass, CstType, ExpressionStatus, IConstituenta, IRSForm } from './rsform';
|
||||||
CATEGORY_CST_TYPE,
|
|
||||||
ConstituentaID,
|
|
||||||
CstClass,
|
|
||||||
CstType,
|
|
||||||
ExpressionStatus,
|
|
||||||
IConstituenta,
|
|
||||||
IRSForm
|
|
||||||
} from './rsform';
|
|
||||||
import { ParsingStatus, ValueClass } from './rslang';
|
import { ParsingStatus, ValueClass } from './rslang';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -111,49 +103,6 @@ export function inferClass(type: CstType, isTemplate: boolean = false): CstClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a mock {@link IConstituenta} object with the provided parameters and default values for other properties.
|
|
||||||
*/
|
|
||||||
export function createMockConstituenta(id: ConstituentaID, alias: string, comment: string): IConstituenta {
|
|
||||||
return {
|
|
||||||
id: id,
|
|
||||||
spawner: id,
|
|
||||||
spawn: [],
|
|
||||||
spawn_alias: [],
|
|
||||||
is_simple_expression: false,
|
|
||||||
schema: -1,
|
|
||||||
alias: alias,
|
|
||||||
convention: comment,
|
|
||||||
cst_type: CstType.BASE,
|
|
||||||
term_raw: '',
|
|
||||||
term_resolved: '',
|
|
||||||
term_forms: [],
|
|
||||||
definition_formal: '',
|
|
||||||
definition_raw: '',
|
|
||||||
definition_resolved: '',
|
|
||||||
status: ExpressionStatus.INCORRECT,
|
|
||||||
parent_schema_index: 0,
|
|
||||||
is_template: false,
|
|
||||||
is_inherited: false,
|
|
||||||
has_inherited_children: false,
|
|
||||||
cst_class: CstClass.DERIVED,
|
|
||||||
parse: {
|
|
||||||
status: ParsingStatus.INCORRECT,
|
|
||||||
valueClass: ValueClass.INVALID,
|
|
||||||
typification: 'N/A',
|
|
||||||
syntaxTree: '',
|
|
||||||
args: []
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if given {@link IConstituenta} is mock.
|
|
||||||
*/
|
|
||||||
export function isMockCst(cst: IConstituenta) {
|
|
||||||
return cst.id <= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply filter based on start {@link IConstituenta} type.
|
* Apply filter based on start {@link IConstituenta} type.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -7,13 +7,6 @@
|
||||||
*/
|
*/
|
||||||
export type AliasMapping = Record<string, string>;
|
export type AliasMapping = Record<string, string>;
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents formal expression.
|
|
||||||
*/
|
|
||||||
export interface IRSExpression {
|
|
||||||
expression: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents syntax type.
|
* Represents syntax type.
|
||||||
*/
|
*/
|
||||||
|
@ -91,6 +84,7 @@ export interface IArgumentValue extends IArgumentInfo {
|
||||||
*/
|
*/
|
||||||
export interface IExpressionParse {
|
export interface IExpressionParse {
|
||||||
parseResult: boolean;
|
parseResult: boolean;
|
||||||
|
prefixLen: number;
|
||||||
syntax: Syntax;
|
syntax: Syntax;
|
||||||
typification: string;
|
typification: string;
|
||||||
valueClass: ValueClass;
|
valueClass: ValueClass;
|
||||||
|
@ -248,16 +242,17 @@ export enum RSErrorType {
|
||||||
typesNotCompatible = 34853,
|
typesNotCompatible = 34853,
|
||||||
orderingNotSupported = 34854,
|
orderingNotSupported = 34854,
|
||||||
|
|
||||||
// !!!! Добавлены по сравнению с ConceptCore !!!!!
|
|
||||||
globalNonemptyBase = 34855,
|
|
||||||
globalUnexpectedType = 34856,
|
|
||||||
globalEmptyDerived = 34857,
|
|
||||||
|
|
||||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
globalNoValue = 34880,
|
globalNoValue = 34880,
|
||||||
invalidPropertyUsage = 34881,
|
invalidPropertyUsage = 34881,
|
||||||
globalMissingAST = 34882,
|
globalMissingAST = 34882,
|
||||||
globalFuncNoInterpretation = 34883
|
globalFuncNoInterpretation = 34883,
|
||||||
|
|
||||||
|
cstNonemptyBase = 34912,
|
||||||
|
cstEmptyDerived = 34913,
|
||||||
|
cstCallableNoArgs = 34914,
|
||||||
|
cstNonCallableHasArgs = 34915,
|
||||||
|
cstExpectedLogical = 34916,
|
||||||
|
cstExpectedTyped = 34917
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,7 +26,7 @@ function ManualsPage() {
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='flex gap-2' style={{ minHeight: mainHeight }}>
|
<div className='flex mx-auto max-w-[80rem]' style={{ minHeight: mainHeight }}>
|
||||||
<TopicsList activeTopic={activeTopic} onChangeTopic={topic => onSelectTopic(topic)} />
|
<TopicsList activeTopic={activeTopic} onChangeTopic={topic => onSelectTopic(topic)} />
|
||||||
<ViewTopic topic={activeTopic} />
|
<ViewTopic topic={activeTopic} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
'use client';
|
||||||
|
|
||||||
import AnimateFade from '@/components/wrap/AnimateFade';
|
import AnimateFade from '@/components/wrap/AnimateFade';
|
||||||
|
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
||||||
import { HelpTopic } from '@/models/miscellaneous';
|
import { HelpTopic } from '@/models/miscellaneous';
|
||||||
import TopicPage from '@/pages/ManualsPage/TopicPage';
|
import TopicPage from '@/pages/ManualsPage/TopicPage';
|
||||||
|
|
||||||
|
@ -7,8 +10,9 @@ interface ViewTopicProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
function ViewTopic({ topic }: ViewTopicProps) {
|
function ViewTopic({ topic }: ViewTopicProps) {
|
||||||
|
const { mainHeight } = useConceptOptions();
|
||||||
return (
|
return (
|
||||||
<AnimateFade key={topic} className='px-3 py-2 mx-auto'>
|
<AnimateFade key={topic} className='py-2 px-6 sm:px-12 overflow-y-auto' style={{ maxHeight: mainHeight }}>
|
||||||
<TopicPage topic={topic} />
|
<TopicPage topic={topic} />
|
||||||
</AnimateFade>
|
</AnimateFade>
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,7 +13,7 @@ function HelpRSLang() {
|
||||||
const videoHeight = useMemo(() => {
|
const videoHeight = useMemo(() => {
|
||||||
const viewH = windowSize.height ?? 0;
|
const viewH = windowSize.height ?? 0;
|
||||||
const viewW = windowSize.width ?? 0;
|
const viewW = windowSize.width ?? 0;
|
||||||
const availableWidth = viewW - (windowSize.isSmall ? 35 : 300);
|
const availableWidth = viewW - (windowSize.isSmall ? 35 : 310);
|
||||||
return Math.min(1080, Math.max(viewH - 450, 300), Math.floor((availableWidth * 9) / 16));
|
return Math.min(1080, Math.max(viewH - 450, 300), Math.floor((availableWidth * 9) / 16));
|
||||||
}, [windowSize]);
|
}, [windowSize]);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ function HelpThesaurus() {
|
||||||
<div className='text-justify'>
|
<div className='text-justify'>
|
||||||
<h1>Тезаурус</h1>
|
<h1>Тезаурус</h1>
|
||||||
<p>
|
<p>
|
||||||
Данные раздел содержит основные термины и определения, используемые в работе с Порталом. Термины сгруппированы
|
Данный раздел содержит основные термины и определения, используемые в работе с Порталом. Термины сгруппированы
|
||||||
по ключевым сущностям. Более подробно описание отношений между терминами даются в отдельных разделах данной
|
по ключевым сущностям. Более подробно описание отношений между терминами даются в отдельных разделах данной
|
||||||
Справки через гиперссылки. Также указываются графические обозначения (иконки, цвета), используемые для
|
Справки через гиперссылки. Также указываются графические обозначения (иконки, цвета), используемые для
|
||||||
обозначения соответствующих сущностей в интерфейсе Портала.
|
обозначения соответствующих сущностей в интерфейсе Портала.
|
||||||
|
@ -69,26 +69,26 @@ function HelpThesaurus() {
|
||||||
По <b>отношению к операциям ОСС</b> выделены:
|
По <b>отношению к операциям ОСС</b> выделены:
|
||||||
<li>
|
<li>
|
||||||
<IconRSForm size='1rem' className='inline-icon' />
|
<IconRSForm size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}свободная КС – это КС не прикрепленная ни к одной операции в ОСС;
|
{'\u2009'}свободная КС – КС не прикрепленная ни к одной операции в ОСС;
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<IconRSFormOwned size='1rem' className='inline-icon' />
|
<IconRSFormOwned size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}собственная КС данной ОСС – это КС, прикрепленная к операции в ОСС, чьи владелец и расположение
|
{'\u2009'}собственная КС данной ОСС – КС, прикрепленная к операции в ОСС, чьи владелец и расположение
|
||||||
совпадают с соответствующими атрибутами ОСС.
|
совпадают с соответствующими атрибутами ОСС.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<IconRSFormImported size='1rem' className='inline-icon' />
|
<IconRSFormImported size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}внешняя КС данной ОСС – это КС, прикрепленная к операции в ОСС, чьи владелец или расположение не
|
{'\u2009'}внешняя КС данной ОСС – КС, прикрепленная к операции в ОСС, чьи владелец или расположение не
|
||||||
совпадают с соответствующими атрибутами ОСС;
|
совпадают с соответствующими атрибутами ОСС;
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Конституента</h2>
|
<h2>Конституента</h2>
|
||||||
<p>
|
<p>
|
||||||
Конституента – это выделенная часть КС, являющаяся отдельным понятием, схемой построения понятия, либо
|
Конституента – выделенная часть КС, являющаяся отдельным понятием, схемой построения понятия, либо утверждением,
|
||||||
утверждением, связывающим введенные понятия.{' '}
|
связывающим введенные понятия. <LinkTopic text='Аттрибутами конституенты' topic={HelpTopic.CC_CONSTITUENTA} /> в
|
||||||
<LinkTopic text='Аттрибутами конституенты' topic={HelpTopic.CC_CONSTITUENTA} /> в родоструктурной экспликации
|
родоструктурной экспликации являются Термин, Конвенция, Типизация (Структура), Формальное определение, Текстовое
|
||||||
являются Термин, Конвенция, Типизация (Структура), Формальное определение, Текстовое определение, Комментарий.
|
определение, Комментарий.
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
По <b>характеру формального определения в рамках КС</b> выделены классы:
|
По <b>характеру формального определения в рамках КС</b> выделены классы:
|
||||||
|
@ -231,11 +231,11 @@ function HelpThesaurus() {
|
||||||
Для описания <b>наследования</b> конституент в рамках ОСС введены:
|
Для описания <b>наследования</b> конституент в рамках ОСС введены:
|
||||||
<li>
|
<li>
|
||||||
<IconChild size='1rem' className='inline-icon' />
|
<IconChild size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}наследованная конституента – конституента, перенесенная из другой КС в рамках операции синтеза;
|
{'\u2009'}наследованная конституента – конституента, перенесенная из другой КС в ходе синтеза;
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<IconPredecessor size='1rem' className='inline-icon' />
|
<IconPredecessor size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}собственная конституента – конституента, не являющаяся наследником других конституент;
|
{'\u2009'}собственная конституента – конституента, не являющаяся наследованной;
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<IconPredecessor size='1rem' className='inline-icon' />
|
<IconPredecessor size='1rem' className='inline-icon' />
|
||||||
|
@ -248,8 +248,8 @@ function HelpThesaurus() {
|
||||||
<p>
|
<p>
|
||||||
<IconOSS size='1rem' className='inline-icon' />
|
<IconOSS size='1rem' className='inline-icon' />
|
||||||
{'\u2009'}
|
{'\u2009'}
|
||||||
<LinkTopic text='Операционная схема синтеза' topic={HelpTopic.CC_OSS} /> (ОСС) – система концептуальных схем,
|
<LinkTopic text='Операционная схема синтеза' topic={HelpTopic.CC_OSS} /> (ОСС) – система операций над
|
||||||
связанных операциями синтеза.
|
концептуальными схемами.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Граф синтеза – ориентированный граф, вершинами которого являются операции, а ребра указывают на использование
|
Граф синтеза – ориентированный граф, вершинами которого являются операции, а ребра указывают на использование
|
||||||
|
|
|
@ -180,9 +180,7 @@ function FormConstituenta({
|
||||||
: 'Формальное определение'
|
: 'Формальное определение'
|
||||||
}
|
}
|
||||||
placeholder={
|
placeholder={
|
||||||
state.cst_type !== CstType.STRUCTURED
|
state.cst_type !== CstType.STRUCTURED ? 'Родоструктурное выражение' : 'Типизация родовой структуры'
|
||||||
? 'Родоструктурное выражение'
|
|
||||||
: 'Определение множества, которому принадлежат элементы родовой структуры'
|
|
||||||
}
|
}
|
||||||
value={expression}
|
value={expression}
|
||||||
activeCst={state}
|
activeCst={state}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { RSTextWrapper } from '@/components/RSInput/textEditing';
|
||||||
import Overlay from '@/components/ui/Overlay';
|
import Overlay from '@/components/ui/Overlay';
|
||||||
import { useRSForm } from '@/context/RSFormContext';
|
import { useRSForm } from '@/context/RSFormContext';
|
||||||
import DlgShowAST from '@/dialogs/DlgShowAST';
|
import DlgShowAST from '@/dialogs/DlgShowAST';
|
||||||
import useCheckExpression from '@/hooks/useCheckExpression';
|
import useCheckConstituenta from '@/hooks/useCheckConstituenta';
|
||||||
import useLocalStorage from '@/hooks/useLocalStorage';
|
import useLocalStorage from '@/hooks/useLocalStorage';
|
||||||
import { HelpTopic } from '@/models/miscellaneous';
|
import { HelpTopic } from '@/models/miscellaneous';
|
||||||
import { ConstituentaID, IConstituenta } from '@/models/rsform';
|
import { ConstituentaID, IConstituenta } from '@/models/rsform';
|
||||||
|
@ -54,7 +54,7 @@ function EditorRSExpression({
|
||||||
const model = useRSForm();
|
const model = useRSForm();
|
||||||
|
|
||||||
const [isModified, setIsModified] = useState(false);
|
const [isModified, setIsModified] = useState(false);
|
||||||
const parser = useCheckExpression({ schema: model.schema });
|
const parser = useCheckConstituenta({ schema: model.schema });
|
||||||
const { resetParse } = parser;
|
const { resetParse } = parser;
|
||||||
const rsInput = useRef<ReactCodeMirrorRef>(null);
|
const rsInput = useRef<ReactCodeMirrorRef>(null);
|
||||||
|
|
||||||
|
@ -74,11 +74,9 @@ function EditorRSExpression({
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleCheckExpression(callback?: (parse: IExpressionParse) => void) {
|
function handleCheckExpression(callback?: (parse: IExpressionParse) => void) {
|
||||||
const prefix = getDefinitionPrefix(activeCst);
|
parser.checkConstituenta(value, activeCst, parse => {
|
||||||
const expression = prefix + value;
|
|
||||||
parser.checkExpression(expression, activeCst, parse => {
|
|
||||||
if (parse.errors.length > 0) {
|
if (parse.errors.length > 0) {
|
||||||
onShowError(parse.errors[0]);
|
onShowError(parse.errors[0], parse.prefixLen);
|
||||||
} else {
|
} else {
|
||||||
rsInput.current?.view?.focus();
|
rsInput.current?.view?.focus();
|
||||||
}
|
}
|
||||||
|
@ -95,12 +93,11 @@ function EditorRSExpression({
|
||||||
}
|
}
|
||||||
|
|
||||||
const onShowError = useCallback(
|
const onShowError = useCallback(
|
||||||
(error: IRSErrorDescription) => {
|
(error: IRSErrorDescription, prefixLen: number) => {
|
||||||
if (!rsInput.current) {
|
if (!rsInput.current) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const prefix = getDefinitionPrefix(activeCst);
|
let errorPosition = error.position - prefixLen;
|
||||||
let errorPosition = error.position - prefix.length;
|
|
||||||
if (errorPosition < 0) errorPosition = 0;
|
if (errorPosition < 0) errorPosition = 0;
|
||||||
rsInput.current?.view?.dispatch({
|
rsInput.current?.view?.dispatch({
|
||||||
selection: {
|
selection: {
|
||||||
|
@ -133,6 +130,7 @@ function EditorRSExpression({
|
||||||
toast.error(errors.astFailed);
|
toast.error(errors.astFailed);
|
||||||
} else {
|
} else {
|
||||||
setSyntaxTree(parse.ast);
|
setSyntaxTree(parse.ast);
|
||||||
|
// TODO: return prefix from parser API instead of prefixLength
|
||||||
setExpression(getDefinitionPrefix(activeCst) + value);
|
setExpression(getDefinitionPrefix(activeCst) + value);
|
||||||
setShowAST(true);
|
setShowAST(true);
|
||||||
}
|
}
|
||||||
|
@ -199,7 +197,7 @@ function EditorRSExpression({
|
||||||
isOpen={!!parser.parseData && parser.parseData.errors.length > 0}
|
isOpen={!!parser.parseData && parser.parseData.errors.length > 0}
|
||||||
data={parser.parseData}
|
data={parser.parseData}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onShowError={onShowError}
|
onShowError={error => onShowError(error, parser.parseData?.prefixLen ?? 0)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,8 +11,7 @@ import useLocalStorage from '@/hooks/useLocalStorage';
|
||||||
import { CstMatchMode, DependencyMode } from '@/models/miscellaneous';
|
import { CstMatchMode, DependencyMode } from '@/models/miscellaneous';
|
||||||
import { applyGraphFilter } from '@/models/miscellaneousAPI';
|
import { applyGraphFilter } from '@/models/miscellaneousAPI';
|
||||||
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
|
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
|
||||||
import { createMockConstituenta, matchConstituenta } from '@/models/rsformAPI';
|
import { matchConstituenta } from '@/models/rsformAPI';
|
||||||
import { extractGlobals } from '@/models/rslangAPI';
|
|
||||||
import { storage } from '@/utils/constants';
|
import { storage } from '@/utils/constants';
|
||||||
|
|
||||||
interface ConstituentsSearchProps {
|
interface ConstituentsSearchProps {
|
||||||
|
@ -35,15 +34,7 @@ function ConstituentsSearch({ schema, activeID, activeExpression, dense, setFilt
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let result: IConstituenta[] = [];
|
let result: IConstituenta[] = [];
|
||||||
if (filterSource === DependencyMode.EXPRESSION) {
|
if (!activeID) {
|
||||||
const aliases = extractGlobals(activeExpression);
|
|
||||||
result = schema.items.filter(cst => aliases.has(cst.alias));
|
|
||||||
const names = result.map(cst => cst.alias);
|
|
||||||
const diff = Array.from(aliases).filter(name => !names.includes(name));
|
|
||||||
if (diff.length > 0) {
|
|
||||||
diff.forEach((alias, index) => result.push(createMockConstituenta(-index, alias, 'Конституента отсутствует')));
|
|
||||||
}
|
|
||||||
} else if (!activeID) {
|
|
||||||
result = schema.items;
|
result = schema.items;
|
||||||
} else {
|
} else {
|
||||||
result = applyGraphFilter(schema, activeID, filterSource);
|
result = applyGraphFilter(schema, activeID, filterSource);
|
||||||
|
|
|
@ -8,7 +8,6 @@ import NoData from '@/components/ui/NoData';
|
||||||
import TextContent from '@/components/ui/TextContent';
|
import TextContent from '@/components/ui/TextContent';
|
||||||
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
||||||
import { ConstituentaID, IConstituenta } from '@/models/rsform';
|
import { ConstituentaID, IConstituenta } from '@/models/rsform';
|
||||||
import { isMockCst } from '@/models/rsformAPI';
|
|
||||||
import { PARAMETER, prefixes } from '@/utils/constants';
|
import { PARAMETER, prefixes } from '@/utils/constants';
|
||||||
import { describeConstituenta } from '@/utils/labels';
|
import { describeConstituenta } from '@/utils/labels';
|
||||||
|
|
||||||
|
@ -53,9 +52,7 @@ function TableSideConstituents({
|
||||||
|
|
||||||
const handleRowClicked = useCallback(
|
const handleRowClicked = useCallback(
|
||||||
(cst: IConstituenta) => {
|
(cst: IConstituenta) => {
|
||||||
if (!isMockCst(cst)) {
|
onOpenEdit(cst.id);
|
||||||
onOpenEdit(cst.id);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[onOpenEdit]
|
[onOpenEdit]
|
||||||
);
|
);
|
||||||
|
@ -90,8 +87,7 @@ function TableSideConstituents({
|
||||||
maxLength={DESCRIPTION_MAX_SYMBOLS}
|
maxLength={DESCRIPTION_MAX_SYMBOLS}
|
||||||
style={{
|
style={{
|
||||||
textWrap: 'pretty',
|
textWrap: 'pretty',
|
||||||
fontSize: 12,
|
fontSize: 12
|
||||||
color: isMockCst(props.row.original) ? colors.fgWarning : undefined
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
|
|
@ -36,6 +36,7 @@ export interface IColorTheme {
|
||||||
bgTeal: string;
|
bgTeal: string;
|
||||||
bgOrange: string;
|
bgOrange: string;
|
||||||
|
|
||||||
|
bgGreen25: string;
|
||||||
bgGreen50: string;
|
bgGreen50: string;
|
||||||
bgOrange50: string;
|
bgOrange50: string;
|
||||||
|
|
||||||
|
@ -77,6 +78,7 @@ export const lightT: IColorTheme = {
|
||||||
bgTeal: 'hsl(192, 089%, 081%)',
|
bgTeal: 'hsl(192, 089%, 081%)',
|
||||||
bgOrange: 'hsl(028, 100%, 075%)',
|
bgOrange: 'hsl(028, 100%, 075%)',
|
||||||
|
|
||||||
|
bgGreen25: 'hsl(100, 100%, 096%)',
|
||||||
bgGreen50: 'hsl(100, 100%, 090%)',
|
bgGreen50: 'hsl(100, 100%, 090%)',
|
||||||
bgOrange50: 'hsl(028, 100%, 090%)',
|
bgOrange50: 'hsl(028, 100%, 090%)',
|
||||||
|
|
||||||
|
@ -118,6 +120,7 @@ export const darkT: IColorTheme = {
|
||||||
bgTeal: 'hsl(192, 080%, 030%)',
|
bgTeal: 'hsl(192, 080%, 030%)',
|
||||||
bgOrange: 'hsl(035, 100%, 035%)',
|
bgOrange: 'hsl(035, 100%, 035%)',
|
||||||
|
|
||||||
|
bgGreen25: 'hsl(100, 080%, 009%)',
|
||||||
bgGreen50: 'hsl(100, 080%, 017%)',
|
bgGreen50: 'hsl(100, 080%, 017%)',
|
||||||
bgOrange50: 'hsl(035, 100%, 016%)',
|
bgOrange50: 'hsl(035, 100%, 016%)',
|
||||||
|
|
||||||
|
@ -382,11 +385,11 @@ export function colorBgSyntaxTree(node: ISyntaxTreeNode, colors: IColorTheme): s
|
||||||
export function colorBgCstStatus(status: ExpressionStatus, colors: IColorTheme): string {
|
export function colorBgCstStatus(status: ExpressionStatus, colors: IColorTheme): string {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ExpressionStatus.VERIFIED: return colors.bgGreen;
|
case ExpressionStatus.VERIFIED: return colors.bgGreen50;
|
||||||
case ExpressionStatus.INCORRECT: return colors.bgRed;
|
case ExpressionStatus.INCORRECT: return colors.bgRed;
|
||||||
case ExpressionStatus.INCALCULABLE: return colors.bgOrange;
|
case ExpressionStatus.INCALCULABLE: return colors.bgOrange;
|
||||||
case ExpressionStatus.PROPERTY: return colors.bgTeal;
|
case ExpressionStatus.PROPERTY: return colors.bgTeal;
|
||||||
case ExpressionStatus.UNKNOWN: return colors.bgBlue;
|
case ExpressionStatus.UNKNOWN: return colors.bgSelected;
|
||||||
case ExpressionStatus.UNDEFINED: return colors.bgBlue;
|
case ExpressionStatus.UNDEFINED: return colors.bgBlue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
/* prettier-ignore */
|
/* prettier-ignore */
|
||||||
:root {
|
:root {
|
||||||
--font-ui: 'Alegreya Sans SC', 'Rubik', 'Segoe UI Symbol', sans-serif;
|
--font-ui: 'Alegreya Sans SC', 'Rubik', 'Noto Color Emoji', 'Segoe UI Symbol', sans-serif;
|
||||||
--font-main: 'Rubik', 'Fira Code', 'Noto Sans Math', 'Noto Sans Symbols 2', 'Segoe UI Symbol', sans-serif;
|
--font-main: 'Rubik', 'Noto Color Emoji', 'Fira Code', 'Noto Sans Math', 'Noto Sans Symbols 2', 'Segoe UI Symbol', sans-serif;
|
||||||
--font-math: 'Fira Code', 'Noto Sans Math', 'Noto Sans Symbols 2', 'Rubik', 'Segoe UI Symbol', sans-serif;
|
--font-math: 'Fira Code', 'Noto Sans Math', 'Noto Sans Symbols 2', 'Rubik', 'Noto Color Emoji', 'Segoe UI Symbol', sans-serif;
|
||||||
|
|
||||||
/* Light Theme */
|
/* Light Theme */
|
||||||
--cl-bg-120: hsl(000, 000%, 100%);
|
--cl-bg-120: hsl(000, 000%, 100%);
|
||||||
|
|
|
@ -104,7 +104,7 @@ h6 {
|
||||||
/* Limit text lines and setup wrapping */
|
/* Limit text lines and setup wrapping */
|
||||||
p,
|
p,
|
||||||
li {
|
li {
|
||||||
max-width: 90ch;
|
max-width: 75ch;
|
||||||
text-wrap: pretty;
|
text-wrap: pretty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ export const PARAMETER = {
|
||||||
statSmallThreshold: 3, // characters - threshold for small labels - small font
|
statSmallThreshold: 3, // characters - threshold for small labels - small font
|
||||||
|
|
||||||
logicLabel: 'LOGIC',
|
logicLabel: 'LOGIC',
|
||||||
exteorVersion: '4.9.4',
|
exteorVersion: '4.9.5',
|
||||||
|
|
||||||
TOOLTIP_WIDTH: 'max-w-[29rem]'
|
TOOLTIP_WIDTH: 'max-w-[29rem]'
|
||||||
};
|
};
|
||||||
|
|
|
@ -244,7 +244,6 @@ export function labelCstSource(mode: DependencyMode): string {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case DependencyMode.ALL: return 'не ограничен';
|
case DependencyMode.ALL: return 'не ограничен';
|
||||||
case DependencyMode.EXPRESSION: return 'выражение';
|
|
||||||
case DependencyMode.OUTPUTS: return 'потребители';
|
case DependencyMode.OUTPUTS: return 'потребители';
|
||||||
case DependencyMode.INPUTS: return 'поставщики';
|
case DependencyMode.INPUTS: return 'поставщики';
|
||||||
case DependencyMode.EXPAND_OUTPUTS: return 'зависимые';
|
case DependencyMode.EXPAND_OUTPUTS: return 'зависимые';
|
||||||
|
@ -259,7 +258,6 @@ export function describeCstSource(mode: DependencyMode): string {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case DependencyMode.ALL: return 'все конституенты';
|
case DependencyMode.ALL: return 'все конституенты';
|
||||||
case DependencyMode.EXPRESSION: return 'имена из выражения';
|
|
||||||
case DependencyMode.OUTPUTS: return 'прямые исходящие';
|
case DependencyMode.OUTPUTS: return 'прямые исходящие';
|
||||||
case DependencyMode.INPUTS: return 'прямые входящие';
|
case DependencyMode.INPUTS: return 'прямые входящие';
|
||||||
case DependencyMode.EXPAND_OUTPUTS: return 'цепочка исходящих';
|
case DependencyMode.EXPAND_OUTPUTS: return 'цепочка исходящих';
|
||||||
|
@ -787,13 +785,20 @@ export function describeRSError(error: IRSErrorDescription): string {
|
||||||
case RSErrorType.globalMissingAST:
|
case RSErrorType.globalMissingAST:
|
||||||
return `Не удалось получить дерево разбора для глобального идентификатора: ${error.params[0]}`;
|
return `Не удалось получить дерево разбора для глобального идентификатора: ${error.params[0]}`;
|
||||||
case RSErrorType.globalFuncNoInterpretation:
|
case RSErrorType.globalFuncNoInterpretation:
|
||||||
return `Функция не интерпретируется для данных аргументов`;
|
return 'Функция не интерпретируется для данных аргументов';
|
||||||
case RSErrorType.globalNonemptyBase:
|
|
||||||
return `Непустое выражение базисного/константного множества`;
|
case RSErrorType.cstNonemptyBase:
|
||||||
case RSErrorType.globalUnexpectedType:
|
return 'Непустое выражение базисного/константного множества';
|
||||||
return `Типизация выражения не соответствует типу конституенты`;
|
case RSErrorType.cstEmptyDerived:
|
||||||
case RSErrorType.globalEmptyDerived:
|
return 'Пустое выражение для сложного понятия или утверждения';
|
||||||
return `Пустое выражение для выводимого понятия или утверждения`;
|
case RSErrorType.cstCallableNoArgs:
|
||||||
|
return 'Отсутствуют аргументы для параметризованной конституенты';
|
||||||
|
case RSErrorType.cstNonCallableHasArgs:
|
||||||
|
return 'Параметризованное выражение не подходит для данного типа конституенты';
|
||||||
|
case RSErrorType.cstExpectedLogical:
|
||||||
|
return 'Данный тип конституенты требует логического выражения';
|
||||||
|
case RSErrorType.cstExpectedTyped:
|
||||||
|
return 'Данный тип конституенты требует теоретико-множественного выражения';
|
||||||
}
|
}
|
||||||
return 'UNKNOWN ERROR';
|
return 'UNKNOWN ERROR';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user