FIN-54: Upload CSV, update material icons (#373)

This commit is contained in:
Rinat Arsaev 2024-07-08 18:23:18 +05:00 committed by GitHub
parent 885d25f2be
commit 043feb63bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 530 additions and 575 deletions

View File

@ -2,5 +2,5 @@
"$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",
"version": "0.2",
"import": "./node_modules/@vality/cspell-config/cspell.config.js",
"words": ["submain", "papaparse", "msgpack", "termsets", "rreserve"]
"words": ["submain", "papaparse", "msgpack", "termsets", "rreserve", "wght", "opsz"]
}

567
package-lock.json generated
View File

@ -8,17 +8,17 @@
"name": "control-center",
"version": "0.0.0",
"dependencies": {
"@angular/animations": "18.0.3",
"@angular/cdk": "18.0.3",
"@angular/common": "18.0.3",
"@angular/compiler": "18.0.3",
"@angular/core": "18.0.3",
"@angular/forms": "18.0.3",
"@angular/material": "18.0.3",
"@angular/platform-browser": "18.0.3",
"@angular/platform-browser-dynamic": "18.0.3",
"@angular/platform-server": "18.0.3",
"@angular/router": "18.0.3",
"@angular/animations": "18.0.5",
"@angular/cdk": "18.0.5",
"@angular/common": "18.0.5",
"@angular/compiler": "18.0.5",
"@angular/core": "18.0.5",
"@angular/forms": "18.0.5",
"@angular/material": "18.0.5",
"@angular/platform-browser": "18.0.5",
"@angular/platform-browser-dynamic": "18.0.5",
"@angular/platform-server": "18.0.5",
"@angular/router": "18.0.5",
"@ngneat/input-mask": "6.0.0",
"@vality/deanonimus-proto": "2.0.1-2a02d87.0",
"@vality/domain-proto": "2.0.1-b04aba8.0",
@ -26,7 +26,7 @@
"@vality/fistful-proto": "2.0.1-88e69a5.0",
"@vality/machinegun-proto": "1.0.0",
"@vality/magista-proto": "2.0.2-28d11b9.0",
"@vality/ng-core": "18.0.1-pr-63-9e315a6.0",
"@vality/ng-core": "18.1.0",
"@vality/ng-thrift": "18.0.1-pr-12-d099f93.0",
"@vality/payout-manager-proto": "2.0.1-eb4091a.0",
"@vality/repairer-proto": "2.0.2-07b73e9.0",
@ -49,18 +49,18 @@
"zone.js": "0.14.2"
},
"devDependencies": {
"@angular-devkit/build-angular": "18.0.4",
"@angular-devkit/build-angular": "18.0.6",
"@angular-eslint/builder": "18.0.1",
"@angular-eslint/schematics": "18.0.1",
"@angular/cli": "18.0.4",
"@angular/compiler-cli": "18.0.3",
"@angular/cli": "18.0.6",
"@angular/compiler-cli": "18.0.5",
"@types/inputmask": "5.0.3",
"@types/jasmine": "4.0.3",
"@types/jwt-decode": "2.2.1",
"@types/lodash-es": "^4.17.12",
"@types/papaparse": "^5.3.14",
"@vality/cspell-config": "^8.0.1-pr-57-482a037.0",
"@vality/eslint-config-ng": "18.0.1-pr-63-e72dd8e.0",
"@vality/eslint-config-ng": "18.1.0",
"@vality/prettier-config": "3.1.0",
"cross-env": "^7.0.3",
"cspell": "^8.3.2",
@ -101,12 +101,12 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.1800.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.4.tgz",
"integrity": "sha512-82TKhYnSO8aGIBo5TxPtyUQnZFcbV+qB2bIIYOAKsJgxAVxLeFD6QA6gTmHOZPXw5pBEPUO/+PUwq+Uk5xesgw==",
"version": "0.1800.6",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.6.tgz",
"integrity": "sha512-VJ08XM9XR8d3ldXEMIeaiamBSvQqX+ucIKw73zubP37yFVAuvXriDOFskcouVUT0RxWXIZVcNxrgp2t3FE4F6w==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "18.0.4",
"@angular-devkit/core": "18.0.6",
"rxjs": "7.8.1"
},
"engines": {
@ -116,16 +116,16 @@
}
},
"node_modules/@angular-devkit/build-angular": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.0.4.tgz",
"integrity": "sha512-lFu1NDEUPIUxY+CmZJ3JspqVZDesrvdae5RbqQXCl87RfSy+ZDIa7rOtQxyBQtt2BuQIB9pWQSzCMii5kTHd6w==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.0.6.tgz",
"integrity": "sha512-87ynzPHHYr+iL3GsBgJWVlChMuubQgiXYWf2JLXRLNGduSOdoa18vxT1jU11b6C9G+avDSnMbtq+sk841pT1kg==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.1800.4",
"@angular-devkit/build-webpack": "0.1800.4",
"@angular-devkit/core": "18.0.4",
"@angular/build": "18.0.4",
"@angular-devkit/architect": "0.1800.6",
"@angular-devkit/build-webpack": "0.1800.6",
"@angular-devkit/core": "18.0.6",
"@angular/build": "18.0.6",
"@babel/core": "7.24.5",
"@babel/generator": "7.24.5",
"@babel/helper-annotate-as-pure": "7.22.5",
@ -136,12 +136,11 @@
"@babel/preset-env": "7.24.5",
"@babel/runtime": "7.24.5",
"@discoveryjs/json-ext": "0.5.7",
"@ngtools/webpack": "18.0.4",
"@ngtools/webpack": "18.0.6",
"@vitejs/plugin-basic-ssl": "1.1.0",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.19",
"babel-loader": "9.1.3",
"babel-plugin-istanbul": "6.1.1",
"browserslist": "^4.21.5",
"copy-webpack-plugin": "11.0.0",
"critters": "0.0.22",
@ -151,6 +150,7 @@
"http-proxy-middleware": "3.0.0",
"https-proxy-agent": "7.0.4",
"inquirer": "9.2.22",
"istanbul-lib-instrument": "6.0.2",
"jsonc-parser": "3.2.1",
"karma-source-map-support": "1.4.0",
"less": "4.2.0",
@ -315,12 +315,12 @@
"dev": true
},
"node_modules/@angular-devkit/build-webpack": {
"version": "0.1800.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1800.4.tgz",
"integrity": "sha512-EtWyWH3Hb7Rh8u0Jb4cWJKRxlqiUo4qhHKjU+62E8XplWlajbuld3ltL50a3t8lkZQYYgl7nPt53E5kM/zFVrw==",
"version": "0.1800.6",
"resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1800.6.tgz",
"integrity": "sha512-hIQ4FtcxsNVEHlKZVFIfFiFKNNxEdacS/Nsy/YJ0AU6EOkUd6AOVsc539GniJQOk4RBNKS9wOlJBtF/2g1sjhQ==",
"dev": true,
"dependencies": {
"@angular-devkit/architect": "0.1800.4",
"@angular-devkit/architect": "0.1800.6",
"rxjs": "7.8.1"
},
"engines": {
@ -334,9 +334,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.4.tgz",
"integrity": "sha512-8vYvJ5FF2NjFUia00hv8KWakOjOZ+09PbnNqd+lntJBekIg1lHDOF/vNMlVHtU5LiE1aNi9P/69/VXTckPfU9g==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.6.tgz",
"integrity": "sha512-07U0S2fpUBjkg4k6uAEQQHSFfearyHGrONlgkxAlk7HWM5jfHp/8D2+ui1OFZgXpSAHF2C5gULbze/2o9ZNgag==",
"dev": true,
"dependencies": {
"ajv": "8.13.0",
@ -396,12 +396,12 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.4.tgz",
"integrity": "sha512-hCHmuu/Z1teOQPx1AMJa/gcK6depk+XgU5dIpEvflC+ApW3hglNe2QKaqajDZ+34s+PKAVWa86M8IOV7o/mHuA==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.6.tgz",
"integrity": "sha512-lzjPp8qWV4p3reyKZ2QRF7rQYc17WMCR61vKldQJBuJrS30yx87x22ASn4BCAo7kKKRv8gXJmoXjCPDFlcfRsw==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "18.0.4",
"@angular-devkit/core": "18.0.6",
"jsonc-parser": "3.2.1",
"magic-string": "0.30.10",
"ora": "5.4.1",
@ -544,9 +544,9 @@
}
},
"node_modules/@angular/animations": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.0.3.tgz",
"integrity": "sha512-Wlll6y7euIXYsOHpTh0hvVTBs7lVnbKDHiyd4Dz7kAMSeE2zyQo6OcRN+FFH3GH9BUi5UooAICNX8dJDfps6Mw==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.0.5.tgz",
"integrity": "sha512-RYwlS+4I33beAWdzFFmaDPqXZN+r66qPzzMOk9LQguwF76eBJbykHniODalSLvjrY6Iz7CULavByYNpzq2TT7A==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -554,17 +554,17 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "18.0.3"
"@angular/core": "18.0.5"
}
},
"node_modules/@angular/build": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-18.0.4.tgz",
"integrity": "sha512-70HQQnbCOXFT5F3ROyWNNfS9A63Fzts5ANJKJY1MJLrn+dgNEG7jdIWjTtvohL3RZz97rlzSq3qRZnfxqf1lsQ==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-18.0.6.tgz",
"integrity": "sha512-W6S1sx00D4pd7qDIyzPMNFmw8d783+/Aknl+2cUrYlJqw0Oan1Bt6mXVg48Jwxr0hVsovoNZXSRFXXI5hvW8ZA==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.1800.4",
"@angular-devkit/architect": "0.1800.6",
"@babel/core": "7.24.5",
"@babel/helper-annotate-as-pure": "7.22.5",
"@babel/helper-split-export-declaration": "7.24.5",
@ -683,9 +683,9 @@
}
},
"node_modules/@angular/cdk": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.0.3.tgz",
"integrity": "sha512-F6kXAoIWUbvhvbSGnMxrKJZsI7rhGKDXVFFf9m+ZQAbqboSyDbbszux7Em4CEh27LaXYNFltUcKdCQ3hdp7Kig==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.0.5.tgz",
"integrity": "sha512-Yf94Udxip8xjVIJlxwh80h6fUpX5JFcBv3FCFer7DU/YzWdoTL+BTIYF8og+NjlDRt1nSbTxdyU2LVI0rTVkpg==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -699,15 +699,15 @@
}
},
"node_modules/@angular/cli": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.4.tgz",
"integrity": "sha512-i7DLVIc4HN0CFZZKbEeVeQSADRG1Dt2CwXh/wTUzglRLu/tE7Q+WMrqJ2+lGTT2edZp2KKysM4Gxp+ATAzP8AQ==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.6.tgz",
"integrity": "sha512-T0ii60zVqBzxtC4jusKkR5YOdubP5+n9SPd8gm9Dat4jUeePc5O5+6qmjpFXZlibxLNSVIm89hLBb7/rMJIkIg==",
"dev": true,
"dependencies": {
"@angular-devkit/architect": "0.1800.4",
"@angular-devkit/core": "18.0.4",
"@angular-devkit/schematics": "18.0.4",
"@schematics/angular": "18.0.4",
"@angular-devkit/architect": "0.1800.6",
"@angular-devkit/core": "18.0.6",
"@angular-devkit/schematics": "18.0.6",
"@schematics/angular": "18.0.6",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"ini": "4.1.2",
@ -747,9 +747,9 @@
"dev": true
},
"node_modules/@angular/common": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.0.3.tgz",
"integrity": "sha512-lmT9QbWHduqzpsB0osQFHeSwvQB1iUeNwTVUyMtcs6i46l4qOPtAt2/9DvHUWEUp01EBDxyi385ZI3vD+FHH/w==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.0.5.tgz",
"integrity": "sha512-yItVQSu+Rx8gthWJDTOHwbzItY8/lqmmmYA1RMex0u3GkJoX3/3TZSGXbbBXl8GH8vmQOfp9yj3C02JmlwldRg==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -757,14 +757,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "18.0.3",
"@angular/core": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.0.3.tgz",
"integrity": "sha512-wrXxgBsZX4yTrj/oZ8PDGmvhqj9S2TZfcuivaUitprNC2uBWTVb1UcOS45Qw9YlLB0sYa2AmBudICDqYpb8lfw==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.0.5.tgz",
"integrity": "sha512-U1/qjNDjxMukXwQrJZjmr87KVxQmHbD7fxVlg0+qafHLe+YDuCtyOfQSGEZrWhwktxvAYZbl3FK+m3Hnk/D3Nw==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -772,7 +772,7 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "18.0.3"
"@angular/core": "18.0.5"
},
"peerDependenciesMeta": {
"@angular/core": {
@ -781,9 +781,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.0.3.tgz",
"integrity": "sha512-mxwQEeP94YBM6C9A2YfkV7ug1sHgh0fU/TSBpQcm5ni4cZiVPu6q/+Ft7hyFTKe2p3tKQme33+xVjsWhtOCx0A==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.0.5.tgz",
"integrity": "sha512-aFKDDTsRmc691EkNRj9OkrKNXDOaHdXB42MyUrj3WwJIJFMnSY/UDf6h+CRVF0U+CITszFyWhmeHQRA/3mJWNg==",
"dev": true,
"dependencies": {
"@babel/core": "7.24.7",
@ -804,14 +804,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/compiler": "18.0.3",
"@angular/compiler": "18.0.5",
"typescript": ">=5.4 <5.5"
}
},
"node_modules/@angular/core": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.0.3.tgz",
"integrity": "sha512-376hijhEqNpeA+qKncpVTIaZXRdBT6RctEBnFhJ2l57aHPH5S3oaSBQu1k3TEi07FlKOD4XF1+NzX9dvdup1eg==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.0.5.tgz",
"integrity": "sha512-0UuL+aMMWGYksz09YBsiHq1li7GmL8obB3IC3T5MwDqnn7FGRUBfBUOZEkM6B+pwgg+RAtNdJkbCfbh1z74bFQ==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -824,9 +824,9 @@
}
},
"node_modules/@angular/forms": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.0.3.tgz",
"integrity": "sha512-+CjDiooUi5FkTP3YQmdO8YRbjZicgLGZonvCdz3mSucLrTY6w3oBocNs6+Kc7fLuO1NKSkFmAfYApBwK3fKBMg==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.0.5.tgz",
"integrity": "sha512-nO7bN+nO2/czgKSvPx6ewqpfb8xXOyns06uovWpAXSH4jYoiZ6CHTHhOKrOL/3SRkhUV9u+EUXTTAOSBkS+OBA==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -834,16 +834,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "18.0.3",
"@angular/core": "18.0.3",
"@angular/platform-browser": "18.0.3",
"@angular/common": "18.0.5",
"@angular/core": "18.0.5",
"@angular/platform-browser": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/material": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-18.0.3.tgz",
"integrity": "sha512-VIlK+0CxreAkDmr05TKelTr11I7yUtGPwRTFaWfQtXNkYEwGE1iuZGz3Iz8otxvHsTLC74Er4vMSYndwJvMyjQ==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-18.0.5.tgz",
"integrity": "sha512-8xCyEs9yT7tp7vSBcVww+Adt2ue0oFG2yfISYRNweg0RXC9qk64DDhcIyYhn92xLSnFH1q6mPcjrNw8RmhA10A==",
"dependencies": {
"@material/animation": "15.0.0-canary.7f224ddd4.0",
"@material/auto-init": "15.0.0-canary.7f224ddd4.0",
@ -897,7 +897,7 @@
},
"peerDependencies": {
"@angular/animations": "^18.0.0 || ^19.0.0",
"@angular/cdk": "18.0.3",
"@angular/cdk": "18.0.5",
"@angular/common": "^18.0.0 || ^19.0.0",
"@angular/core": "^18.0.0 || ^19.0.0",
"@angular/forms": "^18.0.0 || ^19.0.0",
@ -906,22 +906,22 @@
}
},
"node_modules/@angular/material-date-fns-adapter": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-18.0.3.tgz",
"integrity": "sha512-1YkwvHv6dW3COHwYWZXSDg8cpzWHbExv4tegmI/TIoAn/W6kqSwCrThylyi+Ar/SUGb2GVFlZIspYnvRUG93aA==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/material-date-fns-adapter/-/material-date-fns-adapter-18.0.5.tgz",
"integrity": "sha512-ROjFILMRUnis8b2Z9RUI7xA3mvh/eCWJWiuK28ZOZtN4pceH08flmhIBt4MyUcY3jq/Etx+O8OAvHoArN9oyJg==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/core": "^18.0.0 || ^19.0.0",
"@angular/material": "18.0.3",
"@angular/material": "18.0.5",
"date-fns": ">2.20.0 <4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.0.3.tgz",
"integrity": "sha512-1fl/oJOca8BLxLxN0EjwxQZ3xzn3PCCN96ytM54bjdEMiELz+0AcQe5GNKcVjXlwMkibRLl1BP5GIdvnQYqJRA==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.0.5.tgz",
"integrity": "sha512-hBKaGz7dhsjNhD0aWB8G2/YZQ/MaBhzFIQSAZMPs2ccAqH1Jx772/Y11k57seA3VaPpnL8WZ1apOSJgALUJ//w==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -929,9 +929,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/animations": "18.0.3",
"@angular/common": "18.0.3",
"@angular/core": "18.0.3"
"@angular/animations": "18.0.5",
"@angular/common": "18.0.5",
"@angular/core": "18.0.5"
},
"peerDependenciesMeta": {
"@angular/animations": {
@ -940,9 +940,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.0.3.tgz",
"integrity": "sha512-+kHMn7P552YKk1gkVQNO1QXzHVaIeFiVa1rV1MNvX4DvumKT3puknx1SzcmtxZTX+9ee22OuPuyLNSAKREDAQQ==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.0.5.tgz",
"integrity": "sha512-i8CXojKcjsKzD2JR2clIisqavlHCW1jw+F2hJVrf/JR9iu6kVpGpZOqb3yYHoQCsPa7hUzQnn0ewYwBvlWsDmw==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -950,16 +950,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "18.0.3",
"@angular/compiler": "18.0.3",
"@angular/core": "18.0.3",
"@angular/platform-browser": "18.0.3"
"@angular/common": "18.0.5",
"@angular/compiler": "18.0.5",
"@angular/core": "18.0.5",
"@angular/platform-browser": "18.0.5"
}
},
"node_modules/@angular/platform-server": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-18.0.3.tgz",
"integrity": "sha512-V+k0twHuZ+lzXFpKrKTSCmK1/jF0Ad8QoQ+5DfEI9iBvwPc+kn74bBy7bIdhGRK7gDYNGEcelDQTw3km4UGrWg==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-18.0.5.tgz",
"integrity": "sha512-CaUIJGIED3e5+Wk2TElur0otkaFxigUNtlKowHh8wB/Dey7cuYHsiaLbkeYLGFfmNGanypb7SmdA8WtzAi3QbA==",
"dependencies": {
"tslib": "^2.3.0",
"xhr2": "^0.2.0"
@ -968,17 +968,17 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/animations": "18.0.3",
"@angular/common": "18.0.3",
"@angular/compiler": "18.0.3",
"@angular/core": "18.0.3",
"@angular/platform-browser": "18.0.3"
"@angular/animations": "18.0.5",
"@angular/common": "18.0.5",
"@angular/compiler": "18.0.5",
"@angular/core": "18.0.5",
"@angular/platform-browser": "18.0.5"
}
},
"node_modules/@angular/router": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-18.0.3.tgz",
"integrity": "sha512-/cglLev0USxUNMc4M+EBFGrqw1EpKq87LUJL3+0Ztr012sVSeOU38ad41fs6pPcMBePBDZIw7KmSXypvUJJFMA==",
"version": "18.0.5",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-18.0.5.tgz",
"integrity": "sha512-GmdzD5FZYPKCGP6mV3AZraAU6czfGcjjCym6mIsdJr3DyMwnQSwaaHAu8qlQbPDVfsP+gKVSPh1JxI1lzzarLA==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -986,9 +986,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "18.0.3",
"@angular/core": "18.0.3",
"@angular/platform-browser": "18.0.3",
"@angular/common": "18.0.5",
"@angular/core": "18.0.5",
"@angular/platform-browser": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@ -4001,22 +4001,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
@ -4135,9 +4119,9 @@
}
},
"node_modules/@jsonjoy.com/util": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz",
"integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz",
"integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==",
"dev": true,
"engines": {
"node": ">=10.0"
@ -5077,9 +5061,9 @@
]
},
"node_modules/@ng-matero/extensions": {
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@ng-matero/extensions/-/extensions-18.0.1.tgz",
"integrity": "sha512-F4rbFmIHu3fGeYcnwjfCqxYCmeTC5BF2lZQOwf2RyKqj+AySFXAzMuU4g6A83/vpOx5NA6AUPX36k8Vaj/Lvdw==",
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@ng-matero/extensions/-/extensions-18.0.3.tgz",
"integrity": "sha512-7V5O4kId+W8ZePAWkEmk598OotMXl4eIEXW2wafzbPUYSmwTe0tWvlg3A7Ue+fj5MP9cem1u/thgKuUSmO3OSQ==",
"dependencies": {
"@ng-select/ng-select": "^13.0.0",
"ngx-color": "^9.0.0",
@ -5100,9 +5084,9 @@
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
},
"node_modules/@ng-select/ng-select": {
"version": "13.2.0",
"resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-13.2.0.tgz",
"integrity": "sha512-Oh4UaUvYJa6D+G4nEcdzqOgRP2TKqwwRpQBVVyLMUgzebSY3Cw9aJXqudqJ/EYiK3Bz+4uKJXPZIrYgNqqx02g==",
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-13.4.1.tgz",
"integrity": "sha512-b8ITHwOlG1boPBbhKRLNvhXBW85OrRgo8E7fgdO0B6iwppTGD0+wSCepf4gh4z7rE/StYsrjwP+Unq0OFOZEwA==",
"dependencies": {
"tslib": "^2.3.1"
},
@ -5129,9 +5113,9 @@
}
},
"node_modules/@ngtools/webpack": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.0.4.tgz",
"integrity": "sha512-eWQkAuHEnLme01Ey4Z0FoG6upJHYhnJfsCTBnyEB2LTfdyBUk+PC0gwPXInK8oltWjFfiMnCwxrUQvQsvPW7Hg==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.0.6.tgz",
"integrity": "sha512-chSRbPpnqTThURQqUvWAgEGkLcn5TQnUQPD1HBf4WcoO/OkaK4Q1Sa8FrEllkC6/Dlyj7myi8rskQz+V8K7GSg==",
"dev": true,
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0",
@ -5342,24 +5326,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@npmcli/package-json/node_modules/jackspeak": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
@ -5915,60 +5881,60 @@
]
},
"node_modules/@s-libs/js-core": {
"version": "18.0.0-next.0",
"resolved": "https://registry.npmjs.org/@s-libs/js-core/-/js-core-18.0.0-next.0.tgz",
"integrity": "sha512-7FqR0F6a8GaHkw7Vtw+vS88chtPdab1s9aMSisXUDrRqfGtBJ7rQlwR03Fqd1ycGRVCVP6xhBbvnnY7EQ0pyzQ==",
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/@s-libs/js-core/-/js-core-18.0.0.tgz",
"integrity": "sha512-pAAf/hqf9AzATl4dPVsjpeS7uq/qC/YybEJg7RogVA0Ly0v48aWlpsLlvG/nsR7hIiOXvz/P/6ZTKp9ZfDC2Uw==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@s-libs/micro-dash": "^18.0.0-next.0"
"@s-libs/micro-dash": "^18.0.0"
}
},
"node_modules/@s-libs/micro-dash": {
"version": "18.0.0-next.0",
"resolved": "https://registry.npmjs.org/@s-libs/micro-dash/-/micro-dash-18.0.0-next.0.tgz",
"integrity": "sha512-8O594B//7nFPmRqICfa5G7E2ebyH6w+ift7t5pe8ZwOAznTQhZbj/HNFuPI9ZhC0PQ+EixuDJIxUc9rmCjhi8A==",
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/@s-libs/micro-dash/-/micro-dash-18.0.0.tgz",
"integrity": "sha512-/EiBrhJIDVBI3DpWPaezO065VOQ/UUiLx3BLtkNx59S7T5AuYUxLp64fw3uR8Uk5qkIwQimhFMlvn/S1NkZanA==",
"dependencies": {
"tslib": "^2.3.0"
}
},
"node_modules/@s-libs/ng-core": {
"version": "18.0.0-next.0",
"resolved": "https://registry.npmjs.org/@s-libs/ng-core/-/ng-core-18.0.0-next.0.tgz",
"integrity": "sha512-yl0PUJ12uvVppISM5Uk0TUywdigMMDej67gbzuXrYxszVlw9Xf30MLGVO/y1TPYKe6DPhorZsPS1RWGG1ZuSbA==",
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/@s-libs/ng-core/-/ng-core-18.0.0.tgz",
"integrity": "sha512-KpiA8QdOTWWfg5pCi/StgjAMIzPm/2RMHR7/lL9QI769RauXj1DAQBzLRiHxxvG1udlz4S4QNGyTV4EFJwnHIw==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^18.0.0",
"@angular/core": "^18.0.0",
"@s-libs/js-core": "^18.0.0-next.0",
"@s-libs/micro-dash": "^18.0.0-next.0",
"@s-libs/rxjs-core": "^18.0.0-next.0"
"@s-libs/js-core": "^18.0.0",
"@s-libs/micro-dash": "^18.0.0",
"@s-libs/rxjs-core": "^18.0.0"
}
},
"node_modules/@s-libs/rxjs-core": {
"version": "18.0.0-next.0",
"resolved": "https://registry.npmjs.org/@s-libs/rxjs-core/-/rxjs-core-18.0.0-next.0.tgz",
"integrity": "sha512-7374PtArQMk32SG0Ra3LOdObhAiuSfPF3k4a4V5boI9ssJ6zdJ/wPws4kBUFchQ20j0+5xl0y6bBnrKd1R1Oww==",
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/@s-libs/rxjs-core/-/rxjs-core-18.0.0.tgz",
"integrity": "sha512-PcsHpYn+i709nvom4TvYZ67cNQ/eXF7zMVF5zUSzPOIuNf2V/PN3bMfuQYHlLXb95ArwBSa92Rxf7HuKLxjakw==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@s-libs/js-core": "^18.0.0-next.0",
"@s-libs/micro-dash": "^18.0.0-next.0",
"@s-libs/js-core": "^18.0.0",
"@s-libs/micro-dash": "^18.0.0",
"rxjs": "^7.8.0"
}
},
"node_modules/@schematics/angular": {
"version": "18.0.4",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.4.tgz",
"integrity": "sha512-fN4whuym9ZmcQFdTfwLZr4j+NcZ4LzbdLk8XYrYdxt1z8c9ujs5LqJYn0LYc3UWiYl7z2RVc9NOxzNrkiXdwlw==",
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.0.6.tgz",
"integrity": "sha512-SZ73nNhCengIOy3GCUbLL++GdpaQ5T9bh05OAdQJuUNtwz1ot8QoQjkcbumKIfTicwMiLxy+OR4sZN1VcUVYpQ==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "18.0.4",
"@angular-devkit/schematics": "18.0.4",
"@angular-devkit/core": "18.0.6",
"@angular-devkit/schematics": "18.0.6",
"jsonc-parser": "3.2.1"
},
"engines": {
@ -6207,9 +6173,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
"version": "4.19.3",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz",
"integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==",
"version": "4.19.5",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
"integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@ -6615,9 +6581,9 @@
"integrity": "sha512-LyOWbtkZIYpKXAtpFBbvQGxjh4kYv7pjLmoiyjvaPDar+JMAVsgT+eVrnT8/qotDqU0SFCumiqgX7cSU0bmSkQ=="
},
"node_modules/@vality/eslint-config-ng": {
"version": "18.0.1-pr-63-e72dd8e.0",
"resolved": "https://registry.npmjs.org/@vality/eslint-config-ng/-/eslint-config-ng-18.0.1-pr-63-e72dd8e.0.tgz",
"integrity": "sha512-F/kLouC/CnGQCc7S6MWz2+JYFJ5xbW3yCpKzuPN/iFkT4XXYMotaTlM4vHmps3PsY4fHETi6HneG/2b+9/5fuQ==",
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@vality/eslint-config-ng/-/eslint-config-ng-18.1.0.tgz",
"integrity": "sha512-ECD9nCa3uawPLEEFPtPw86CfkSFKxheVxw75yIBW27B1CTNbhXa6Zf1svxfTTFwX57IzpA3gfkcgZjzPL74gfA==",
"dev": true,
"dependencies": {
"@angular-eslint/eslint-plugin": "^18.0.1",
@ -6649,18 +6615,19 @@
"integrity": "sha512-BsDy5ejotfTtUlwuoX3kz+PYJ5NSTW6m5ZRGv+p5HaKXSjR7tserPdv0q133Wp4T+sg0ED0Qr9Peqsrn+9XlDQ=="
},
"node_modules/@vality/ng-core": {
"version": "18.0.1-pr-63-9e315a6.0",
"resolved": "https://registry.npmjs.org/@vality/ng-core/-/ng-core-18.0.1-pr-63-9e315a6.0.tgz",
"integrity": "sha512-0PSFUQE8lW86o9AsFN4P9rM+S7azRormO+ENp/w9HVlpM5stL8XSrG3ftjvXDEn7t4FvI5ty9eE+zI1KEu6DJA==",
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@vality/ng-core/-/ng-core-18.1.0.tgz",
"integrity": "sha512-N0bOmfezQxKnZO9peMhMxlmMrH0A3dGrNNpzYgLoxO8XVIxoVSc9QpaXsb7YwR3M3pwmCWDjqxYXVhGVjVBrFA==",
"dependencies": {
"@angular/material-date-fns-adapter": "^18.0.3",
"@ng-matero/extensions": "^18.0.1",
"@s-libs/js-core": "^18.0.0-next.0",
"@s-libs/micro-dash": "^18.0.0-next.0",
"@s-libs/ng-core": "^18.0.0-next.0",
"@s-libs/rxjs-core": "^18.0.0-next.0",
"@angular/material-date-fns-adapter": "^18.0.5",
"@ng-matero/extensions": "^18.0.3",
"@s-libs/js-core": "^18.0.0",
"@s-libs/micro-dash": "^18.0.0",
"@s-libs/ng-core": "^18.0.0",
"@s-libs/rxjs-core": "^18.0.0",
"dinero.js": "^2.0.0-alpha.14",
"fuse.js": "^7.0.0",
"papaparse": "^5.4.1",
"tslib": "^2.3.0"
},
"peerDependencies": {
@ -7633,22 +7600,6 @@
"webpack": ">=5"
}
},
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.4.11",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
@ -7980,24 +7931,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/cacache/node_modules/jackspeak": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/cacache/node_modules/lru-cache": {
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
@ -10913,19 +10846,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/find-up-simple": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
@ -11227,15 +11147,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/get-stdin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
@ -12543,28 +12454,19 @@
}
},
"node_modules/istanbul-lib-instrument": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
"integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
"@babel/core": "^7.23.9",
"@babel/parser": "^7.23.9",
"@istanbuljs/schema": "^0.1.3",
"istanbul-lib-coverage": "^3.2.0",
"semver": "^6.3.0"
"semver": "^7.5.4"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
"node": ">=10"
}
},
"node_modules/istanbul-lib-report": {
@ -12692,6 +12594,24 @@
"node": ">=8"
}
},
"node_modules/jackspeak": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/jake": {
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
@ -13244,9 +13164,9 @@
}
},
"node_modules/launch-editor": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.7.0.tgz",
"integrity": "sha512-KAc66u6LxWL8MifQ94oG3YGKYWDwz/Gi0T15lN//GaQoZe08vQGFJxrXkPAeu50UXgvJPPaRKVGuP1TRUm/aHQ==",
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz",
"integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==",
"dev": true,
"dependencies": {
"picocolors": "^1.0.0",
@ -13455,18 +13375,6 @@
"node": ">= 12.13.0"
}
},
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@ -14341,24 +14249,6 @@
"node": ">=16"
}
},
"node_modules/node-gyp/node_modules/jackspeak": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/node-gyp/node_modules/minimatch": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
@ -15235,18 +15125,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@ -15296,6 +15174,12 @@
"node": ">=6"
}
},
"node_modules/package-json-from-dist": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
"dev": true
},
"node_modules/pacote": {
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz",
@ -17538,20 +17422,6 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@ -17630,9 +17500,9 @@
}
},
"node_modules/tree-dump": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz",
"integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
"integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
"dev": true,
"engines": {
"node": ">=10.0"
@ -18757,15 +18627,16 @@
}
},
"node_modules/webpack-dev-server/node_modules/glob": {
"version": "10.4.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
"integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
"version": "10.4.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
"integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
"minimatch": "^9.0.4",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^1.11.1"
},
"bin": {
@ -18817,28 +18688,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/webpack-dev-server/node_modules/jackspeak": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/webpack-dev-server/node_modules/minimatch": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
"integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"

View File

@ -16,17 +16,17 @@
"fix": "npm run lint:fix && npm run format:fix && npm run spell:fix"
},
"dependencies": {
"@angular/animations": "18.0.3",
"@angular/cdk": "18.0.3",
"@angular/common": "18.0.3",
"@angular/compiler": "18.0.3",
"@angular/core": "18.0.3",
"@angular/forms": "18.0.3",
"@angular/material": "18.0.3",
"@angular/platform-browser": "18.0.3",
"@angular/platform-browser-dynamic": "18.0.3",
"@angular/platform-server": "18.0.3",
"@angular/router": "18.0.3",
"@angular/animations": "18.0.5",
"@angular/cdk": "18.0.5",
"@angular/common": "18.0.5",
"@angular/compiler": "18.0.5",
"@angular/core": "18.0.5",
"@angular/forms": "18.0.5",
"@angular/material": "18.0.5",
"@angular/platform-browser": "18.0.5",
"@angular/platform-browser-dynamic": "18.0.5",
"@angular/platform-server": "18.0.5",
"@angular/router": "18.0.5",
"@ngneat/input-mask": "6.0.0",
"@vality/deanonimus-proto": "2.0.1-2a02d87.0",
"@vality/domain-proto": "2.0.1-b04aba8.0",
@ -34,7 +34,7 @@
"@vality/fistful-proto": "2.0.1-88e69a5.0",
"@vality/machinegun-proto": "1.0.0",
"@vality/magista-proto": "2.0.2-28d11b9.0",
"@vality/ng-core": "18.0.1-pr-63-9e315a6.0",
"@vality/ng-core": "18.1.0",
"@vality/ng-thrift": "18.0.1-pr-12-d099f93.0",
"@vality/payout-manager-proto": "2.0.1-eb4091a.0",
"@vality/repairer-proto": "2.0.2-07b73e9.0",
@ -57,18 +57,18 @@
"zone.js": "0.14.2"
},
"devDependencies": {
"@angular-devkit/build-angular": "18.0.4",
"@angular-devkit/build-angular": "18.0.6",
"@angular-eslint/builder": "18.0.1",
"@angular-eslint/schematics": "18.0.1",
"@angular/cli": "18.0.4",
"@angular/compiler-cli": "18.0.3",
"@angular/cli": "18.0.6",
"@angular/compiler-cli": "18.0.5",
"@types/inputmask": "5.0.3",
"@types/jasmine": "4.0.3",
"@types/jwt-decode": "2.2.1",
"@types/lodash-es": "^4.17.12",
"@types/papaparse": "^5.3.14",
"@vality/cspell-config": "^8.0.1-pr-57-482a037.0",
"@vality/eslint-config-ng": "18.0.1-pr-63-e72dd8e.0",
"@vality/eslint-config-ng": "18.1.0",
"@vality/prettier-config": "3.1.0",
"cross-env": "^7.0.3",
"cspell": "^8.3.2",
@ -85,4 +85,4 @@
"typescript": "~5.4.5",
"typescript-memoize": "1.1.1"
}
}
}

