Compare commits

...
13 changed files with 754 additions and 264 deletions

No files matched your search

+285 -235
View File
@@ -19,7 +19,7 @@
"@mui/x-data-grid-pro": "5.17.23",
"@mui/x-date-pickers": "7.1.1",
"@mui/x-license-pro": "5.12.3",
"@qrunio/qqq-frontend-core": "1.3.7-SNAPSHOT",
"@qrunio/qqq-frontend-core": "1.3.8-SNAPSHOT",
"@react-jvectormap/core": "1.0.1",
"@react-jvectormap/unitedstates": "1.0.1",
"@react-oauth/google": "0.2.8",
@@ -3619,9 +3619,9 @@
}
},
"node_modules/@mui/utils/node_modules/react-is": {
"version": "19.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz",
"integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==",
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz",
"integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==",
"license": "MIT"
},
"node_modules/@mui/x-data-grid": {
@@ -3871,9 +3871,9 @@
}
},
"node_modules/@mui/x-date-pickers/node_modules/react-is": {
"version": "19.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz",
"integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==",
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz",
"integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==",
"license": "MIT"
},
"node_modules/@mui/x-license-pro": {
@@ -4017,9 +4017,9 @@
}
},
"node_modules/@qrunio/qqq-frontend-core": {
"version": "1.3.7-SNAPSHOT",
"resolved": "https://registry.npmjs.org/@qrunio/qqq-frontend-core/-/qqq-frontend-core-1.3.7-SNAPSHOT.tgz",
"integrity": "sha512-Y59lQBAvElzv4lazDSBPfXgdVWWrrHPza+1ih/kVNRr5x9MzDS10K4SVd4RMCmhlrwwhXWK4B4IT5MXzTi+KtA==",
"version": "1.3.8-SNAPSHOT",
"resolved": "https://registry.npmjs.org/@qrunio/qqq-frontend-core/-/qqq-frontend-core-1.3.8-SNAPSHOT.tgz",
"integrity": "sha512-NgjvJbZx54q2VA8ot5uKKLo5tdsJcP1zQfWTiOEnuVFm+aAusUFcnEQchMCC0Y6vzvnBcXw1BTrLP1PzNLmxiQ==",
"license": "ISC",
"dependencies": {
"axios": "0.28.1",
@@ -4769,13 +4769,13 @@
}
},
"node_modules/@swagger-api/apidom-ast": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-rc.4.tgz",
"integrity": "sha512-IaXz00VLMq0Kw5vh5f2MX4gNWzPy8ujBl5FInM5w+1mezoyrwTnVRiKO7sf611OthmNmnK5cWy3hjqURAT9wCQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.1.tgz",
"integrity": "sha512-inTGo5b49XkHs/Vq48VafXnCzZrwwE+KTNcdfMybdm3RQTbfVFbvSUrS54WoHoaSbef1GsB9rnS/oXoXfNr72g==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4783,14 +4783,14 @@
}
},
"node_modules/@swagger-api/apidom-core": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-rc.4.tgz",
"integrity": "sha512-dSvq/FmUffmv9nqBO8LZ5+ESFWPe/y7UsatRiwpqh6M7vBHy9xBuKdn6A/7QtmZnetjigkx3h4CXc4Mi30RZCg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.1.tgz",
"integrity": "sha512-biA53spAUphP2IMJSPdqcRFjvLbvLspv1mJQrZpePUq4XGxGOKOHof7dUc1bXJuYvl6OOxOwnVniv5oK2Wyblw==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-ast": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ast": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@types/ramda": "~0.30.0",
"minim": "~0.23.8",
"ramda": "~0.30.0",
@@ -4800,37 +4800,37 @@
}
},
"node_modules/@swagger-api/apidom-error": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-rc.4.tgz",
"integrity": "sha512-uakMfKYyLgGjLrVaaUKWyl0D+wGxza+nh1Ct4fOFRiy0Dm91I4AD4HwsG3Uvk5gLrvqlf/OutKYzKt8Ufhlyig==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.1.tgz",
"integrity": "sha512-uwduVNLg9a2qA+Pl4b8gPERH6Xhvm/Ilv4iKMUOpUicLwNmYjrlcRsyYxLvFiNlTghm70xuI3hap1iaXbrer4A==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.20.7"
}
},
"node_modules/@swagger-api/apidom-json-pointer": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-rc.4.tgz",
"integrity": "sha512-5bB6nemgzkWs440a8PX+lS3fGtEtJt2iYhK0Xf9E+9qU6d1eR9aiETPdAVjbdL8vLhyZvmgvZie/7q0l6bbLJg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.1.tgz",
"integrity": "sha512-Dgxd9hl1AiCIM1b5f4dSfmP+rGtASUso8Lw51+az605hqrohgykxt8voiQtaJxKySWYbS1J9Vz2xjLwrEmfTKg==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swaggerexpert/json-pointer": "^2.10.1"
}
},
"node_modules/@swagger-api/apidom-ns-api-design-systems": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-rc.4.tgz",
"integrity": "sha512-JlOD1H2jSl/XxdFwa/zPOvRZh8rk/O/2B2xkoKaxhTmkVTKq2Y1rHsey8cyU9qrfQSkLpPm1cxXeIfqmhdPmqQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.1.tgz",
"integrity": "sha512-frRfiLjcufeBgqnHQOcXgl6dnvcIdP4+18pWb+qT3N+dv87geJBk1CbXo6RjW9AEQX/7BtvWYkfSMLrh8q2TZA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4838,15 +4838,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-arazzo-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.0-rc.4.tgz",
"integrity": "sha512-sKep7qCvJa2zB4q67e9zinLKjVx0vhV/e40OLEg3JeECMWcRrW3oI2JB3jSJ7ZZwCgvatfBc6/ucFsX/1oKpkg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.1.tgz",
"integrity": "sha512-gJJY0vmi3TJtlCYNPsZahQnP6GA9GtJX1a9jEUASaYYxz6cBBfY39y8C5tQTo0Jvc7QEff/UZ8iGX0kltcwlzA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4854,15 +4854,31 @@
}
},
"node_modules/@swagger-api/apidom-ns-asyncapi-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-rc.4.tgz",
"integrity": "sha512-RDNKv4kCAzQ+aA02VjgxS9Cve0UgnRkcFNEUxYEHWNbqVcMmxcck6GLQo4OuwhgJczEyZC3TB5idfxphRhaybg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.1.tgz",
"integrity": "sha512-d8HBr2EVB2gK8FKrxj0Wsss6Qeael//WxnNv1ZtmNeCe1l83iC9RO/hjjq/OFob94ZTOfpPRNwGqZBd4tMxOnA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
"ts-mixer": "^6.0.3"
}
},
"node_modules/@swagger-api/apidom-ns-asyncapi-3": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.0.1.tgz",
"integrity": "sha512-vonGt1ScMlT+GbbSGa/+oe874Zl7NVylX3ZoMAhMkRyqu49vmWB6dXUcWw6ZsZu2GxVphjNTm+D52Ikw8UAMWg==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4870,15 +4886,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-json-schema-2019-09": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.0-rc.4.tgz",
"integrity": "sha512-kgIo3d9VZjBFg30Cg0asokbBGVb4WvVckkf9U2T8/6wh2o1J+KMqvdRauo2Xz+o5EubLpGyZjrwOzMbFJv/viA==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.1.tgz",
"integrity": "sha512-wtVkFhkM7a0ybjAR0HCQyXzAwIWWcaoHmXiZGAS7wTpI2sDMLwCrBXBuISa7BoRkG4ieA2odDF5Eac73knWUbA==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4886,15 +4902,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-json-schema-2020-12": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.0-rc.4.tgz",
"integrity": "sha512-0mpBu8iXq8GaY+KDQGWSU+8Xvd1Kd5EXKOpW8tDgJINBgeYm7F3m8iP3irP0OMeCyX9ISMq+bDgXg+YjS8kYzA==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.1.tgz",
"integrity": "sha512-YBE5kYKARFWi+8HAiUVJxF9WpkdlW2ebH6K4oZt6mnOWROkPS+30Kjjxlz+Q994KhSZGBHKK0d3TU11xXUqyAQ==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4902,14 +4918,14 @@
}
},
"node_modules/@swagger-api/apidom-ns-json-schema-draft-4": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-rc.4.tgz",
"integrity": "sha512-FOqR+EMMt5QPXmQv/gJ/syzp+G5QCrb+5n3tkmVwBNKhiPHcX4kOHt6/8wZo/6V++hhv1IzCt1JwGJGiNEuK9A==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.1.tgz",
"integrity": "sha512-OR3D7EXVq2H07n9uPKpNCikKC5857Pggbi1g5rt9X0znaUgxTtkYu8unPfbEcjQgFVglzIwqbGhMnahUFXYaTA==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-ast": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ast": "^1.0.1",
"@swagger-api/apidom-core": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4917,15 +4933,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-json-schema-draft-6": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-rc.4.tgz",
"integrity": "sha512-OQonOTVyPzKUvE2+6AB+JK7rkqqd0AG0QyarSyPJH+vbt2Nsj2tUaEXNY3WeP9OX1xvbtUysR74fefsOkjzO1Q==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.1.tgz",
"integrity": "sha512-J9/aSU9/YwiRU/avkSN1APYPs9sYVyrzaMpfq7XIY8xMFC4buwrPzCymrqshSOLbn1Qzr9Ruavcqx5Bwt0EuRg==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4933,15 +4949,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-json-schema-draft-7": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-rc.4.tgz",
"integrity": "sha512-p1YbbkHQDD0REbz30F/vMXjPjsh7j7jIjaHNgFv3zC+KZN776GkOwQIpdP56lwneWFdMj9jOSRhwBKp34h9iXw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.1.tgz",
"integrity": "sha512-b8pNff3epzweot5Edoa05mM/jBMgvjqajvNTOvOa8SNPWHWLjSJNYkBT2jI3BnFqqEMMo7litEfKnblblFuDtQ==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4949,16 +4965,16 @@
}
},
"node_modules/@swagger-api/apidom-ns-openapi-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-rc.4.tgz",
"integrity": "sha512-Wil2egcmJJIrgEDYGZVaDIMGlnLhcBw8I5ZjWBgyU8nLocuqdKVE8I1TwPO+7830dnfjCaXs+nUzfgkBcGefMg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.1.tgz",
"integrity": "sha512-XZ1xHHvsZZaNNHkqk0KWggZxMM2Av5eJdjbxwLij7TFWjodYVJAMZLyWG15llDBjnTXQYtpFIVLGjndf2oC7Xg==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4966,15 +4982,15 @@
}
},
"node_modules/@swagger-api/apidom-ns-openapi-3-0": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-rc.4.tgz",
"integrity": "sha512-t4ZX6I76fcrCsV1Aj8Um6LiIceVCKNgakg5MIuBiRZaA0q8fZPerLSD1KIYMLWPd+cV5ptKZyv+bugzhlhQtTg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.1.tgz",
"integrity": "sha512-BAypZcl8NO+jYpAmAXJVCLVe4f+v3ZoZN21Oxu03N2lsv+qz/P9vpl+6C0dOfta6X8fACkuGr4KIGU6leUPpJg==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -4982,17 +4998,17 @@
}
},
"node_modules/@swagger-api/apidom-ns-openapi-3-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-rc.4.tgz",
"integrity": "sha512-Ibv8PP0npBb8QupINmluQmLCZ1IhANlRUic8K7k32Lbc9ejMGTLCKGl2J3hPPeKsER3zqfEjHAhkins9r/CJcw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.1.tgz",
"integrity": "sha512-nIkgyIW8XTV+zjzLKxP1JaA/lpgmtsRBLshh1mL+Fspd+RYAhyMpRDRNvBOmkIhva9Dst9LNYyMjBP9ssfKUwg==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-ast": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-json-pointer": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.4",
"@swagger-api/apidom-ast": "^1.0.1",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-json-pointer": "^1.0.1",
"@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -5000,112 +5016,144 @@
}
},
"node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-rc.4.tgz",
"integrity": "sha512-/K9xj7tL6RB6B+krFf5JlzEGb3bebVt5c6t9a0ZZps+4TjcAQ3M1B9Gs3+ngR6Hy2RwtqIPKWKl0fhgfpArmnw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.1.tgz",
"integrity": "sha512-Udj6vJ6Au+fcqZJZtgHlUi1Y/ImLHo8fx4ICSas7hewA7z1/eZ7Y3Yp8YSGZ7ZwqXHS6nnm5fBHws0DgAplnDA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-api-design-systems": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-rc.4.tgz",
"integrity": "sha512-+J4hMSe7+cKxuDDEVxyF7MGfvAFv7cbFdyBKUDkvkKjtdkh40+5msTJ2ePuSxibNqZTJFGZhaJBIaPOfbqLpUQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.1.tgz",
"integrity": "sha512-YZ2IuTEzUGXRF8oFuHHGZpM15hRnSI/rZnweGT984bX53HXi1NFpZdNxOz49vmkhFz6XJgxRXp1R3EDN/98urg==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-api-design-systems": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.0-rc.4.tgz",
"integrity": "sha512-7sDeZgV1SVwiWQmckvRgBwEBZXUavxvJr5m8C2daEge9DTM9LE3qNBAjWdwvd5E4sPeDdslSiCWT9Ipi+aiBsg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.1.tgz",
"integrity": "sha512-Re8EcgYOITyTXvGeJyE/4ZNsprkSrkXVmHzyM9hqTWoMpDILnqOtbrjc0YwLkbe9awBkUMWJ51CEFLYALSYfDA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.0-rc.4.tgz",
"integrity": "sha512-UnU6RLRKNMm0qbHjINbfrFgKQd6tD2pRKySWgR9HxLVS+VTL3J4Oid2Tt3ND5xy6nE4qZrV5vusZNkdDewZk7A==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.1.tgz",
"integrity": "sha512-++BB47Vf9sarAf+YCvlt9V2OqFd8O5AZMr/xXBKTls4SzwpUcLf4oIQJpHcr/rl+bgI4CKwxKXHvnhg2vhEVmg==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-rc.4.tgz",
"integrity": "sha512-fZJgQWRXQxPcZurKxiY2IcdtuS33CxuJyFD9Z+72v3OvVWFEII6mWGC6NdqevzYaD7WUVXhsQjAqibBNIcyJiQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.1.tgz",
"integrity": "sha512-dd8djfZy2utM1xO7oxDPB/dmExSFgEA2l71gjHaKmhJw7O5NB8E/1663w9lD4NElj2Ft8kuGLLDsqyKNhXW/9w==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-3": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.0.1.tgz",
"integrity": "sha512-qD+gbnSnc9PlZ8b45knyWihrWOMKhnAHDnvzRllX+NiyM3XdBJ7B6yLn8dl6gZuKjTBHoMORLEefoTGvmskneA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-3": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-rc.4.tgz",
"integrity": "sha512-WNmlRSHiCLu9uCsadnoaWYxzV/aagUHAeVTY+Zgq+4bSNWx9DZTX5X1v/IW4aD5MAW6j1Inz8U5qdxWnrEdBBg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.1.tgz",
"integrity": "sha512-G5RS0pCFCOIsFflKvWbH+DblunmcAdVi5X9ETTTkGLa1IF5s0DIdjU46WxJAzEQpCXOvmUhpDspjaAYXxGTYpQ==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.0.1.tgz",
"integrity": "sha512-hzgUkTsuKYraY0NXQlaYe/j1/LkvNF/8r30Iz7/1B27BYLOKIwHoFGN6jUa8UBA9/0qSp8QPzSwVWFLrgNiqJQ==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-3": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-json": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-rc.4.tgz",
"integrity": "sha512-UuYtpZtXoWuukny/1WIz2szlfKc6XDNh0W1E8PtZqhFOUDgaq0qXB7OBB7E/lDAJAIzlWfJu1lR87C2pwbJSRw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.1.tgz",
"integrity": "sha512-95V2aMBGZ76rYXcod/PCJpVEMK+9mPk/gDgsDKEq2ka+YVMTtR1tUkPUIBmWlNC+brh5reks1QocyQL8B4f3TQ==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-ast": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ast": "^1.0.1",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0",
@@ -5147,112 +5195,112 @@
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-rc.4.tgz",
"integrity": "sha512-2OgY9MO0U2Ma7OiIOvsT7cn0J5XbfWy9JnOEGm6DCh+b1m+NGWSXuPKGB9o/R3DJu5Jar9ol7Mu+oyb6ENJKdg==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.1.tgz",
"integrity": "sha512-Gp02eAA32SN+hAgVDc82xpkUthHn0oAdLdri5g3co4pa45XVRsBSHS3L/H3NEbhDJ8wpXjcg+FLs/OAwcm42yw==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-rc.4.tgz",
"integrity": "sha512-XvZsBuUO2UY5qXsizw03A+dy745ZWvekwS0J3o5RmPoEuJ1eeRNXsUn+JoAHascX81vzlkam71Xp9XpcAlybYQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.1.tgz",
"integrity": "sha512-Ls3U0stAtMqvzesy981crjDa7vwqGHlCoulHIsWQ/V74dHg3Nl1Vg9AgerefKg8LHxxLiYTZJITfsWQMYsnlkA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-rc.4.tgz",
"integrity": "sha512-cydbVKumtVTTfTnbtvfw1kayYRbQyTS6iZ5s/Y6xyZb7ro5VNi6XZy6htOu0EvXUBS/NJjY9YDeWcVKGUEuohw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.1.tgz",
"integrity": "sha512-Xsf3jUCfgqZqZjiABWifPynBDLPkW54V210Oa4SvgyI7ZWgubcy5/Wgd68wvhq4knauRXqRmbgKc+WRm0UP3xw==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-rc.4.tgz",
"integrity": "sha512-pqoPgMFOvJJ2v4qA9MKMnTlhOYST+o2WhYmY34GMCoZrRrHue0rnvjtsAyH9BQNk9WEmS1gdonKpyHl6a5bewQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.1.tgz",
"integrity": "sha512-SygtOXG9XF6lYveg6rymk4u1Twgk1VTxzyVkQ8I6eQoGyBoYfJC00sI6qep9bGU/VnsaRaN/H8+N0vXBeAOsPg==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-rc.4.tgz",
"integrity": "sha512-7J+iWKNC6pjWGAsOy5it2FDJGYyiDJ+rvIrUFAiK3Giqk9t70/s6PmH54DtVnb8rzmpX/udd8PVxTE6uImru1Q==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.1.tgz",
"integrity": "sha512-xm8tY1NYe329tGF01WCtCi7uepppORWs3WpwzskSiZnDAmyjIu5ez3R0RFPCiXnMRGgj4wO6UzjawSrKGTJHjA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-rc.4.tgz",
"integrity": "sha512-N3ehKEKvEWkZjL6QAV4Fwepa+2lSSun8DYN1h+ScVMa/QSWQh558vSXv6cF49ClYIO+IQjZg1fsbDoVg7qjlcA==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.1.tgz",
"integrity": "sha512-p0G3g63Jcd4Z5Y2hStNB0NgjwYJg9VBLhkDcmFdmKCbz9vYA45rMN+wn62pqkWQE7KBZ1F1zY0wacRlUy0VuuQ==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.4",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
"ramda-adjunct": "^5.0.0"
}
},
"node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-rc.4.tgz",
"integrity": "sha512-go/s36rTmkgVIBt4Q/oAJzwRTwRjVdFQPeQGnuS6eX5mxMUWxzVrsKKLJ2qul5y8DVkzZsZ6K897RI5H0fUuuQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.1.tgz",
"integrity": "sha512-ppNo8mncbGA3TchroLmcDv1WUw9vruHa4M96WbWqI7cwH3zdJ1UddwfHkZ5IaCOUU08Iyo2uzMMRaarALAsl8g==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-ast": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-ast": "^1.0.1",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1",
"@types/ramda": "~0.30.0",
"ramda": "~0.30.0",
@@ -5262,14 +5310,14 @@
}
},
"node_modules/@swagger-api/apidom-reference": {
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-rc.4.tgz",
"integrity": "sha512-H0eVImmOEp8TjRBcVQuyBsCcUCR5094POMcgvcipUyKwAus62PwMivn1eQc+e/wyZSm7qqEbv1ksOcDLHltykA==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.1.tgz",
"integrity": "sha512-FvM6cooFx1ppWN9gKXSLFG2Y4u3SRdv1FIJxj+5VC/6V3++BF2LUFkb7hK0IOaAjw2vQ7G0NUyP+5UY/3qKBjA==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime-corejs3": "^7.26.10",
"@swagger-api/apidom-core": "^1.0.0-rc.4",
"@swagger-api/apidom-error": "^1.0.0-rc.4",
"@swagger-api/apidom-core": "^1.0.1",
"@swagger-api/apidom-error": "^1.0.1",
"@types/ramda": "~0.30.0",
"axios": "^1.12.2",
"minimatch": "^7.4.3",
@@ -5278,26 +5326,28 @@
"ramda-adjunct": "^5.0.0"
},
"optionalDependencies": {
"@swagger-api/apidom-json-pointer": "^1.0.0-rc.0",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.0",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.0",
"@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.0",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.0",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-rc.0",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.0"
"@swagger-api/apidom-json-pointer": "^1.0.1",
"@swagger-api/apidom-ns-arazzo-1": "^1.0.1",
"@swagger-api/apidom-ns-asyncapi-2": "^1.0.1",
"@swagger-api/apidom-ns-openapi-2": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-0": "^1.0.1",
"@swagger-api/apidom-ns-openapi-3-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.1",
"@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.1",
"@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.0.1",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.1",
"@swagger-api/apidom-parser-adapter-json": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.1",
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.1",
"@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1"
}
},
"node_modules/@swagger-api/apidom-reference/node_modules/axios": {
@@ -5730,9 +5780,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "24.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
"version": "24.10.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz",
"integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
@@ -7445,9 +7495,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
"version": "2.8.32",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz",
"integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==",
"version": "2.9.5",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz",
"integrity": "sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
@@ -7621,9 +7671,9 @@
}
},
"node_modules/browserslist": {
"version": "4.28.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
"integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
"version": "4.28.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"devOptional": true,
"funding": [
{
@@ -7641,11 +7691,11 @@
],
"license": "MIT",
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
"electron-to-chromium": "^1.5.249",
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
"electron-to-chromium": "^1.5.263",
"node-releases": "^2.0.27",
"update-browserslist-db": "^1.1.4"
"update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
@@ -7824,9 +7874,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001757",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
"integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
"version": "1.0.30001760",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
"integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
"devOptional": true,
"funding": [
{
@@ -9454,9 +9504,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.262",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz",
"integrity": "sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==",
"version": "1.5.267",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
"integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
"devOptional": true,
"license": "ISC"
},
@@ -10601,9 +10651,9 @@
}
},
"node_modules/express": {
"version": "4.22.0",
"resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz",
"integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==",
"version": "4.22.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
"integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15880,9 +15930,9 @@
}
},
"node_modules/node-forge": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
"integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz",
"integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==",
"dev": true,
"license": "(BSD-3-Clause OR GPL-2.0)",
"engines": {
@@ -15974,9 +16024,9 @@
}
},
"node_modules/nwsapi": {
"version": "2.2.22",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz",
"integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==",
"version": "2.2.23",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz",
"integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==",
"dev": true,
"license": "MIT"
},
@@ -20982,9 +21032,9 @@
}
},
"node_modules/terser-webpack-plugin": {
"version": "5.3.14",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
"integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
"version": "5.3.15",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.15.tgz",
"integrity": "sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21711,9 +21761,9 @@
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
"integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
"devOptional": true,
"funding": [
{
+1 -1
View File
@@ -15,7 +15,7 @@
"@mui/x-data-grid-pro": "5.17.23",
"@mui/x-date-pickers": "7.1.1",
"@mui/x-license-pro": "5.12.3",
"@qrunio/qqq-frontend-core": "1.3.7-SNAPSHOT",
"@qrunio/qqq-frontend-core": "1.3.8-SNAPSHOT",
"@react-jvectormap/core": "1.0.1",
"@react-jvectormap/unitedstates": "1.0.1",
"@react-oauth/google": "0.2.8",
+1 -3
View File
@@ -59,9 +59,7 @@
<properties>
<revision>0.28.0-SNAPSHOT</revision>
<qqq.version>
0.32.0-SNAPSHOT
</qqq.version>
<qqq.version>0.33.0-virtual-fields-and-alternative-sections-fbc8e668b-20251210.195828-1</qqq.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>17</maven.compiler.source>
@@ -75,6 +75,7 @@ interface Props
entityPrimaryKey?: string;
record?: QRecord;
omitWrappingGridContainer: boolean;
omitPaddingOnWidget: boolean;
areChildren?: boolean;
childUrlParams?: string;
parentWidgetMetaData?: QWidgetMetaData;
@@ -90,6 +91,7 @@ DashboardWidgets.defaultProps = {
tableName: null,
entityPrimaryKey: null,
omitWrappingGridContainer: false,
omitPaddingOnWidget: false,
areChildren: false,
childUrlParams: "",
parentWidgetMetaData: null,
@@ -100,7 +102,7 @@ DashboardWidgets.defaultProps = {
screen: "dashboard",
};
function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, record, omitWrappingGridContainer, areChildren, childUrlParams, parentWidgetMetaData, wrapWidgetsInTabPanels, actionCallback, initialWidgetDataList, values, screen}: Props): JSX.Element
function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, record, omitWrappingGridContainer, omitPaddingOnWidget, areChildren, childUrlParams, parentWidgetMetaData, wrapWidgetsInTabPanels, actionCallback, initialWidgetDataList, values, screen}: Props): JSX.Element
{
const [widgetData, setWidgetData] = useState(initialWidgetDataList == null ? [] as any[] : initialWidgetDataList);
const [errorsLoading, setErrorsLoading] = useState([] as any[]);
@@ -468,12 +470,12 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
message = "Error: " + e.message;
}
return (<Widget widgetMetaData={widgetMetaData}>
return (<Widget widgetMetaData={widgetMetaData} omitPadding={omitPaddingOnWidget}>
<Alert severity="error">{message}</Alert>
</Widget>);
}
return (<Widget widgetMetaData={widgetMetaData}>
return (<Widget widgetMetaData={widgetMetaData} omitPadding={omitPaddingOnWidget}>
{
skeleton ? skeleton : <Skeleton></Skeleton>
}
@@ -596,6 +598,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
isChild={areChildren}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<StackedBarChart data={widgetData[i]?.chartData} chartSubheaderData={widgetData[i]?.chartSubheaderData} />
</Widget>
@@ -610,6 +613,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
showReloadControl={false}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<div className="widgetProcessMidDiv" style={{height: "100%"}}>
<ProcessRun process={widgetData[i]?.processMetaData} defaultProcessValues={widgetData[i]?.defaultValues} isWidget={true} forceReInit={widgetCounter} />
@@ -625,6 +629,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
reloadWidgetCallback={(data) => reloadWidget(i, data)}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<Box sx={{alignItems: "stretch", flexGrow: 1, display: "flex", marginTop: "0px", paddingTop: "0px"}}>
<Box padding="1rem" sx={{width: "100%"}}>
@@ -642,6 +647,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
widgetData={widgetData[i]}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<Box>
<MDTypography component="div" variant="button" color="text" fontWeight="light">
@@ -675,6 +681,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
reloadWidgetCallback={(data) => reloadWidget(i, data)}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<StatisticsCard
widgetMetaData={widgetMetaData}
@@ -718,6 +725,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
isChild={areChildren}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<div>
<PieChart
@@ -753,6 +761,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
isChild={areChildren}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<DefaultLineChart sx={{alignItems: "center"}}
data={widgetData[i]?.chartData}
@@ -797,6 +806,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
isChild={areChildren}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<CompositeWidget widgetMetaData={widgetMetaData} data={widgetData[i]} actionCallback={actionCallback} values={values} />
</Widget>
@@ -811,6 +821,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
isChild={areChildren}
labelAdditionalComponentsRight={labelAdditionalComponentsRight}
labelAdditionalComponentsLeft={labelAdditionalComponentsLeft}
omitPadding={omitPaddingOnWidget}
>
<WidgetBlock widgetMetaData={widgetMetaData} block={widgetData[i]} />
</Widget>
@@ -819,7 +830,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
{
widgetMetaData.type === "dataBagViewer" && (
widgetData && widgetData[i] && widgetData[i].queryParams &&
<Widget widgetMetaData={widgetMetaData}>
<Widget widgetMetaData={widgetMetaData} omitPadding={omitPaddingOnWidget}>
<DataBagViewer dataBagId={widgetData[i].queryParams.id} />
</Widget>
)
@@ -827,7 +838,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
{
widgetMetaData.type === "scriptViewer" && (
widgetData && widgetData[i] && widgetData[i].queryParams &&
<Widget widgetMetaData={widgetMetaData}>
<Widget widgetMetaData={widgetMetaData} omitPadding={omitPaddingOnWidget}>
<ScriptViewer scriptId={widgetData[i].queryParams.id} />
</Widget>
)
@@ -880,7 +891,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, reco
{
widgetMetaData.type === "customComponent" && (
widgetData && widgetData[i] &&
<Widget widgetMetaData={widgetMetaData}>
<Widget widgetMetaData={widgetMetaData} omitPadding={omitPaddingOnWidget}>
<CustomComponentWidget widgetMetaData={widgetMetaData} widgetData={widgetData[i]} record={record} />
</Widget>
)
@@ -24,6 +24,7 @@ import {QWidgetMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QWid
import {Alert, Skeleton} from "@mui/material";
import ButtonBlock from "qqq/components/widgets/blocks/ButtonBlock";
import AudioBlock from "qqq/components/widgets/blocks/AudioBlock";
import IconBlock from "qqq/components/widgets/blocks/IconBlock";
import InputFieldBlock from "qqq/components/widgets/blocks/InputFieldBlock";
import React from "react";
import BigNumberBlock from "qqq/components/widgets/blocks/BigNumberBlock";
@@ -97,6 +98,8 @@ export default function WidgetBlock({widgetMetaData, block, actionCallback, valu
return (<AudioBlock widgetMetaData={widgetMetaData} data={block} />);
case "IMAGE":
return (<ImageBlock widgetMetaData={widgetMetaData} data={block} actionCallback={actionCallback} />);
case "ICON":
return (<IconBlock widgetMetaData={widgetMetaData} data={block} actionCallback={actionCallback} />);
default:
return (<Alert sx={{m: "0.5rem"}} color="warning">Unsupported block type: {block.blockTypeName}</Alert>)
}
@@ -0,0 +1,41 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2024. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import Icon from "@mui/material/Icon";
import BlockElementWrapper from "qqq/components/widgets/blocks/BlockElementWrapper";
import {StandardBlockComponentProps} from "qqq/components/widgets/blocks/BlockModels";
import React from "react";
/*******************************************************************************
** Block that renders ... an <Icon> tag
**
** <Icon>{name}</Icon>
*******************************************************************************/
export default function IconBlock({widgetMetaData, data}: StandardBlockComponentProps): JSX.Element
{
return (
<BlockElementWrapper metaData={widgetMetaData} data={data} slot="">
<span style={{color: data.styles?.color, lineHeight: 0, fontSize: data.styles?.fontSize}}>
<Icon color={data.styles?.color}>{data.values?.name}</Icon>
</span>
</BlockElementWrapper>
);
}
@@ -30,7 +30,7 @@ import React from "react";
**
** <audio src=${path} ${autoPlay} ${showControls} />
*******************************************************************************/
export default function AudioBlock({widgetMetaData, data}: StandardBlockComponentProps): JSX.Element
export default function ImageBlock({widgetMetaData, data}: StandardBlockComponentProps): JSX.Element
{
let imageStyle: any = {};
@@ -138,7 +138,7 @@ export default function TextBlock({widgetMetaData, data}: StandardBlockComponent
}
const text = data.values.interpolatedText ?? data.values.text;
const lines = text.split("\n");
const lines = (text ?? "").split("\n");
const startIcon = data.values.startIcon?.name ? <Icon>{data.values.startIcon.name}</Icon> : null;
const endIcon = data.values.endIcon?.name ? <Icon>{data.values.endIcon.name}</Icon> : null;
@@ -0,0 +1,124 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2025. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Box, Skeleton} from "@mui/material";
import {AdornmentType} from "@qrunio/qqq-frontend-core/lib/model/metaData/AdornmentType";
import {QFieldMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QFieldMetaData";
import {QWidgetMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QWidgetMetaData";
import {QRecord} from "@qrunio/qqq-frontend-core/lib/model/QRecord";
import DashboardWidgets from "qqq/components/widgets/DashboardWidgets";
import Client from "qqq/utils/qqq/Client";
import React, {useEffect, useRef, useState} from "react";
const qController = Client.getInstance();
interface Props
{
field: QFieldMetaData;
record: QRecord;
}
/***************************************************************************
* Render a field for a view-only screen (e.g., not a form), using a widget.
* The field is expected to have an adornment of type WIDGET, with a value
* "widgetName", which should be a valid widget name within the qInstance.
***************************************************************************/
export function FieldValueAsWidget({field, record}: Props): JSX.Element
{
const [widgetName] = useState(field?.getAdornment(AdornmentType.WIDGET)?.getValue("widgetName"));
const [widgetMetaData, setWidgetMetaData] = useState(null as QWidgetMetaData);
const [error, setError] = useState(null as string);
const [ready, setReady] = useState(false);
const skeletonWrapperRef = useRef();
const widgetData = record.values.get(field.name);
useEffect(() =>
{
(async () =>
{
try
{
const metaData = await qController.loadMetaData();
const widgetMetaData = metaData.widgets.get(widgetName);
if (!widgetMetaData)
{
setError(`Could not load widget [${widgetName}]`);
}
else
{
setWidgetMetaData(widgetMetaData);
setReady(true);
}
}
catch (e)
{
setError(`${e}`);
}
})();
}, []);
///////////////////////
// if error, show it //
///////////////////////
if (error)
{
return (<span className="FieldValueAsWidget" style={{color: "red", fontSize: "0.875rem"}}>
<span>Error: {error}</span>
</span>
);
}
///////////////////////////////////////////////////////////////////////////////////////
// make skeleton fade in after a bit, so if content is fast enough, it doesn't flash //
///////////////////////////////////////////////////////////////////////////////////////
setTimeout(() =>
{
try
{
if (skeletonWrapperRef.current)
{
//@ts-ignore
skeletonWrapperRef.current.style.opacity = "100";
}
}
catch (e)
{
// ignore
}
}, 250);
/////////////////////////////////
// if not ready, show skeleton //
/////////////////////////////////
if (!ready)
{
return (<div ref={skeletonWrapperRef} id="it" style={{opacity: 0, transition: "opacity 0.75s ease"}}><Skeleton /></div>);
}
/////////////////////////////////////////////
// assuming all is good, render the widget //
/////////////////////////////////////////////
return (<Box component="span" sx={{"& .widget": {padding: "0 !important", display: "inline-block"}}}>
<DashboardWidgets key={`field:${field.name}`} widgetMetaDataList={[widgetMetaData]} initialWidgetDataList={[widgetData]} omitWrappingGridContainer={true} omitPaddingOnWidget={true} screen="recordView" />
</Box>);
}
+35 -12
View File
@@ -19,16 +19,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QException} from "@qrunio/qqq-frontend-core/lib/exceptions/QException";
import {Capability} from "@qrunio/qqq-frontend-core/lib/model/metaData/Capability";
import {QFieldMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QFieldMetaData";
import {QInstance} from "@qrunio/qqq-frontend-core/lib/model/metaData/QInstance";
import {QProcessMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QProcessMetaData";
import {QTableMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableMetaData";
import {QTableSection} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableSection";
import {QTableVariant} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableVariant";
import {QRecord} from "@qrunio/qqq-frontend-core/lib/model/QRecord";
import {QueryJoin} from "@qrunio/qqq-frontend-core/lib/model/query/QueryJoin";
import {Alert, Typography} from "@mui/material";
import Avatar from "@mui/material/Avatar";
import Box from "@mui/material/Box";
@@ -48,6 +38,17 @@ import MenuItem from "@mui/material/MenuItem";
import Modal from "@mui/material/Modal";
import Tooltip from "@mui/material/Tooltip/Tooltip";
import {SxProps} from "@mui/system";
import {QException} from "@qrunio/qqq-frontend-core/lib/exceptions/QException";
import {AdornmentType} from "@qrunio/qqq-frontend-core/lib/model/metaData/AdornmentType";
import {Capability} from "@qrunio/qqq-frontend-core/lib/model/metaData/Capability";
import {QFieldMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QFieldMetaData";
import {QInstance} from "@qrunio/qqq-frontend-core/lib/model/metaData/QInstance";
import {QProcessMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QProcessMetaData";
import {QTableMetaData} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableMetaData";
import {QTableSection} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableSection";
import {QTableVariant} from "@qrunio/qqq-frontend-core/lib/model/metaData/QTableVariant";
import {QRecord} from "@qrunio/qqq-frontend-core/lib/model/QRecord";
import {QueryJoin} from "@qrunio/qqq-frontend-core/lib/model/query/QueryJoin";
import QContext from "QContext";
import colors from "qqq/assets/theme/base/colors";
import AuditBody from "qqq/components/audits/AuditBody";
@@ -61,6 +62,7 @@ import ShareModal from "qqq/components/sharing/ShareModal";
import DashboardWidgets from "qqq/components/widgets/DashboardWidgets";
import BaseLayout from "qqq/layouts/BaseLayout";
import ProcessRun from "qqq/pages/processes/ProcessRun";
import {FieldValueAsWidget} from "qqq/pages/records/view/FieldValueAsWidget";
import HistoryUtils from "qqq/utils/HistoryUtils";
import HtmlUtils from "qqq/utils/HtmlUtils";
import Client from "qqq/utils/qqq/Client";
@@ -100,6 +102,14 @@ export function renderSectionOfFields(key: string, fieldNames: string[], tableMe
{
let [field, tableForField] = tableMetaData ? TableUtils.getFieldAndTable(tableMetaData, fieldName) : fieldMap ? [fieldMap[fieldName], null] : [null, null];
if(field == null)
{
if(tableMetaData?.virtualFields?.has(fieldName))
{
field = tableMetaData.virtualFields.get(fieldName);
}
}
if (field != null)
{
let label = field.label;
@@ -111,6 +121,13 @@ export function renderSectionOfFields(key: string, fieldNames: string[], tableMe
const labelElement = <Typography variant="button" textTransform="none" fontWeight="bold" pr={1} color="rgb(52, 71, 103)" sx={{cursor: "default", ...(styleOverrides?.label ?? {})}}>{label}:</Typography>;
if(field.hasAdornment(AdornmentType.WIDGET))
{
return (<Grid item key={fieldName} lg={gridColumns} flexDirection="column" pr={2}>
<FieldValueAsWidget field={field} record={record} />
</Grid>);
}
return (
<Grid item key={fieldName} lg={gridColumns} flexDirection="column" pr={2}>
<>
@@ -594,7 +611,7 @@ function RecordView({table, record: overrideRecord, launchProcess}: Props): JSX.
/////////////////////////////////////////////////
// define the sections, e.g., for the left-bar //
/////////////////////////////////////////////////
const tableSections = TableUtils.getSectionsForRecordSidebar(tableMetaData);
const tableSections = TableUtils.getSectionsForRecordSidebar(tableMetaData, null, undefined, "RECORD_VIEW");
setTableSections(tableSections);
////////////////////////////////////////////////////
@@ -604,7 +621,13 @@ function RecordView({table, record: overrideRecord, launchProcess}: Props): JSX.
const nonT1TableSections = [];
for (let i = 0; i < tableSections.length; i++)
{
const section = tableSections[i];
let section = tableSections[i];
if(section.alternatives?.has("RECORD_VIEW"))
{
section = section.alternatives.get("RECORD_VIEW")
}
if (section.isHidden)
{
continue;
+9 -3
View File
@@ -44,7 +44,7 @@ class TableUtils
** By default sections w/ widget names are excluded -- but -- to include them,
** provide the metaData plus list of allowedWidgetTypes.
*******************************************************************************/
public static getSectionsForRecordSidebar(tableMetaData: QTableMetaData, allowedFieldNames: any = null, additionalInclusionPredicate?: (section: QTableSection) => boolean): QTableSection[]
public static getSectionsForRecordSidebar(tableMetaData: QTableMetaData, allowedFieldNames: any = null, additionalInclusionPredicate?: (section: QTableSection) => boolean, alternativeType?: string): QTableSection[]
{
/////////////////////////////////////////////////////////////////
// if the table has sections, then filter them and return some //
@@ -72,7 +72,12 @@ class TableUtils
const allowedSections: QTableSection[] = [];
for (let i = 0; i < tableMetaData.sections.length; i++)
{
const section = tableMetaData.sections[i];
let section = tableMetaData.sections[i];
if(alternativeType && section.alternatives?.has(alternativeType))
{
section = section.alternatives.get(alternativeType);
}
let includeSection = false;
for (let j = 0; j < section.fieldNames?.length; j++)
@@ -101,8 +106,9 @@ class TableUtils
////////////////////////////////////////////////////////////////
// if there are no filters to apply, then return all sections //
// (potentially mapped to an alternative, by the type) //
////////////////////////////////////////////////////////////////
return (tableMetaData.sections);
return (tableMetaData.sections.map((section) => section.alternatives?.get(alternativeType) ?? section));
}
///////////////////////////////////////////////////////////////////////////////////////////////
@@ -23,9 +23,12 @@ package com.kingsrook.qqq.frontend.materialdashboard.seleniumwithqapplication.te
import java.util.List;
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizerInterface;
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizers;
import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer;
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryOrGetInputInterface;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput;
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput;
@@ -39,8 +42,10 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType;
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QVirtualFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSectionAlternativeType;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier;
import com.kingsrook.qqq.frontend.materialdashboard.junit.TestUtils;
@@ -85,8 +90,11 @@ public class FilterWidgetOnFieldIT extends QBaseSeleniumWithQApplicationTest
.withFieldAdornment(new FieldAdornment(AdornmentType.WIDGET)
.withValue(AdornmentType.WidgetValues.WIDGET_NAME, widget.getName())))
.withSection(new QFieldSection("identity", new QIcon(), Tier.T1, List.of("id", "name")))
.withSection(new QFieldSection("filter", new QIcon(), Tier.T2, List.of("filterJSON")))
.withPrimaryKeyField("id");
.withSection(new QFieldSection("filter", new QIcon(), Tier.T2, List.of("filterJSON"))
.withAlternative(QFieldSectionAlternativeType.RECORD_VIEW, (s) -> s.setFieldNames(List.of("filterVirtual"))))
.withVirtualField(new QVirtualFieldMetaData("filterVirtual", QFieldType.STRING).withLabel("Person Filter"))
.withPrimaryKeyField("id")
.withCustomizer(TableCustomizers.POST_QUERY_RECORD, new QCodeReference(TableCustomizer.class));
qInstance.addTable(table);
PeopleAppProducer.addTableToGreetingsApp(qInstance, table.getName());
@@ -122,6 +130,25 @@ public class FilterWidgetOnFieldIT extends QBaseSeleniumWithQApplicationTest
/***************************************************************************
*
***************************************************************************/
public static class TableCustomizer implements TableCustomizerInterface
{
@Override
public List<QRecord> postQuery(QueryOrGetInputInterface queryInput, List<QRecord> records) throws QException
{
for(QRecord record : records)
{
record.setValue("filterVirtual", record.getValueString("filterJSON"));
}
return (records);
}
}
/*******************************************************************************
**
*******************************************************************************/
@@ -0,0 +1,207 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2024. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.frontend.materialdashboard.seleniumwithqapplication.tests;
import java.time.LocalDate;
import java.util.List;
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizerInterface;
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizers;
import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer;
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryOrGetInputInterface;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput;
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.CompositeWidgetData;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.blocks.base.BaseStyles;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.blocks.icon.IconBlockData;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.blocks.icon.IconValues;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.blocks.text.TextBlockData;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.blocks.text.TextValues;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType;
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QVirtualFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSectionAlternativeType;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier;
import com.kingsrook.qqq.frontend.materialdashboard.seleniumwithqapplication.lib.QBaseSeleniumWithQApplicationTest;
import com.kingsrook.qqq.frontend.materialdashboard.seleniumwithqapplication.metadata.MemoryBackendProducer;
import com.kingsrook.qqq.frontend.materialdashboard.seleniumwithqapplication.metadata.PeopleAppProducer;
import org.junit.jupiter.api.Test;
/*******************************************************************************
* Tests for some new features being added together:
* 1) virtual field on a table
* 2) used in an alternative section
* 3) rendered as a widget on the view screen
*******************************************************************************/
public class VirtualFieldInAlternativeSectionViewedAsWidgetIT extends QBaseSeleniumWithQApplicationTest
{
private static final String TABLE_NAME = "tableWithVirtualFieldInAlternativeSectionViewedAsWidget";
/***************************************************************************
*
***************************************************************************/
@Override
protected void customizeQInstance(QInstance qInstance) throws QException
{
QWidgetMetaData widget = new QWidgetMetaData()
.withName("genericCompositeWidget")
.withType(WidgetType.COMPOSITE.getType())
.withCodeReference(new QCodeReference(NoopWidgetRenderer.class));
qInstance.addWidget(widget);
QTableMetaData table = new QTableMetaData()
.withName(TABLE_NAME)
.withBackendName(MemoryBackendProducer.NAME)
.withRecordLabelFormatAndFields("%s", "name")
.withField(new QFieldMetaData("id", QFieldType.INTEGER).withIsEditable(false))
.withField(new QFieldMetaData("name", QFieldType.STRING).withIsRequired(true))
.withField(new QFieldMetaData("type", QFieldType.STRING))
.withField(new QFieldMetaData("homeTown", QFieldType.STRING))
.withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME).withIsEditable(false))
.withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME).withIsEditable(false))
.withSection(new QFieldSection("identity", new QIcon(), Tier.T1, List.of("id", "name", "homeTown"))
.withAlternative(QFieldSectionAlternativeType.RECORD_VIEW, (s) -> s.setFieldNames(List.of("mergedField", "homeTown"))))
.withSection(new QFieldSection("hidden", new QIcon(), Tier.T2, List.of("type"))
.withAlternative(QFieldSectionAlternativeType.RECORD_VIEW, (s) -> s.setIsHidden(true)))
.withSection(new QFieldSection("dates", new QIcon(), Tier.T3, List.of("createDate", "modifyDate"))
.withAlternative(QFieldSectionAlternativeType.RECORD_VIEW, (s) -> s.getFieldNames().add(0, "currentDate")))
.withPrimaryKeyField("id");
table.withVirtualField(new QVirtualFieldMetaData("mergedField", QFieldType.STRING)
.withFieldAdornment(new FieldAdornment().withType(AdornmentType.WIDGET)
.withValue(AdornmentType.WidgetValues.WIDGET_NAME, widget.getName())));
table.withVirtualField(new QVirtualFieldMetaData("currentDate", QFieldType.DATE));
table.withCustomizer(TableCustomizers.POST_QUERY_RECORD, new QCodeReference(TableCustomizer.class));
qInstance.addTable(table);
PeopleAppProducer.addTableToGreetingsApp(qInstance, table.getName());
}
/***************************************************************************
*
***************************************************************************/
@Override
protected void setupTestData() throws QException
{
new InsertAction().execute(new InsertInput(TABLE_NAME).withRecord(new QRecord()
.withValue("id", 1)
.withValue("name", "Homer")
.withValue("type", "Cartoon")
.withValue("homeTown", "Springville")
));
}
/***************************************************************************
*
***************************************************************************/
public static class NoopWidgetRenderer extends AbstractWidgetRenderer
{
/***************************************************************************
**
***************************************************************************/
@Override
public RenderWidgetOutput render(RenderWidgetInput input) throws QException
{
return null;
}
}
/***************************************************************************
*
***************************************************************************/
public static class TableCustomizer implements TableCustomizerInterface
{
/***************************************************************************
*
***************************************************************************/
@Override
public List<QRecord> postQuery(QueryOrGetInputInterface queryInput, List<QRecord> records)
{
for(QRecord record : records)
{
CompositeWidgetData widgetData = new CompositeWidgetData().withLayout(CompositeWidgetData.Layout.FLEX_ROW_WRAPPED)
.withStyles(new BaseStyles().withPadding(BaseStyles.Directional.ofY("8")))
.withBlocks(List.of(
new IconBlockData().withValues(new IconValues().withName("gavel")),
new TextBlockData().withValues(new TextValues(record.getValueString("id") + "|" + record.getValueString("name") + "|" + record.getValueString("type")))
));
record.setValue("mergedField", widgetData);
record.setValue("currentDate", LocalDate.parse("2025-12-09"));
}
return records;
}
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void test()
{
qSeleniumLib.gotoAndWaitForBreadcrumbHeaderToContain("/peopleApp/greetingsApp/" + TABLE_NAME + "/1", "Homer");
qSeleniumLib.waitForSelectorContaining(".material-icons-round", "gavel");
qSeleniumLib.waitForSelectorContaining(".compositeWidget", "1|Homer|Cartoon");
qSeleniumLib.waitForSelectorContaining(".sidebar-section", "Identity");
qSeleniumLib.waitForSelectorContainingToNotExist(".sidebar-section", "Hidden");
qSeleniumLib.waitForSelectorContaining(".sidebar-section", "Dates");
qSeleniumLib.waitForSelectorContainingToNotExist("h6", "Hidden");
qSeleniumLib.waitForSelectorContaining("h6", "Dates");
qfmdSeleniumLib.waitForViewScreenFieldValue("Home Town", "Springville");
qfmdSeleniumLib.waitForViewScreenFieldValue("Current Date", "2025-12-09");
// qSeleniumLib.waitForever();
}
}