diff --git a/docs/calculator_list.md b/docs/calculator_list.md index d1016df919..e4c6d6c2ba 100644 --- a/docs/calculator_list.md +++ b/docs/calculator_list.md @@ -32,6 +32,7 @@ Below is a categorized list of all available standalone calculators in MEASUR. C | [Bleed Test](https://measur.ornl.gov/calculators/bleed-test) | Estimate leak rate for the system. Also called a Dropdown test or a Pressure Decay test. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/bleed-test/bleed-test.component.ts) | Coming Soon | | [Leak Loss Estimator - Bag Method](https://measur.ornl.gov/calculators/bag-method) | Estimates the leakage losses in a compressed air system using the bag method. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/bag-method/bag-method.component.ts) | Coming Soon | | [Pneumatic Air Requirement](https://measur.ornl.gov/calculators/pneumatic-air) | Estimate the quantity of air required by a specific single acting or a double acting piston cylinder compressor. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/pneumatic-air/pneumatic-air.component.ts) | Coming Soon | +| [Pneumatic Valve](https://measur.ornl.gov/calculators/pneumatic-valve) | Calculate the air flow rate through a pneumatic valve or determine the valve flow coefficient (Cv) for valve sizing. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.ts) | [Docs](https://industrialresources.ornl.gov/measur/suite/docs/group__pneumatic__valve__calculator) | | [Receiver Tank Sizing](https://measur.ornl.gov/calculators/receiver-tank) | Calculate the required size of the receiver tank. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/receiver-tank/receiver-tank.component.ts) | Coming Soon | | [Usable Air Capacity](https://measur.ornl.gov/calculators/receiver-tank-usable-air) | Estimate the quantity of compressed air that is available for use. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/receiver-tank/receiver-tank.component.ts) | Coming Soon | | [Pipe Sizing](https://measur.ornl.gov/calculators/pipe-sizing) | Determine pipe diameter when the volumetric flow velocity, pressure, and design velocity are known. | [Code](https://github.com/ORNL-AMO/AMO-Tools-Desktop/tree/master/src/app/calculator/compressed-air/pipe-sizing/pipe-sizing.component.ts) | Coming Soon | diff --git a/package-lock.json b/package-lock.json index d6906c774b..6b40f9d009 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "font-awesome": "4.7.0", "fs-jetpack": "5.1.0", "lodash.foreach": "4.5.0", - "measur-tools-suite": "1.1.3", + "measur-tools-suite": "1.1.4-rc.91", "ngx-bootstrap": "20.0.2", "ngx-indexed-db": "16.0.0", "ngx-webstorage": "20.0.0", @@ -3055,6 +3055,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.17.tgz", "integrity": "sha512-KvdgFjCTkOD3WVt4gzmJOoX914eey/Efu2Pb/KUM0Bqp1ZoXiFpI48GCd1b6Ks8JlDBeAfgjtpdSUB2aLnMRZQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3271,6 +3272,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.17.tgz", "integrity": "sha512-Dqd8f8o9MehszTZIB7o7jrERlwLOSK64gNngK14DCQazz5lpIhAF6hBjx7zjHpa7L9eAYPK1TaxQUXypjzj18Q==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3287,6 +3289,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.17.tgz", "integrity": "sha512-cj3x6aFk9xOOxX+qEdeN8T5YbnBNWJ4UMHB/LQoDr7/xCJJGa40IhcOAuJeuF2kGqTwx6MCXnvjO8XOQfHhe9g==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3299,6 +3302,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.17.tgz", "integrity": "sha512-w5pmO1pXO9tUMgUMWstpDmAWh5s1lJWo+2GI/ByaUEgBZkXd2S92sWoDL+bhy+JSvFzdLGdua6BncHBOX7hEjA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -3331,6 +3335,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.17.tgz", "integrity": "sha512-YlQqxMeHI9XJw7I7oM3hYFQd4lQbK37IdlD9ztROIw5FjX6i6lmLU7+X1MQGSRi2r+X9l3IZtl33hRTNvkoUBw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3356,6 +3361,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.17.tgz", "integrity": "sha512-iGS6NwzcyJzinbPMapsQtcN0ZJ62vr6hcul+FNa40CaK2ePC04S+C5n+DIphzwnwsFHDBIWuTQRfk/lNYdN1JA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3374,6 +3380,7 @@ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.17.tgz", "integrity": "sha512-4P40K/tfXJwlwa7F7axnaCFaFi1P7tcTRcGVoc0oEzffWoDItxYGWZBxBne4fy/ZiyNrNUGW1IPeYrxHO4DdVw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -3398,6 +3405,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.17.tgz", "integrity": "sha512-GA8pK+0F2/KGdYn5LMpLBrPTkQUwGjQE8Q+qsivOa150cK3OuD0po5PvYK58l+niGIVvm0wB1xGKTHTOiX/+4A==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3438,6 +3446,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.17.tgz", "integrity": "sha512-8IO8wqjB1c8G+lzQwWcUFlWxm3LkyAT3bsJ5L3Vm0L9WekFBsfG78T9wAy6WYxxZCX6T2iQBD6tg/3t+t86lTA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -3476,6 +3485,7 @@ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-20.3.17.tgz", "integrity": "sha512-AO1nazoySYeHPTI7SCIKBW9JvbEeNo+kzYYRLM5oXxGQlFfW25o3+OKw0jaqCudlk09iFMyuBrad5KlQf5vqMg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -3518,6 +3528,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -5266,6 +5277,7 @@ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5654,7 +5666,6 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, - "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -5676,7 +5687,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -5693,7 +5703,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -5708,7 +5717,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 10.0.0" } @@ -5780,6 +5788,7 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -5823,6 +5832,7 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -6899,6 +6909,7 @@ "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -7887,6 +7898,7 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.9.tgz", "integrity": "sha512-I8yO3t4T0y7bvDiR1qhIN6iBWZOTBfVOnmLlM7K6h3dx5YX2a7rnkuXzc2UkZaqhxY9NgTnEbdPlokR1RxCNRQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.6", "@mui/core-downloads-tracker": "^7.3.9", @@ -9338,6 +9350,7 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -10251,6 +10264,7 @@ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/ms": "*" } @@ -10297,6 +10311,7 @@ "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -10421,6 +10436,7 @@ "integrity": "sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.12.0" } @@ -10478,6 +10494,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -10642,6 +10659,7 @@ "integrity": "sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.44.0", "@typescript-eslint/types": "8.44.0", @@ -10858,8 +10876,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", @@ -10875,8 +10894,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", @@ -10902,8 +10922,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "tinyrainbow": "^2.0.0" }, @@ -10915,8 +10936,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", @@ -10930,8 +10952,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", @@ -10945,8 +10968,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "tinyspy": "^4.0.3" }, @@ -10958,8 +10982,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", @@ -11277,6 +11302,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -11365,6 +11391,7 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -12490,6 +12517,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -12687,8 +12715,9 @@ "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=8" } @@ -12886,8 +12915,9 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -12952,8 +12982,9 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">= 16" } @@ -12963,6 +12994,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", + "peer": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -13820,8 +13852,7 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -14104,6 +14135,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -14281,8 +14313,9 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=6" } @@ -14463,7 +14496,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz", "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/di": { "version": "0.0.1", @@ -15113,9 +15147,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.361", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", - "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "version": "1.5.362", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.362.tgz", + "integrity": "sha512-PUY2DrLvkjkUuWqq+KPL2iWshrJsZOcIojzRQ7eXFacc9dWga7MGMJAa15VbiejSZB1PAXaRLAiKgruHP8LB1w==", "license": "ISC" }, "node_modules/electron-updater": { @@ -15188,7 +15222,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -15209,7 +15242,6 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -15668,6 +15700,7 @@ "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -16061,6 +16094,7 @@ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -17080,6 +17114,7 @@ "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -18062,7 +18097,8 @@ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.3.0.tgz", "integrity": "sha512-zsOmeBKESky4toybvWEikRiZ0jHoBEu79wNArLfMdSnlLMZx3Xcp6CSm2sUcYyoJC+Uyj8LBJap/MUbVSfJ27g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/jasmine-spec-reporter": { "version": "5.0.0", @@ -18092,6 +18128,7 @@ "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -18282,6 +18319,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -18861,6 +18899,7 @@ "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -19513,8 +19552,9 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "extraneous": true, - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/lower-case": { "version": "2.0.2", @@ -19591,9 +19631,9 @@ "license": "ISC" }, "node_modules/make-fetch-happen": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz", - "integrity": "sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==", + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.6.tgz", + "integrity": "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw==", "dev": true, "license": "ISC", "dependencies": { @@ -19639,9 +19679,9 @@ } }, "node_modules/measur-tools-suite": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/measur-tools-suite/-/measur-tools-suite-1.1.3.tgz", - "integrity": "sha512-fJQbO2J0a2MswNR0nE9ibIt3Ybqfizh+j20ce/aZCok1etcUPz6kT4smpSycy7EdFZa6mfzj8Fri81b28czCvg==", + "version": "1.1.4-rc.91", + "resolved": "https://registry.npmjs.org/measur-tools-suite/-/measur-tools-suite-1.1.4-rc.91.tgz", + "integrity": "sha512-MoZ/y3Bv7dTdKVNC7/fUPKB0MSNEOZlt+XOrFBYjX5YQl4mMhrO25XPczNGG0Xzwujo3FXPjy46k8zGH8gQn7A==", "license": "MIT", "engines": { "node": "20.19.4", @@ -21224,8 +21264,9 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">= 14.16" } @@ -21444,6 +21485,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -21620,7 +21662,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -21638,7 +21679,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": "^12.20.0 || >=14" } @@ -22072,6 +22112,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -22081,6 +22122,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -22105,6 +22147,7 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -22217,7 +22260,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -22821,6 +22865,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -22891,6 +22936,7 @@ "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -23848,8 +23894,9 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "extraneous": true, - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/stdin-discarder": { "version": "0.2.2", @@ -23890,9 +23937,9 @@ } }, "node_modules/streamx": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", - "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.26.0.tgz", + "integrity": "sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==", "dev": true, "license": "MIT", "dependencies": { @@ -23990,8 +24037,9 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "js-tokens": "^9.0.1" }, @@ -24003,8 +24051,9 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "extraneous": true, - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/style-loader": { "version": "4.0.0", @@ -24171,7 +24220,6 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -24236,7 +24284,6 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -24250,6 +24297,7 @@ "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -24414,8 +24462,9 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "extraneous": true, - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/tinyglobby": { "version": "0.2.14", @@ -24437,8 +24486,9 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -24447,8 +24497,9 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14.0.0" } @@ -24457,16 +24508,17 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-5sJPdPjfI5Kx+qbrDesxkglRBxW//g7hCsqspEjwkewGvBMGIKMOTKzLt1hFVJzyadba3lDUN20O9qhvbQUSTA==", "license": "MIT", "engines": { "node": ">=14.14" @@ -24664,7 +24716,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tslint": { "version": "6.1.3", @@ -24990,6 +25043,7 @@ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25319,6 +25373,7 @@ "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -25392,8 +25447,9 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", @@ -25445,8 +25501,10 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "extraneous": true, + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", @@ -25569,6 +25627,7 @@ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -26575,8 +26634,10 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "extraneous": true, + "dev": true, "license": "ISC", + "optional": true, + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -26748,6 +26809,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -26766,7 +26828,8 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz", "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/zustand": { "version": "4.5.7", @@ -26807,7 +26870,7 @@ "@xyflow/react": "12.10.2", "formik": "2.4.9", "html-to-image": "1.11.13", - "measur-tools-suite": "1.1.3", + "measur-tools-suite": "1.1.4-rc.91", "react": "19.2.4", "react-dom": "19.2.4", "react-redux": "9.2.0", @@ -26843,6 +26906,7 @@ "integrity": "sha512-36l628fQ/9a/8ihy97eOtEnvWQEdqULQOJtcaxtoNq0G1w3Mxd4szSahOaMM9/NGyZ+hyKcMtIW/WIxq0XQViQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.6", @@ -27556,6 +27620,7 @@ "integrity": "sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.1.6", "@vitest/mocker": "4.1.6", @@ -27680,6 +27745,7 @@ "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", diff --git a/package.json b/package.json index 0fdb510694..dc800645d9 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "font-awesome": "4.7.0", "fs-jetpack": "5.1.0", "lodash.foreach": "4.5.0", - "measur-tools-suite": "1.1.3", + "measur-tools-suite": "1.1.4-rc.91", "ngx-bootstrap": "20.0.2", "ngx-indexed-db": "16.0.0", "ngx-webstorage": "20.0.0", diff --git a/process-flow-diagram-component/package-lock.json b/process-flow-diagram-component/package-lock.json index f9521f960d..cbb71c1b31 100644 --- a/process-flow-diagram-component/package-lock.json +++ b/process-flow-diagram-component/package-lock.json @@ -16,7 +16,7 @@ "@xyflow/react": "12.10.2", "formik": "2.4.9", "html-to-image": "1.11.13", - "measur-tools-suite": "1.1.3", + "measur-tools-suite": "1.1.4-rc.91", "react": "19.2.4", "react-dom": "19.2.4", "react-redux": "9.2.0", @@ -212,6 +212,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" @@ -224,6 +225,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -297,6 +299,7 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -340,6 +343,7 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -1174,6 +1178,7 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.9.tgz", "integrity": "sha512-I8yO3t4T0y7bvDiR1qhIN6iBWZOTBfVOnmLlM7K6h3dx5YX2a7rnkuXzc2UkZaqhxY9NgTnEbdPlokR1RxCNRQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.6", "@mui/core-downloads-tracker": "^7.3.9", @@ -2158,6 +2163,7 @@ "integrity": "sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.12.0" } @@ -2193,6 +2199,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2328,6 +2335,7 @@ "integrity": "sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.44.0", "@typescript-eslint/types": "8.44.0", @@ -2533,6 +2541,7 @@ "integrity": "sha512-36l628fQ/9a/8ihy97eOtEnvWQEdqULQOJtcaxtoNq0G1w3Mxd4szSahOaMM9/NGyZ+hyKcMtIW/WIxq0XQViQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.6", @@ -2935,6 +2944,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3280,6 +3290,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -3890,6 +3901,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -4178,9 +4190,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.361", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", - "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", + "version": "1.5.362", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.362.tgz", + "integrity": "sha512-PUY2DrLvkjkUuWqq+KPL2iWshrJsZOcIojzRQ7eXFacc9dWga7MGMJAa15VbiejSZB1PAXaRLAiKgruHP8LB1w==", "dev": true, "license": "ISC" }, @@ -4314,6 +4326,7 @@ "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -6233,9 +6246,9 @@ } }, "node_modules/measur-tools-suite": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/measur-tools-suite/-/measur-tools-suite-1.1.3.tgz", - "integrity": "sha512-fJQbO2J0a2MswNR0nE9ibIt3Ybqfizh+j20ce/aZCok1etcUPz6kT4smpSycy7EdFZa6mfzj8Fri81b28czCvg==", + "version": "1.1.4-rc.91", + "resolved": "https://registry.npmjs.org/measur-tools-suite/-/measur-tools-suite-1.1.4-rc.91.tgz", + "integrity": "sha512-MoZ/y3Bv7dTdKVNC7/fUPKB0MSNEOZlt+XOrFBYjX5YQl4mMhrO25XPczNGG0Xzwujo3FXPjy46k8zGH8gQn7A==", "license": "MIT", "engines": { "node": "20.19.4", @@ -6928,6 +6941,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", @@ -7214,6 +7228,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7223,6 +7238,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -7247,6 +7263,7 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -7326,7 +7343,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -7596,6 +7614,7 @@ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -8339,6 +8358,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -8450,7 +8470,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsyringe": { "version": "4.10.0", @@ -8517,6 +8538,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8653,6 +8675,7 @@ "integrity": "sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.1.6", "@vitest/mocker": "4.1.6", @@ -8783,6 +8806,7 @@ "integrity": "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -8859,8 +8883,10 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "extraneous": true, + "dev": true, "license": "ISC", + "optional": true, + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -8901,6 +8927,7 @@ "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", diff --git a/process-flow-diagram-component/package.json b/process-flow-diagram-component/package.json index 7f0dd66e23..ae34bad5ff 100644 --- a/process-flow-diagram-component/package.json +++ b/process-flow-diagram-component/package.json @@ -22,7 +22,7 @@ "@xyflow/react": "12.10.2", "formik": "2.4.9", "html-to-image": "1.11.13", - "measur-tools-suite": "1.1.3", + "measur-tools-suite": "1.1.4-rc.91", "react": "19.2.4", "react-dom": "19.2.4", "react-redux": "9.2.0", diff --git a/src/app/calculator/compressed-air/compressed-air-list/compressed-air-list.component.html b/src/app/calculator/compressed-air/compressed-air-list/compressed-air-list.component.html index 0beb534aae..4e3ef9548f 100644 --- a/src/app/calculator/compressed-air/compressed-air-list/compressed-air-list.component.html +++ b/src/app/calculator/compressed-air/compressed-air-list/compressed-air-list.component.html @@ -109,6 +109,21 @@

Compressed Air Calculators

+
+
+
+ +
+
+
+ Pneumatic Valve +

+ Calculate the air flow rate through a pneumatic valve or determine the valve flow coefficient (Cv) + for valve sizing +

+
+
diff --git a/src/app/calculator/compressed-air/compressed-air.module.ts b/src/app/calculator/compressed-air/compressed-air.module.ts index 9e912b92f7..eea9f5db0f 100644 --- a/src/app/calculator/compressed-air/compressed-air.module.ts +++ b/src/app/calculator/compressed-air/compressed-air.module.ts @@ -6,6 +6,7 @@ import { BagMethodModule } from './bag-method/bag-method.module'; import { OperatingCostModule } from './operating-cost/operating-cost.module'; import { PipeSizingModule } from './pipe-sizing/pipe-sizing.module'; import { PneumaticAirModule } from './pneumatic-air/pneumatic-air.module'; +import { PneumaticValveModule } from './pneumatic-valve/pneumatic-valve.module'; import { ReceiverTankModule } from './receiver-tank/receiver-tank.module'; import { SystemCapacityModule } from './system-capacity/system-capacity.module'; import { CompressedAirListComponent } from './compressed-air-list/compressed-air-list.component'; @@ -28,6 +29,7 @@ import { BleedTestModule } from './bleed-test/bleed-test.module'; OperatingCostModule, PipeSizingModule, PneumaticAirModule, + PneumaticValveModule, ReceiverTankModule, SystemCapacityModule, CompressedAirReductionModule, diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.css b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.html b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.html new file mode 100644 index 0000000000..2919ccf0cb --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.html @@ -0,0 +1,91 @@ +
+
+ +
+
+ +
+ + psia + kPaa +
+
+
+ +
+ + psia + kPaa +
+
+
+
+
+ +
+ + {{flowRateOutput.flowRate | number:'1.0-2'}} + scfm + Nm3/min + + + — — + +
+
+
+
+ + +
+
+ +
+ + psia + kPaa +
+
+
+ +
+ + psia + kPaa +
+
+
+ +
+ + scfm + Nm3/min +
+
+
+
+
+ +
+ + {{cvOutput.flowCoefficient | number:'1.0-4'}} + + + — — + +
+
+
+
+
+
diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.ts b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.ts new file mode 100644 index 0000000000..3e8183de73 --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve-form/pneumatic-valve-form.component.ts @@ -0,0 +1,41 @@ +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { PneumaticValveCvInput, PneumaticValveCvOutput, PneumaticValveFlowRateInput, PneumaticValveFlowRateOutput } from '../../../../shared/models/standalone'; +import { Settings } from '../../../../shared/models/settings'; + +@Component({ + selector: 'app-pneumatic-valve-form', + templateUrl: './pneumatic-valve-form.component.html', + styleUrls: ['./pneumatic-valve-form.component.css'], + standalone: false +}) +export class PneumaticValveFormComponent implements OnInit { + @Input() + settings: Settings; + @Input() + calcMode: string; + @Input() + flowRateInputs: PneumaticValveFlowRateInput; + @Input() + flowRateOutput: PneumaticValveFlowRateOutput; + @Input() + cvInputs: PneumaticValveCvInput; + @Input() + cvOutput: PneumaticValveCvOutput; + @Output('calculate') + calculate = new EventEmitter(); + @Output('emitChangeField') + emitChangeField = new EventEmitter(); + + constructor() { } + + ngOnInit() { + } + + emitChange() { + this.calculate.emit(); + } + + changeField(str: string) { + this.emitChangeField.emit(str); + } +} diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.css b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.html b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.html new file mode 100644 index 0000000000..0e08fb9ca9 --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.html @@ -0,0 +1,136 @@ +
+
+
+ +
+
+

Pneumatic Valve

+
+
+ + + +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ + + + +
+ + +
+
+
+ +
+
+ +
+
+
+
+ Pneumatic Valve Help +
+ + This calculator provides two modes for sizing pneumatic valves in compressed air systems. +

+ Flow Rate (Cv = 1) – Computes the theoretical air flow rate through a valve + with a unit flow coefficient (Cv = 1). For a valve with a known Cv, multiply the result + by that Cv value. +

+ Flow Coefficient (Cv) – Rearranges the formula to solve for Cv when the + required flow rate and operating pressures are known. Select a valve whose rated Cv + meets or exceeds the calculated value. +
+
+
+ +
+
+ Inlet Pressure +
+ + The absolute pressure at the upstream (inlet) side of the valve. +
+
+
+
+ +
+
+ Outlet Pressure +
+ + The absolute pressure at the downstream (outlet) side of the valve. +
+
+
+
+ +
+
+ Flow Rate +
+ + The measured or required air flow rate through the valve at standard conditions. +
+
+
+
+ + +
+
+
+
+
diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.ts b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.ts new file mode 100644 index 0000000000..a6284ced2d --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.component.ts @@ -0,0 +1,123 @@ +import { Component, OnInit, ElementRef, ViewChild, HostListener, Input } from '@angular/core'; +import { StandaloneService } from '../../standalone.service'; +import { PneumaticValveCvInput, PneumaticValveCvOutput, PneumaticValveFlowRateInput, PneumaticValveFlowRateOutput } from '../../../shared/models/standalone'; +import { Settings } from '../../../shared/models/settings'; +import { PneumaticValveService } from './pneumatic-valve.service'; +import { SettingsDbService } from '../../../indexedDb/settings-db.service'; +import { AnalyticsService } from '../../../shared/analytics/analytics.service'; +import { environment } from '../../../../environments/environment'; + +@Component({ + selector: 'app-pneumatic-valve', + templateUrl: './pneumatic-valve.component.html', + styleUrls: ['./pneumatic-valve.component.css'], + standalone: false +}) +export class PneumaticValveComponent implements OnInit { + @Input() + settings: Settings; + + @ViewChild('contentContainer', { static: false }) contentContainer: ElementRef; + @ViewChild('smallTabSelect', { static: false }) smallTabSelect: ElementRef; + @ViewChild('leftPanelHeader', { static: false }) leftPanelHeader: ElementRef; + + @HostListener('window:resize', ['$event']) + onResize(event) { + setTimeout(() => { + this.resizeTabs(); + }, 100); + } + + smallScreenTab: string = 'form'; + containerHeight: number; + headerHeight: number; + + calcMode: string = 'flow-rate'; + flowRateInputs: PneumaticValveFlowRateInput; + flowRateOutput: PneumaticValveFlowRateOutput; + cvInputs: PneumaticValveCvInput; + cvOutput: PneumaticValveCvOutput; + currentField: string = 'default'; + docsLink: string = environment.measurDocsUrl; + + constructor( + private standaloneService: StandaloneService, + private pneumaticValveService: PneumaticValveService, + private settingsDbService: SettingsDbService, + private analyticsService: AnalyticsService + ) { } + + ngOnInit() { + this.analyticsService.sendEvent('calculator-CA-pneumatic-valve'); + if (!this.settings) { + this.settings = this.settingsDbService.globalSettings; + } + this.flowRateInputs = this.pneumaticValveService.flowRateInputs; + this.cvInputs = this.pneumaticValveService.cvInputs; + this.calculate(); + } + + ngAfterViewInit() { + setTimeout(() => { + this.resizeTabs(); + }, 100); + } + + ngOnDestroy() { + this.pneumaticValveService.flowRateInputs = this.flowRateInputs; + this.pneumaticValveService.cvInputs = this.cvInputs; + } + + resizeTabs() { + if (this.leftPanelHeader.nativeElement.clientHeight) { + this.headerHeight = this.leftPanelHeader.nativeElement.clientHeight; + this.containerHeight = this.contentContainer.nativeElement.offsetHeight - this.leftPanelHeader.nativeElement.offsetHeight; + if (this.smallTabSelect && this.smallTabSelect.nativeElement) { + this.containerHeight = this.containerHeight - this.smallTabSelect.nativeElement.offsetHeight; + } + } + } + + calculate() { + if (this.calcMode === 'flow-rate') { + this.flowRateOutput = this.standaloneService.pneumaticValveCalculateFlowRate(this.flowRateInputs, this.settings); + } else { + this.cvOutput = this.standaloneService.pneumaticValveCv(this.cvInputs, this.settings); + } + } + + setCalcMode(mode: string) { + this.calcMode = mode; + this.calculate(); + } + + setField(str: string) { + this.currentField = str; + } + + btnResetData() { + if (this.calcMode === 'flow-rate') { + this.flowRateInputs = this.pneumaticValveService.getDefaultFlowRateData(); + } else { + this.cvInputs = this.pneumaticValveService.getDefaultCvData(); + } + this.calculate(); + } + + btnGenerateExample() { + if (this.calcMode === 'flow-rate') { + this.flowRateInputs = this.pneumaticValveService.convertFlowRateExample( + this.pneumaticValveService.getExampleFlowRateData(), this.settings + ); + } else { + this.cvInputs = this.pneumaticValveService.convertCvExample( + this.pneumaticValveService.getExampleCvData(), this.settings + ); + } + this.calculate(); + } + + setSmallScreenTab(selectedTab: string) { + this.smallScreenTab = selectedTab; + } +} diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.module.ts b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.module.ts new file mode 100644 index 0000000000..2e67a8c46c --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { PneumaticValveComponent } from './pneumatic-valve.component'; +import { PneumaticValveFormComponent } from './pneumatic-valve-form/pneumatic-valve-form.component'; +import { PneumaticValveService } from './pneumatic-valve.service'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule + ], + declarations: [ + PneumaticValveComponent, + PneumaticValveFormComponent + ], + exports: [ + PneumaticValveComponent + ], + providers: [ + PneumaticValveService + ] +}) +export class PneumaticValveModule { } diff --git a/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.service.ts b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.service.ts new file mode 100644 index 0000000000..810d5e6783 --- /dev/null +++ b/src/app/calculator/compressed-air/pneumatic-valve/pneumatic-valve.service.ts @@ -0,0 +1,65 @@ +import { Injectable } from '@angular/core'; +import { PneumaticValveCvInput, PneumaticValveFlowRateInput } from '../../../shared/models/standalone'; +import { ConvertUnitsService } from '../../../shared/convert-units/convert-units.service'; +import { Settings } from '../../../shared/models/settings'; + +@Injectable() +export class PneumaticValveService { + + flowRateInputs: PneumaticValveFlowRateInput; + cvInputs: PneumaticValveCvInput; + + constructor(private convertUnitsService: ConvertUnitsService) { + this.flowRateInputs = this.getDefaultFlowRateData(); + this.cvInputs = this.getDefaultCvData(); + } + + getDefaultFlowRateData(): PneumaticValveFlowRateInput { + return { + inletPressure: 0, + outletPressure: 0 + }; + } + + getDefaultCvData(): PneumaticValveCvInput { + return { + inletPressure: 0, + outletPressure: 0, + flowRate: 0 + }; + } + + getExampleFlowRateData(): PneumaticValveFlowRateInput { + return { + inletPressure: 100, + outletPressure: 70 + }; + } + + getExampleCvData(): PneumaticValveCvInput { + return { + inletPressure: 80, + outletPressure: 75, + flowRate: 55 + }; + } + + convertFlowRateExample(inputs: PneumaticValveFlowRateInput, settings: Settings): PneumaticValveFlowRateInput { + let tmpInputs: PneumaticValveFlowRateInput = JSON.parse(JSON.stringify(inputs)); + if (settings.unitsOfMeasure === 'Metric') { + tmpInputs.inletPressure = Math.round(this.convertUnitsService.value(tmpInputs.inletPressure).from('psia').to('kPaa') * 100) / 100; + tmpInputs.outletPressure = Math.round(this.convertUnitsService.value(tmpInputs.outletPressure).from('psia').to('kPaa') * 100) / 100; + } + return tmpInputs; + } + + convertCvExample(inputs: PneumaticValveCvInput, settings: Settings): PneumaticValveCvInput { + let tmpInputs: PneumaticValveCvInput = JSON.parse(JSON.stringify(inputs)); + if (settings.unitsOfMeasure === 'Metric') { + tmpInputs.inletPressure = Math.round(this.convertUnitsService.value(tmpInputs.inletPressure).from('psia').to('kPaa') * 100) / 100; + tmpInputs.outletPressure = Math.round(this.convertUnitsService.value(tmpInputs.outletPressure).from('psia').to('kPaa') * 100) / 100; + tmpInputs.flowRate = Math.round(this.convertUnitsService.value(tmpInputs.flowRate).from('ft3').to('m3') * 100) / 100; + } + return tmpInputs; + } +} diff --git a/src/app/calculator/standalone.service.ts b/src/app/calculator/standalone.service.ts index 60439f1c24..5bacf4d5b2 100644 --- a/src/app/calculator/standalone.service.ts +++ b/src/app/calculator/standalone.service.ts @@ -12,6 +12,7 @@ import { PowerFactorTriangleModeInputs, PowerFactorTriangleOutputs, ReceiverTankMeteredResults, + PneumaticValveFlowRateInput, PneumaticValveFlowRateOutput, PneumaticValveCvInput, PneumaticValveCvOutput, } from '../shared/models/standalone'; import { Settings } from '../shared/models/settings'; import { ConvertUnitsService } from '../shared/convert-units/convert-units.service'; @@ -257,35 +258,32 @@ export class StandaloneService { } } - // calculate flow rate - // pneumaticValveCalculateFlowRate(inletPressure: number, outletPressure: number, settings: Settings): number { - // let inletPressureCpy: number = JSON.parse(JSON.stringify(inletPressure)); - // let outletPressureCpy: number = JSON.parse(JSON.stringify(outletPressure)); - // if (settings.unitsOfMeasure === 'Metric') { - // inletPressureCpy = this.convertUnitsService.value(inletPressureCpy).from('kPa').to('psi'); - // outletPressureCpy = this.convertUnitsService.value(outletPressureCpy).from('kPa').to('psi'); - // let flowRate: number = this.standaloneSuiteApiService.pneumaticValveCalculateFlowRate({ inletPressure: inletPressureCpy, outletPressure: outletPressureCpy }).flowRate; - // flowRate = this.convertUnitsService.value(flowRate).from('ft3').to('m3'); - // return flowRate; - // } else { - // return this.standaloneSuiteApiService.pneumaticValveCalculateFlowRate({ inletPressure: inletPressureCpy, outletPressure: outletPressureCpy }).flowRate; - // } - // } - - // // calculate flow coefficient - // pneumaticValve(input: PneumaticValve, settings: Settings): number { - // let inputCpy: PneumaticValve = JSON.parse(JSON.stringify(input)); - // if (settings.unitsOfMeasure === 'Metric') { - // inputCpy.inletPressure = this.convertUnitsService.value(inputCpy.inletPressure).from('kPa').to('psi'); - // inputCpy.outletPressure = this.convertUnitsService.value(inputCpy.outletPressure).from('kPa').to('psi'); - // inputCpy.flowRate = this.convertUnitsService.value(inputCpy.flowRate).from('m3').to('ft3'); - // let flowCoefficient: number = this.standaloneSuiteApiService.pneumaticValve(inputCpy).flowCoefficient; - // flowCoefficient = this.convertUnitsService.value(flowCoefficient).from('ft3').to('m3'); - // return flowCoefficient; - // } else { - // return this.standaloneSuiteApiService.pneumaticValve(inputCpy).flowCoefficient; - // } - // } + pneumaticValveCalculateFlowRate(input: PneumaticValveFlowRateInput, settings: Settings): PneumaticValveFlowRateOutput { + let inputCpy: PneumaticValveFlowRateInput = JSON.parse(JSON.stringify(input)); + if (settings.unitsOfMeasure === 'Metric') { + inputCpy.inletPressure = this.convertUnitsService.value(inputCpy.inletPressure).from('kPa').to('psi'); + inputCpy.outletPressure = this.convertUnitsService.value(inputCpy.outletPressure).from('kPa').to('psi'); + let output: PneumaticValveFlowRateOutput = this.standaloneSuiteApiService.pneumaticValveCalculateFlowRate(inputCpy); + if (output.flowRate !== undefined) { + output.flowRate = this.convertUnitsService.value(output.flowRate).from('ft3').to('m3'); + } + return output; + } else { + return this.standaloneSuiteApiService.pneumaticValveCalculateFlowRate(inputCpy); + } + } + + pneumaticValveCv(input: PneumaticValveCvInput, settings: Settings): PneumaticValveCvOutput { + let inputCpy: PneumaticValveCvInput = JSON.parse(JSON.stringify(input)); + if (settings.unitsOfMeasure === 'Metric') { + inputCpy.inletPressure = this.convertUnitsService.value(inputCpy.inletPressure).from('kPa').to('psi'); + inputCpy.outletPressure = this.convertUnitsService.value(inputCpy.outletPressure).from('kPa').to('psi'); + inputCpy.flowRate = this.convertUnitsService.value(inputCpy.flowRate).from('m3').to('ft3'); + return this.standaloneSuiteApiService.pneumaticValveCv(inputCpy); + } else { + return this.standaloneSuiteApiService.pneumaticValveCv(inputCpy); + } + } bagMethod(input: BagMethodInput, settings: Settings): BagMethodOutput { let inputCpy: BagMethodInput = JSON.parse(JSON.stringify(input)); diff --git a/src/app/core/core.routing.ts b/src/app/core/core.routing.ts index 10c1d53ec8..190cd32772 100644 --- a/src/app/core/core.routing.ts +++ b/src/app/core/core.routing.ts @@ -32,6 +32,7 @@ import { BagMethodComponent } from '../calculator/compressed-air/bag-method/bag- import { OperatingCostComponent } from '../calculator/compressed-air/operating-cost/operating-cost.component'; import { PipeSizingComponent } from '../calculator/compressed-air/pipe-sizing/pipe-sizing.component'; import { PneumaticAirComponent } from '../calculator/compressed-air/pneumatic-air/pneumatic-air.component'; +import { PneumaticValveComponent } from '../calculator/compressed-air/pneumatic-valve/pneumatic-valve.component'; import { ReceiverTankComponent } from '../calculator/compressed-air/receiver-tank/receiver-tank.component'; import { SystemCapacityComponent } from '../calculator/compressed-air/system-capacity/system-capacity.component'; import { FanAnalysisComponent } from '../calculator/fans/fan-analysis/fan-analysis.component'; @@ -245,6 +246,10 @@ export const coreRoutes: Routes = [ path: 'pneumatic-air', component: PneumaticAirComponent }, + { + path: 'pneumatic-valve', + component: PneumaticValveComponent + }, { path: 'receiver-tank-usable-air', component: ReceiverTankComponent diff --git a/src/app/dashboard/sidebar/calculator-list/calculator-list.component.html b/src/app/dashboard/sidebar/calculator-list/calculator-list.component.html index 0a6a65dd87..b4e530b3e3 100644 --- a/src/app/dashboard/sidebar/calculator-list/calculator-list.component.html +++ b/src/app/dashboard/sidebar/calculator-list/calculator-list.component.html @@ -56,6 +56,7 @@ Estimator - Bag Method Pneumatic Air Requirement + Pneumatic Valve Receiver Tank Sizing