View File

@ -101,6 +101,7 @@ export class AppModule {
}
registerIcons(): void {
this.matIconRegistry.setDefaultFontSetClass('material-symbols-outlined');
for (const name of icons) {
this.matIconRegistry.addSvgIcon(
name,

View File

@ -1,4 +1,4 @@
<cc-page-layout title="Shops terms">
<cc-page-layout fullHeight title="Shops terms">
<cc-page-layout-actions>
<v-more-filters-button [filters]="filters"></v-more-filters-button>
</cc-page-layout-actions>
@ -16,34 +16,14 @@
</ng-template>
</v-filters>
<v-table
[cellTemplate]="{
condition: arrayColumnTemplate,
feeShare: arrayColumnTemplate,
feeFixed: arrayColumnTemplate,
feeMin: arrayColumnTemplate,
feeMax: arrayColumnTemplate,
rreserve: arrayColumnTemplate,
other: arrayColumnTemplate
}"
<v-table2
[columns]="columns"
[data]="tariffs$ | async"
[hasMore]="hasMore$ | async"
[maxSize]="250"
[progress]="isLoading$ | async"
infinityScroll
(more)="more()"
(update)="update($event)"
></v-table>
<ng-template #arrayColumnTemplate let-colDef="colDef" let-rowData="rowData" let-value="value">
<ng-container *ngIf="(rowData | vSelect: colDef.tooltip : '' : [colDef]) || ' ' as tooltip">
<div
*ngFor="let item of value; let index = index"
[matTooltip]="tooltip[index]"
matTooltipPosition="right"
style="white-space: nowrap; cursor: default"
>
{{ value?.length > 1 ? item || '-' : item }}
</div>
</ng-container>
</ng-template>
></v-table2>
</cc-page-layout>

View File

@ -11,7 +11,6 @@ import {
} from '@vality/dominator-proto/internal/dominator';
import {
clean,
Column,
countChanged,
createControls,
debounceTimeWithFirst,
@ -24,23 +23,23 @@ import {
TableModule,
UpdateOptions,
VSelectPipe,
Column2,
} from '@vality/ng-core';
import { map, shareReplay } from 'rxjs/operators';
import { Overwrite } from 'utility-types';
import {
createContractColumn,
createPartyColumn,
createShopColumn,
PageLayoutModule,
ShopFieldModule,
} from '@cc/app/shared';
import { CurrencyFieldComponent } from '@cc/app/shared/components/currency-field';
import { MerchantFieldModule } from '@cc/app/shared/components/merchant-field';
import { SidenavInfoService } from '@cc/app/shared/components/sidenav-info';
import { createDomainObjectColumn } from '@cc/app/shared/utils/table/create-domain-object-column';
import { DEBOUNCE_TIME_MS } from '@cc/app/tokens';
import { PageLayoutModule, ShopFieldModule } from '../../../../shared';
import {
createShopColumn,
createPartyColumn,
createContractColumn,
createDomainObjectColumn,
} from '../../../../shared/utils/table2';
import { ShopsTermSetHistoryCardComponent } from '../shops-term-set-history-card';
import { ShopsTariffsService } from './shops-tariffs.service';
@ -84,24 +83,22 @@ export class ShopsTariffsComponent implements OnInit {
tariffs$ = this.shopsTariffsService.result$;
hasMore$ = this.shopsTariffsService.hasMore$;
isLoading$ = this.shopsTariffsService.isLoading$;
columns: Column<ShopTermSet>[] = [
createShopColumn<ShopTermSet>(
'shop_id',
(d) => d.owner_id,
undefined,
(d) => d.shop_name,
{
pinned: 'left',
},
),
createPartyColumn<ShopTermSet>('owner_id'),
createContractColumn<ShopTermSet>(
(d) => d.contract_id,
(d) => d.owner_id,
(d) => d.shop_id,
columns: Column2<ShopTermSet>[] = [
createShopColumn(
(d) => ({
shopId: d.shop_id,
partyId: d.owner_id,
shopName: d.shop_name,
}),
{ sticky: 'start' },
),
createPartyColumn((d) => ({ id: d.owner_id })),
createContractColumn((d) => ({
id: d.contract_id,
partyId: d.owner_id,
})),
{ field: 'currency' },
createDomainObjectColumn('term_set_hierarchy', (d) => d.current_term_set.ref, {
createDomainObjectColumn((d) => ({ ref: { term_set_hierarchy: d.current_term_set.ref } }), {
header: 'Term Set',
}),
...createShopFeesColumn<ShopTermSet>(
@ -112,9 +109,11 @@ export class ShopsTariffsComponent implements OnInit {
),
{
field: 'term_set_history',
formatter: (d) => d.term_set_history?.length || '',
click: (d) =>
this.sidenavInfoService.open(ShopsTermSetHistoryCardComponent, { data: d }),
cell: (d) => ({
value: d.term_set_history?.length || '',
click: () =>
this.sidenavInfoService.open(ShopsTermSetHistoryCardComponent, { data: d }),
}),
},
];
active$ = getValueChanges(this.filtersForm).pipe(

View File

@ -1,3 +1,5 @@
import { Column2 } from '@vality/ng-core';
import type {
TermSetHierarchyObject,
CashFlowPosting,
@ -13,12 +15,12 @@ export function getViewedCashFlowSelectors(d: TermSetHierarchyObject) {
return d?.data?.term_sets?.map?.((t) => t?.terms?.payments?.fees)?.filter?.(Boolean) ?? [];
}
export function createShopFeesColumn<T extends object = TermSetHierarchyObject>(
export function createShopFeesColumn<T extends object>(
fn: (d: T) => TermSetHierarchyObject = (d) => d as never,
getPartyId: (d: T) => string,
getShopId: (d: T) => string,
getCurrency: (d: T) => string,
) {
): Column2<T>[] {
const filterRreserve = (v: CashFlowPosting) =>
v?.source?.merchant === 0 && v?.destination?.merchant === 1;
const filterDecisions = (d: T) => (v: InlineCashFlowSelector) =>
@ -39,10 +41,11 @@ export function createShopFeesColumn<T extends object = TermSetHierarchyObject>(
{
field: 'rreserve',
header: 'RReserve',
formatter: (d) =>
getInlineDecisions(getViewedCashFlowSelectors(fn(d)), filterRreserve)
cell: (d) => ({
value: getInlineDecisions(getViewedCashFlowSelectors(fn(d)), filterRreserve)
.filter(filterDecisions(d))
.map((v) => v.value),
}),
},
cols.at(-1),
];

View File

@ -1,25 +1,3 @@
<cc-card [title]="'Term Sets History'">
<v-table
[cellTemplate]="{
condition: arrayColumnTemplate,
fee: arrayColumnTemplate,
rreserve: arrayColumnTemplate,
other: arrayColumnTemplate
}"
[columns]="columns"
[data]="historyData()"
></v-table>
<ng-template #arrayColumnTemplate let-colDef="colDef" let-rowData="rowData" let-value="value">
<ng-container *ngIf="(rowData | vSelect: colDef.tooltip : '' : [colDef]) || ' ' as tooltip">
<div
*ngFor="let item of value; let index = index"
[matTooltip]="tooltip[index]"
matTooltipPosition="right"
style="white-space: nowrap; cursor: default"
>
{{ value?.length > 1 ? item || '-' : item }}
</div>
</ng-container>
</ng-template>
<v-table2 [columns]="columns" [data]="historyData()" infinityScroll></v-table2>
</cc-card>

View File

@ -1,7 +1,7 @@
import { CommonModule } from '@angular/common';
import { Component, input, computed } from '@angular/core';
import { MatTooltip } from '@angular/material/tooltip';
import { TableModule, type Column, VSelectPipe } from '@vality/ng-core';
import { TableModule, VSelectPipe, Column2 } from '@vality/ng-core';
import type { TermSetHistory, ShopTermSet } from '@vality/dominator-proto/internal/dominator';
@ -20,13 +20,15 @@ export class ShopsTermSetHistoryCardComponent {
data = input<ShopTermSet>();
historyData = computed(() => this.data()?.term_set_history?.reverse?.());
columns: Column<TermSetHistory>[] = [
{ field: 'applied_at', type: 'datetime' },
columns: Column2<TermSetHistory>[] = [
{ field: 'applied_at', cell: { type: 'datetime' } },
{
field: 'term_set',
formatter: (d) => getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.label,
description: (d) =>
getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.description,
cell: (d) => ({
value: getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.label,
description: getDomainObjectDetails({ term_set_hierarchy: d?.term_set })
?.description,
}),
},
...createShopFeesColumn<TermSetHistory>(
(d) => d.term_set,

View File

@ -1,4 +1,4 @@
<cc-page-layout title="Wallets terms">
<cc-page-layout fullHeight title="Wallets terms">
<cc-page-layout-actions>
<v-more-filters-button [filters]="filters"></v-more-filters-button>
</cc-page-layout-actions>
@ -13,40 +13,14 @@
</ng-template>
</v-filters>
<v-table
[cellTemplate]="{
condition: arrayColumnTemplate,
feeShare: arrayColumnTemplate,
feeFixed: arrayColumnTemplate,
feeMin: arrayColumnTemplate,
feeMax: arrayColumnTemplate,
other: arrayColumnTemplate
}"
<v-table2
[columns]="columns"
[data]="tariffs$ | async"
[hasMore]="hasMore$ | async"
[maxSize]="250"
[progress]="isLoading$ | async"
infinityScroll
(more)="more()"
(update)="update($event)"
></v-table>
<ng-template #arrayColumnTemplate let-colDef="colDef" let-rowData="rowData" let-value="value">
<ng-container *ngIf="(rowData | vSelect: colDef.tooltip : '' : [colDef]) || ' ' as tooltip">
<div
*ngFor="let item of value; let index = index"
[matTooltip]="tooltip[index]"
[title]="item"
matTooltipPosition="right"
style="
white-space: nowrap;
cursor: default;
max-width: 50vw;
overflow: hidden;
text-overflow: ellipsis;
"
>
{{ value?.length > 1 ? item || '-' : item }}
</div>
</ng-container>
</ng-template>
></v-table2>
</cc-page-layout>

View File

@ -14,7 +14,6 @@ import {
} from '@vality/dominator-proto/internal/dominator';
import {
clean,
Column,
countChanged,
createControls,
debounceTimeWithFirst,
@ -27,20 +26,20 @@ import {
TableModule,
UpdateOptions,
VSelectPipe,
Column2,
} from '@vality/ng-core';
import { map, shareReplay } from 'rxjs/operators';
import { Overwrite } from 'utility-types';
import {
createPartyColumn,
PageLayoutModule,
WalletFieldModule,
createWalletColumn,
} from '@cc/app/shared';
import { PageLayoutModule, WalletFieldModule } from '@cc/app/shared';
import { CurrencyFieldComponent } from '@cc/app/shared/components/currency-field';
import { MerchantFieldModule } from '@cc/app/shared/components/merchant-field';
import { SidenavInfoService } from '@cc/app/shared/components/sidenav-info';
import { createDomainObjectColumn } from '@cc/app/shared/utils/table/create-domain-object-column';
import {
createDomainObjectColumn,
createPartyColumn,
createWalletColumn,
} from '@cc/app/shared/utils/table2';
import { DEBOUNCE_TIME_MS } from '@cc/app/tokens';
import { WalletsTermSetHistoryCardComponent } from '../wallets-term-set-history-card';
@ -87,21 +86,15 @@ export class WalletsTariffsComponent implements OnInit {
tariffs$ = this.walletsTariffsService.result$;
hasMore$ = this.walletsTariffsService.hasMore$;
isLoading$ = this.walletsTariffsService.isLoading$;
columns: Column<WalletTermSet>[] = [
createWalletColumn<WalletTermSet>(
'wallet_id',
(d) => d.owner_id,
undefined,
(d) => d.wallet_name,
{
pinned: 'left',
},
),
createPartyColumn<WalletTermSet>('owner_id'),
columns: Column2<WalletTermSet>[] = [
createWalletColumn((d) => ({ id: d.wallet_id, name: d.wallet_name, partyId: d.owner_id }), {
sticky: 'start',
}),
createPartyColumn((d) => ({ id: d.owner_id })),
{ field: 'contract_id', header: 'Contract' },
{ field: 'identity_id.id', header: 'Identity' },
{ field: 'currency' },
createDomainObjectColumn('term_set_hierarchy', (d) => d.current_term_set.ref, {
createDomainObjectColumn((d) => ({ ref: { term_set_hierarchy: d.current_term_set.ref } }), {
header: 'Term Set',
}),
...createWalletFeesColumn<WalletTermSet>(
@ -111,13 +104,15 @@ export class WalletsTariffsComponent implements OnInit {
),
{
field: 'term_set_history',
formatter: (d) => d.term_set_history?.length || '',
click: (d) =>
this.sidenavInfoService.open(WalletsTermSetHistoryCardComponent, {
data: d?.term_set_history?.reverse(),
walletId: d?.wallet_id,
currency: d?.currency,
}),
cell: (d) => ({
value: d.term_set_history?.length || '',
click: () =>
this.sidenavInfoService.open(WalletsTermSetHistoryCardComponent, {
data: d?.term_set_history?.reverse(),
walletId: d?.wallet_id,
currency: d?.currency,
}),
}),
},
];
active$ = getValueChanges(this.filtersForm).pipe(

View File

@ -1,25 +1,3 @@
<cc-card [title]="'Term Sets History'">
<v-table
[cellTemplate]="{
condition: arrayColumnTemplate,
fee: arrayColumnTemplate,
rreserve: arrayColumnTemplate,
other: arrayColumnTemplate
}"
[columns]="columns"
[data]="data()"
></v-table>
<ng-template #arrayColumnTemplate let-colDef="colDef" let-rowData="rowData" let-value="value">
<ng-container *ngIf="(rowData | vSelect: colDef.tooltip : '' : [colDef]) || ' ' as tooltip">
<div
*ngFor="let item of value; let index = index"
[matTooltip]="tooltip[index]"
matTooltipPosition="right"
style="white-space: nowrap; cursor: default"
>
{{ value?.length > 1 ? item || '-' : item }}
</div>
</ng-container>
</ng-template>
<v-table2 [columns]="columns" [data]="data()" infinityScroll></v-table2>
</cc-card>

View File

@ -1,7 +1,7 @@
import { CommonModule } from '@angular/common';
import { Component, input } from '@angular/core';
import { MatTooltip } from '@angular/material/tooltip';
import { TableModule, type Column, VSelectPipe } from '@vality/ng-core';
import { TableModule, VSelectPipe, Column2 } from '@vality/ng-core';
import type { TermSetHistory } from '@vality/dominator-proto/internal/dominator';
@ -20,13 +20,15 @@ export class WalletsTermSetHistoryCardComponent {
data = input<TermSetHistory[]>();
walletId = input<string>();
currency = input<string>();
columns: Column<TermSetHistory>[] = [
{ field: 'applied_at', type: 'datetime' },
columns: Column2<TermSetHistory>[] = [
{ field: 'applied_at', cell: { type: 'datetime' } },
{
field: 'term_set',
formatter: (d) => getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.label,
description: (d) =>
getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.description,
cell: (d) => ({
value: getDomainObjectDetails({ term_set_hierarchy: d?.term_set })?.label,
description: getDomainObjectDetails({ term_set_hierarchy: d?.term_set })
?.description,
}),
},
...createWalletFeesColumn<TermSetHistory>(
(d) => d.term_set,

View File

@ -2,7 +2,7 @@ import type {
CashFlowSelector,
CashFlowPosting,
} from '@vality/dominator-proto/internal/proto/domain';
import type { Column } from '@vality/ng-core';
import type { Column2 } from '@vality/ng-core';
import {
getInlineDecisions,
@ -15,7 +15,7 @@ export function createFeesColumns<T extends object>(
filterFee: (v: CashFlowPosting) => boolean,
filterOther: (v: CashFlowPosting) => boolean = () => true,
filterDecisions: (d: T) => (v: InlineCashFlowSelector) => boolean = () => () => true,
): Column<T>[] {
): Column2<T>[] {
const filterOtherFn: (v: CashFlowPosting) => boolean = (v) =>
!filterFee(v) &&
filterOther(v) &&
@ -23,53 +23,49 @@ export function createFeesColumns<T extends object>(
return [
{
field: 'condition',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterFee)
.filter(filterDecisions(d))
.map((v) => formatLevelPredicate(v)),
.map((v) => ({ value: formatLevelPredicate(v) })),
},
{
field: 'feeShare',
header: 'Fee, %',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterFee)
.filter(filterDecisions(d))
.map((v) => v.parts?.share),
.map((v) => ({ value: v.parts?.share })),
},
{
field: 'feeFixed',
header: 'Fee, fix',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterFee)
.filter(filterDecisions(d))
.map((v) => v.parts?.fixed),
.map((v) => ({ value: v.parts?.fixed })),
},
{
field: 'feeMin',
header: 'Fee, min',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterFee)
.filter(filterDecisions(d))
.map((v) => v.parts?.max),
.map((v) => ({ value: v.parts?.max })),
},
{
field: 'feeMax',
header: 'Fee, max',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterFee)
.filter(filterDecisions(d))
.map((v) => v.parts?.min),
.map((v) => ({ value: v.parts?.min })),
},
{
field: 'other',
formatter: (d) =>
cell: (d) =>
getInlineDecisions(getFees(d), filterOtherFn)
.filter(filterDecisions(d))
.map((v) => v.value),
tooltip: (d) =>
getInlineDecisions(getFees(d), filterOtherFn)
.filter(filterDecisions(d))
.map((v) => v.description),
.map((v) => ({ value: v.value, tooltip: v.description })),
},
];
}

View File

@ -0,0 +1,7 @@
<cc-card title="Contract #{{ (contract$ | async)?.id }}">
<cc-domain-thrift-viewer
[progress]="!!(progress$ | async)"
[value]="contract$ | async"
type="Contract"
></cc-domain-thrift-viewer>
</cc-card>

View File

@ -0,0 +1,42 @@
import { CommonModule } from '@angular/common';
import { Component, Input, OnChanges } from '@angular/core';
import { ComponentChanges, progressTo } from '@vality/ng-core';
import { ReplaySubject, defer, BehaviorSubject, combineLatest } from 'rxjs';
import { switchMap, shareReplay } from 'rxjs/operators';
import { PartyManagementService } from '../../../api/payment-processing';
import { CardComponent } from '../sidenav-info/components/card/card.component';
import { DomainThriftViewerComponent } from '../thrift-api-crud';
@Component({
selector: 'cc-contract-card',
standalone: true,
imports: [CommonModule, CardComponent, DomainThriftViewerComponent],
templateUrl: './contract-card.component.html',
})
export class ContractCardComponent implements OnChanges {
@Input() partyId: string;
@Input() id: string;
progress$ = new BehaviorSubject(0);
contract$ = combineLatest([defer(() => this.partyId$), defer(() => this.id$)]).pipe(
switchMap(([partyID, id]) =>
this.partyManagementService.GetContract(partyID, id).pipe(progressTo(this.progress$)),
),
shareReplay({ refCount: true, bufferSize: 1 }),
);
private id$ = new ReplaySubject<string>(1);
private partyId$ = new ReplaySubject<string>(1);
constructor(private partyManagementService: PartyManagementService) {}
ngOnChanges(changes: ComponentChanges<ContractCardComponent>) {
if (changes.id) {
this.id$.next(this.id);
}
if (changes.partyId) {
this.partyId$.next(this.partyId);
}
}
}

View File

@ -5,7 +5,7 @@
}}</v-tag>
</div>
</mat-toolbar>
<div [ngClass]="{ wrapper__offset: !noOffset }" class="wrapper">
<div [ngClass]="{ 'wrapper__full-height': fullHeight() }" class="wrapper">
<div *ngIf="title" style="display: flex; flex-direction: column; gap: 8px">
<div *ngIf="(path$ | async)?.length > 1" class="mat-caption mat-secondary-text">
<ng-container *ngFor="let p of path$ | async; let index = index">

View File

@ -1,10 +1,14 @@
.wrapper {
&__offset {
padding: 24px;
}
$offset: 24px;
display: grid;
.wrapper {
display: flex;
flex-direction: column;
gap: 24px;
padding: $offset;
&__full-height {
height: calc(100vh - var(--mat-toolbar-standard-height) - ($offset * 2));
}
.header {
display: flex;

View File

@ -24,7 +24,6 @@ export class PageLayoutComponent {
@Input() description?: string;
@Input() id?: string;
@Input() progress?: boolean;
@Input({ transform: booleanAttribute }) noOffset = false;
@Input() tags?: { value: string; color: Color }[] | null;
@Output() idLinkClick = new EventEmitter<MouseEvent>();
@ -32,6 +31,7 @@ export class PageLayoutComponent {
backLink = input<unknown[]>();
upLink = input<unknown[]>();
idLink = input<unknown[]>();
fullHeight = input(false, { transform: booleanAttribute });
isBackAvailable = computed(
() =>

View File

@ -83,7 +83,7 @@ export function formatPredicate(predicate: Predicate, level = 0, not = false) {
}`;
case 'is_not': {
if (getUnionKey(getUnionValue(predicate) as Predicate) !== 'is_not') {
return formatPredicate(predicate.is_not, level + 1, !not);
return formatPredicate(predicate.is_not, level, !not);
}
return '';
}

View File

@ -0,0 +1,18 @@
import { inject } from '@angular/core';
import { createColumn } from '@vality/ng-core';
import { ContractCardComponent } from '../../components/contract-card/contract-card.component';
import { SidenavInfoService } from '../../components/sidenav-info';
export const createContractColumn = createColumn(
({ id, partyId }: { id: string; partyId: string }) => {
const sidenavInfoService = inject(SidenavInfoService);
return {
value: id,
click: () => {
sidenavInfoService.toggle(ContractCardComponent, { id, partyId });
},
};
},
'Contract',
);

View File

@ -0,0 +1,25 @@
import { inject } from '@angular/core';
import { Reference } from '@vality/domain-proto/internal/domain';
import { createColumn } from '@vality/ng-core';
import { map } from 'rxjs/operators';
import { DomainStoreService } from '../../../api/domain-config';
import { SidenavInfoService } from '../../components/sidenav-info';
import {
DomainObjectCardComponent,
getDomainObjectDetails,
} from '../../components/thrift-api-crud';
export const createDomainObjectColumn = createColumn(({ ref }: { ref: Reference }) => {
return inject(DomainStoreService)
.getObject(ref)
.pipe(
map((obj) => ({
value: getDomainObjectDetails(obj).label,
description: getDomainObjectDetails(obj).id,
click: () => {
inject(SidenavInfoService).toggle(DomainObjectCardComponent, { ref });
},
})),
);
}, 'Object');

View File

@ -0,0 +1,28 @@
import { inject } from '@angular/core';
import { Router } from '@angular/router';
import { createColumn } from '@vality/ng-core';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
import { PartiesStoreService } from '../../../api/payment-processing';
export const createPartyColumn = createColumn(
({ id, ...params }: { id: string; partyName?: string }) => {
const partyName$ =
'partyName' in params
? of(params.partyName)
: inject(PartiesStoreService)
.get(id)
.pipe(map((party) => party.contact_info.email));
return partyName$.pipe(
map((partyName) => ({
value: partyName,
description: id,
link: () => {
void inject(Router).navigate([`/party/${id}`]);
},
})),
);
},
'Party',
);

View File

@ -0,0 +1,30 @@
import { inject } from '@angular/core';
import { createColumn } from '@vality/ng-core';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
import { PartiesStoreService } from '../../../api/payment-processing';
import { ShopCardComponent } from '../../components/shop-card/shop-card.component';
import { SidenavInfoService } from '../../components/sidenav-info';
export const createShopColumn = createColumn(
({ shopId, partyId, ...params }: { shopId: string; partyId: string; shopName?: string }) => {
const shopName$ =
'shopName' in params
? of(params.shopName)
: inject(PartiesStoreService)
.get(partyId)
.pipe(map((party) => party.shops.get(shopId).details.name));
const sidenavInfoService = inject(SidenavInfoService);
return shopName$.pipe(
map((shopName) => ({
value: shopName,
description: shopId,
click: () => {
sidenavInfoService.toggle(ShopCardComponent, { id: shopId, partyId });
},
})),
);
},
'Shop',
);

View File

@ -0,0 +1,24 @@
import { inject } from '@angular/core';
import { createColumn } from '@vality/ng-core';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
import { PartiesStoreService } from '../../../api/payment-processing';
export const createWalletColumn = createColumn(
({ id, partyId, ...params }: { id: string; partyId: string; name?: string }) => {
const shopName$ =
'name' in params
? of(params.name)
: inject(PartiesStoreService)
.get(partyId)
.pipe(map((party) => party.wallets.get(id).name));
return shopName$.pipe(
map((name) => ({
value: name,
description: id,
})),
);
},
'Wallet',
);

View File

@ -0,0 +1,5 @@
export * from './create-shop-column';
export * from './create-party-column';
export * from './create-wallet-column';
export * from './create-contract-column';
export * from './create-domain-object-column';

View File

@ -1,6 +1,14 @@
@use '@vality/ng-core' as v;
@import './all-component-themes';
.material-symbols-outlined {
font-variation-settings:
'FILL' 0,
'wght' 300,
'GRAD' 0,
'opsz' 24;
}
$app-theme: v.create-light-theme();
@include v.core();

View File

@ -13,7 +13,10 @@
href="https://fonts.googleapis.com/css2?family=Roboto+Mono&family=Roboto:wght@300;400;500&display=swap"
rel="stylesheet"
/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<link
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"
rel="stylesheet"
/>
</head>
<body>
<cc-root></cc-root>