From 1b91273a7e97f6f0ff629635a2895bbed20fa780 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Thu, 12 Mar 2026 13:12:23 -0700 Subject: [PATCH 01/13] Fix peer deps --- web/.yarnrc.yml | 5 + web/package.json | 12 +- web/yarn.lock | 1808 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 1703 insertions(+), 122 deletions(-) diff --git a/web/.yarnrc.yml b/web/.yarnrc.yml index 3186f3f079..6ab1e0f425 100644 --- a/web/.yarnrc.yml +++ b/web/.yarnrc.yml @@ -1 +1,6 @@ nodeLinker: node-modules + +packageExtensions: + "@sentry/vite-plugin@*": + peerDependencies: + rollup: "*" diff --git a/web/package.json b/web/package.json index 75cfde3de5..63e529de70 100644 --- a/web/package.json +++ b/web/package.json @@ -18,6 +18,7 @@ "@emotion/styled": "^11.8.1", "@mui/icons-material": "^5.5.1", "@mui/material": "5.15.20", + "@mui/system": "^5.15.14", "@mui/x-data-grid-pro": "^6.0.0", "@mui/x-date-pickers": "^7.29.4", "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51", @@ -57,6 +58,7 @@ "prettier": "^3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-is": "^19.2.4", "react-redux": "^9.1.2", "react-router-dom": "^7.6.2", "recharts": "^3.0.0", @@ -83,25 +85,33 @@ "preview": "vite preview" }, "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.0", "@cypress/code-coverage": "^4.0.0", "@eslint/compat": "^2.0.0", "@testing-library/dom": "^10.1.0", "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", + "@types/babel__core": "^7", + "@types/babel__preset-env": "^7", "@types/jest": "^30.0.0", + "@types/react-is": "^19", "@types/recharts": "^1.8.23", "@vitejs/plugin-react": "^4.3.1", + "babel-loader": "^10.1.1", "cypress": "^15.10.0", "eslint": "^9.7.0", "eslint-plugin-react-hooks": "^7.0.0", "eslint-plugin-react-refresh": "^0.4.7", "globals": "^17.0.0", + "rollup": "^4.59.0", "start-server-and-test": "^2.0.0", "ts-sinon": "^2.0.2", "vite": "^7.0.0", "vite-plugin-istanbul": "^7.0.0", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^4.2.0", + "webpack": "^5.105.4" }, "nyc": { "report-dir": "coverage-cypress", diff --git a/web/yarn.lock b/web/yarn.lock index 0b2b630d08..756032ccff 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -36,14 +36,14 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.28.6": +"@babel/compat-data@npm:^7.28.6, @babel/compat-data@npm:^7.29.0": version: 7.29.0 resolution: "@babel/compat-data@npm:7.29.0" checksum: 10c0/08f348554989d23aa801bf1405aa34b15e841c0d52d79da7e524285c77a5f9d298e70e11d91cc578d8e2c9542efc586d50c5f5cf8e1915b254a9dcf786913a94 languageName: node linkType: hard -"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4, @babel/core@npm:^7.28.0": +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4, @babel/core@npm:^7.28.0, @babel/core@npm:^7.29.0": version: 7.29.0 resolution: "@babel/core@npm:7.29.0" dependencies: @@ -79,117 +79,1033 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.28.6": +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.28.6": version: 7.28.6 resolution: "@babel/helper-compilation-targets@npm:7.28.6" dependencies: - "@babel/compat-data": "npm:^7.28.6" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/3fcdf3b1b857a1578e99d20508859dbd3f22f3c87b8a0f3dc540627b4be539bae7f6e61e49d931542fe5b557545347272bbdacd7f58a5c77025a18b745593a50 + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/3fcdf3b1b857a1578e99d20508859dbd3f22f3c87b8a0f3dc540627b4be539bae7f6e61e49d931542fe5b557545347272bbdacd7f58a5c77025a18b745593a50 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/0b62b46717891f4366006b88c9b7f277980d4f578c4c3789b7a4f5a2e09e121de4cda9a414ab403986745cd3ad1af3fe2d948c9f78ab80d4dc085afc9602af50 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1, @babel/helper-create-regexp-features-plugin@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + regexpu-core: "npm:^6.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7af3d604cadecdb2b0d2cedd696507f02a53a58be0523281c2d6766211443b55161dde1e6c0d96ab16ddfd82a2607a2f792390caa24797e9733631f8aa86859f + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.7": + version: 0.6.7 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.7" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + debug: "npm:^4.4.3" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.11" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/1c812c59051998910b7b88fc6c314b628998cf0df02a460e5c141c2cde6fb6e6bb41a97b1ad3c038ccda5517fbe14bc1b4cca21f7333225b11c416a1169055f3 + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" + dependencies: + "@babel/traverse": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + checksum: 10c0/4e6e05fbf4dffd0bc3e55e28fcaab008850be6de5a7013994ce874ec2beb90619cda4744b11607a60f8aae0227694502908add6188ceb1b5223596e765b44814 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6f03e14fc30b287ce0b839474b5f271e72837d0cafe6b172d759184d998fbee3903a035e81e07c2c596449e504f453463d58baa65b6f40a37ded5bec74620b2b + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.27.1, @babel/helper-replace-supers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-replace-supers@npm:7.28.6" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/04663c6389551b99b8c3e7ba4e2638b8ca2a156418c26771516124c53083aa8e74b6a45abe5dd46360af79709a0e9c6b72c076d0eab9efecdd5aaf836e79d8d5 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/helper-wrap-function@npm:7.28.6" + dependencies: + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/110674c7aa705dd8cc34f278628f540b37a4cb35e81fcaf557772e026a6fd95f571feb51a8efb146e4e91bbf567dc9dd7f534f78da80f55f4be2ec842f36b678 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" + dependencies: + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/c4a779c66396bb0cf619402d92f1610601ff3832db2d3b86b9c9dd10983bf79502270e97ac6d5280cea1b1a37de2f06ecbac561bd2271545270407fbe64027cb + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/parser@npm:7.29.0" + dependencies: + "@babel/types": "npm:^7.29.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/844b7c7e9eec6d858262b2f3d5af75d3a6bbd9d3ecc740d95271fbdd84985731674536f5d8ac98f2dc0e8872698b516e406636e4d0cb04b50afe471172095a53 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/f1a9194e8d1742081def7af748e9249eb5082c25d0ced292720a1f054895f99041c764a05f45af669a2c8898aeb79266058aedb0d3e1038963ad49be8288918a + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f3b8bdccb9b4d3e3b9226684ca518e055399d05579da97dfe0160a38d65198cfe7dce809e73179d6463a863a040f980de32425a876d88efe4eda933d0d95982c + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1be160e2c426faa74e5be2e30e39e8d0d8c543063bd5d06cd804f8751b8fbcb82ce824ca7f9ce4b09c003693f6c06a11ce503b7e34d85e1a259631e4c3f72ad2 + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.29.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.29.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4080fc5e7dad7761bfebbb4fbe06bdfeb3a8bf0c027bcb4373e59e6b3dc7c5002eca7cbb1afba801d6439df8f92f7bcb3fb862e8fbbe43a9e59bb5653dcc0568 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2eb0826248587df6e50038f36194a138771a7df22581020451c7779edeaf9ef39bf47c5b7a20ae2645af6416e8c896feeca273317329652e84abd79a4ab920ad + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2e3e09e1f9770b56cef4dcbffddf262508fd03416072f815ac66b2b224a3a12cd285cfec12fc067f1add414e7db5ce6dafb5164a6e0fb1a728e6a97d0c6f6e9d + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-properties@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c4327fcd730c239d9f173f9b695b57b801729e273b4848aef1f75818069dfd31d985d75175db188d947b9b1bbe5353dae298849042026a5e4fcf07582ff3f9f1 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/dbe9b1fd302ae41b73186e17ac8d8ecf625ebc2416a91f2dc8013977a1bdf21e6ea288a83f084752b412242f3866e789d4fddeb428af323fe35b60e0fae4f98c + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-classes@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dc22f1f6eadab17305128fbf9cc5f30e87a51a77dd0a6d5498097994e8a9b9a90ab298c11edf2342acbeaac9edc9c601cad72eedcf4b592cd465a787d7f41490 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/template": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1e9893503ae6d651125701cc29450e87c0b873c8febebff19da75da9c40cfb7968c52c28bf948244e461110aeb7b3591f2cc199b7406ff74a24c50c7a5729f39 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/288207f488412b23bb206c7c01ba143714e2506b72a9ec09e993f28366cc8188d121bde714659b3437984a86d2881d9b1b06de3089d5582823ccf2f3b3eaa2c4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e2fb76b7ae99087cf4212013a3ca9dee07048f90f98fd6264855080fb6c3f169be11c9b8c9d8b26cf9a407e4d0a5fa6e103f7cef433a542b75cf7127c99d4f97 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.29.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6f03d9e5e31a05b28555541be6e283407e08447a36be6ddf8068b3efa970411d832e04b1282e2b894baf89a3864ff7e7f1e36346652a8d983170c6d548555167 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e6ea28c26e058fe61ada3e70b0def1992dd5a44f5fc14d8e2c6a3a512fb4d4c6dc96a3e1d0b466d83db32a9101e0b02df94051e48d3140da115b8ea9f8a31f37 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4572d955a50dbc9a652a19431b4bb822cb479ee6045f4e6df72659c499c13036da0a2adf650b07ca995f2781e80aa868943bea1e7bff1de3169ec3f0a73a902e + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-json-strings@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ab1091798c58e6c0bb8a864ee2b727c400924592c6ed69797a26b4c205f850a935de77ad516570be0419c279a3d9f7740c2aa448762eb8364ea77a6a357a9653 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4632a35453d2131f0be466681d0a33e3db44d868ff51ec46cd87e0ebd1e47c6a39b894f7d1c9b06f931addf6efa9d30e60c4cdedeb4f69d426f683e11f8490cf + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7c45992797c6150644c8552feff4a016ba7bd6d59ff2b039ed969a9c5b20a6804cd9d21db5045fc8cca8ca7f08262497e354e93f8f2be6a1cdf3fbfa8c31a9b6 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.29.0" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.29.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/44ea502f2c990398b7d9adc5b44d9e1810a0a5e86eebc05c92d039458f0b3994fe243efa9353b90f8a648d8a91b79845fb353d8679d7324cc9de0162d732771d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.29.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/1904db22da7f2bc3e380cd2c0786bda330ee1b1b3efa3f5203d980708c4bfeb5daa4dff48d01692193040bcc5f275dbdc0c2eadc8b1eb1b6dfe363564ad6e898 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6607f2201d66ccb688f0b1db09475ef995837df19f14705da41f693b669f834c206147a854864ab107913d7b4f4748878b0cd9fe9ca8bfd1bee0c206fc027b49 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/191097d8d2753cdd16d1acca65a945d1645ab20b65655c2f5b030a9e38967a52e093dcb21ebf391e342222705c6ffe5dea15dafd6257f7b51b77fb64a830b637 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f55334352d4fcde385f2e8a58836687e71ff668c9b6e4c34d52575bf2789cdde92d9d3116edba13647ac0bc3e51fb2a6d1e8fb822dce7e8123334b82600bc4c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/36e8face000ee65e478a55febf687ce9be7513ad498c60dfe585851555565e0c28e7cb891b3c59709318539ce46f7697d5f42130eb18f385cd47e47cfa297446 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c159cc74115c2266be21791f192dd079e2aeb65c8731157e53b80fcefa41e8e28ad370021d4dfbdb31f25e5afa0322669a8eb2d032cd96e65ac37e020324c763 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-methods@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fb504e2bfdcf3f734d2a90ab20d61427c58385f57f950d3de6ff4e6d12dd4aa7d552147312d218367e129b7920dccfc3230ba554de861986cda38921bad84067 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0f6bbc6ec3f93b556d3de7d56bf49335255fc4c43488e51a5025d6ee0286183fd3cf950ffcac1bbeed8a45777f860a49996455c8d3b4a04c3b1a5f28e697fe31 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031 languageName: node linkType: hard -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 +"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-module-imports@npm:7.28.6" +"@babel/plugin-transform-regenerator@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.29.0" dependencies: - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/86c7db9b97f85ee47c0fae0528802cbc06e5775e61580ee905335c16bb971270086764a3859873d9adcd7d0f913a5b93eb0dc271aec8fb9e93e090e4ac95e29e languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.28.6": +"@babel/plugin-transform-regexp-modifiers@npm:^7.28.6": version: 7.28.6 - resolution: "@babel/helper-module-transforms@npm:7.28.6" + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6" dependencies: - "@babel/helper-module-imports": "npm:^7.28.6" - "@babel/helper-validator-identifier": "npm:^7.28.5" - "@babel/traverse": "npm:^7.28.6" + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/6f03e14fc30b287ce0b839474b5f271e72837d0cafe6b172d759184d998fbee3903a035e81e07c2c596449e504f453463d58baa65b6f40a37ded5bec74620b2b + checksum: 10c0/97e36b086800f71694fa406abc00192e3833662f2bdd5f51c018bd0c95eef247c4ae187417c207d03a9c5374342eac0bb65a39112c431a9b23b09b1eda1562e5 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.27.1": - version: 7.28.6 - resolution: "@babel/helper-plugin-utils@npm:7.28.6" - checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.27.1": +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 +"@babel/plugin-transform-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-spread@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bcac50e558d6f0c501cbce19ec197af558cef51fe3b3a6eba27276e323e57a5be28109b4264a5425ac12a67bf95d6af9c2a42b05e79c522ce913fb9529259d76 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.27.1": +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 languageName: node linkType: hard -"@babel/helpers@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helpers@npm:7.28.6" +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: - "@babel/template": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/c4a779c66396bb0cf619402d92f1610601ff3832db2d3b86b9c9dd10983bf79502270e97ac6d5280cea1b1a37de2f06ecbac561bd2271545270407fbe64027cb + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": - version: 7.29.0 - resolution: "@babel/parser@npm:7.29.0" +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: - "@babel/types": "npm:^7.29.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031 + checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": +"@babel/plugin-transform-unicode-property-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b25f8cde643f4f47e0fa4f7b5c552e2dfbb6ad0ce07cf40f7e8ae40daa9855ad855d76d4d6d010153b74e48c8794685955c92ca637c0da152ce5f0fa9e7c90fa + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/c03c8818736b138db73d1f7a96fbfa22d1994639164d743f0f00e6383d3b7b3144d333de960ff4afad0bddd0baaac257295e3316969eba995b1b6a1b4dec933e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/preset-env@npm:7.29.0" + dependencies: + "@babel/compat-data": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.6" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.28.6" + "@babel/plugin-syntax-import-attributes": "npm:^7.28.6" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.29.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.28.6" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.6" + "@babel/plugin-transform-class-properties": "npm:^7.28.6" + "@babel/plugin-transform-class-static-block": "npm:^7.28.6" + "@babel/plugin-transform-classes": "npm:^7.28.6" + "@babel/plugin-transform-computed-properties": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-dotall-regex": "npm:^7.28.6" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.6" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.6" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.28.6" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.6" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6" + "@babel/plugin-transform-modules-systemjs": "npm:^7.29.0" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.28.6" + "@babel/plugin-transform-numeric-separator": "npm:^7.28.6" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.6" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.28.6" + "@babel/plugin-transform-optional-chaining": "npm:^7.28.6" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.28.6" + "@babel/plugin-transform-private-property-in-object": "npm:^7.28.6" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.29.0" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.28.6" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.28.6" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.28.6" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.28.6" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.15" + babel-plugin-polyfill-corejs3: "npm:^0.14.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.6" + core-js-compat: "npm:^3.48.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/08737e333a538703ba20e9e93b5bfbc01abbb9d3b2519b5b62ad05d3b6b92d79445b1dac91229b8cfcfb0b681b22b7c6fa88d7c1cc15df1690a23b21287f55b6 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 languageName: node linkType: hard @@ -211,7 +1127,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": version: 7.29.0 resolution: "@babel/traverse@npm:7.29.0" dependencies: @@ -226,7 +1142,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.4.4": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" dependencies: @@ -1055,6 +1971,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.5.5 resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" @@ -1062,7 +1988,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28, @jridgewell/trace-mapping@npm:^0.3.31": +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28, @jridgewell/trace-mapping@npm:^0.3.31": version: 0.3.31 resolution: "@jridgewell/trace-mapping@npm:0.3.31" dependencies: @@ -1222,7 +2148,7 @@ __metadata: languageName: node linkType: hard -"@mui/system@npm:^5.15.20": +"@mui/system@npm:^5.15.14, @mui/system@npm:^5.15.20": version: 5.18.0 resolution: "@mui/system@npm:5.18.0" dependencies: @@ -2180,7 +3106,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -2211,6 +3137,13 @@ __metadata: languageName: node linkType: hard +"@types/babel__preset-env@npm:^7": + version: 7.10.0 + resolution: "@types/babel__preset-env@npm:7.10.0" + checksum: 10c0/5ad0c3a8bec4f7612ee8aeecb4ee94494d3bc193f6da608cd118175e726bb2cf649515aded650defb968bfae4ec6e6c52c0c06fc83be261c0b8eaa3f8f2cf336 + languageName: node + linkType: hard + "@types/babel__template@npm:*": version: 7.4.4 resolution: "@types/babel__template@npm:7.4.4" @@ -2332,6 +3265,26 @@ __metadata: languageName: node linkType: hard +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + "@types/esri-leaflet@npm:^3.0.0": version: 3.0.4 resolution: "@types/esri-leaflet@npm:3.0.4" @@ -2341,7 +3294,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": +"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 @@ -2404,7 +3357,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -2480,6 +3433,15 @@ __metadata: languageName: node linkType: hard +"@types/react-is@npm:^19": + version: 19.2.0 + resolution: "@types/react-is@npm:19.2.0" + dependencies: + "@types/react": "npm:*" + checksum: 10c0/ff49ac8b8d439c3377e11d2f9f491ed4f8c8ee800225a40093c7941715ca8ccbde1b3833c5435354a8e39305fd0a163019d97f033c9402bc4b46f515851d2290 + languageName: node + linkType: hard + "@types/react-plotly.js@npm:^2.2.4": version: 2.6.4 resolution: "@types/react-plotly.js@npm:2.6.4" @@ -2840,69 +3802,234 @@ __metadata: languageName: node linkType: hard -"@vitest/mocker@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/mocker@npm:4.0.18" +"@vitest/mocker@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/mocker@npm:4.0.18" + dependencies: + "@vitest/spy": "npm:4.0.18" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.21" + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/fb0a257e7e167759d4ad228d53fa7bad2267586459c4a62188f2043dd7163b4b02e1e496dc3c227837f776e7d73d6c4343613e89e7da379d9d30de8260f1ee4b + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/pretty-format@npm:4.0.18" + dependencies: + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/0086b8c88eeca896d8e4b98fcdef452c8041a1b63eb9e85d3e0bcc96c8aa76d8e9e0b6990ebb0bb0a697c4ebab347e7735888b24f507dbff2742ddce7723fd94 + languageName: node + linkType: hard + +"@vitest/runner@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/runner@npm:4.0.18" + dependencies: + "@vitest/utils": "npm:4.0.18" + pathe: "npm:^2.0.3" + checksum: 10c0/fdb4afa411475133c05ba266c8092eaf1e56cbd5fb601f92ec6ccb9bab7ca52e06733ee8626599355cba4ee71cb3a8f28c84d3b69dc972e41047edc50229bc01 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/snapshot@npm:4.0.18" + dependencies: + "@vitest/pretty-format": "npm:4.0.18" + magic-string: "npm:^0.30.21" + pathe: "npm:^2.0.3" + checksum: 10c0/d3bfefa558db9a69a66886ace6575eb96903a5ba59f4d9a5d0fecb4acc2bb8dbb443ef409f5ac1475f2e1add30bd1d71280f98912da35e89c75829df9e84ea43 + languageName: node + linkType: hard + +"@vitest/spy@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/spy@npm:4.0.18" + checksum: 10c0/6de537890b3994fcadb8e8d8ac05942320ae184f071ec395d978a5fba7fa928cbb0c5de85af86a1c165706c466e840de8779eaff8c93450c511c7abaeb9b8a4e + languageName: node + linkType: hard + +"@vitest/utils@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/utils@npm:4.0.18" + dependencies: + "@vitest/pretty-format": "npm:4.0.18" + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/4a3c43c1421eb90f38576926496f6c80056167ba111e63f77cf118983902673737a1a38880b890d7c06ec0a12475024587344ee502b3c43093781533022f2aeb + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" dependencies: - "@vitest/spy": "npm:4.0.18" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.21" - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/fb0a257e7e167759d4ad228d53fa7bad2267586459c4a62188f2043dd7163b4b02e1e496dc3c227837f776e7d73d6c4343613e89e7da379d9d30de8260f1ee4b + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 languageName: node linkType: hard -"@vitest/pretty-format@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/pretty-format@npm:4.0.18" +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" dependencies: - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/0086b8c88eeca896d8e4b98fcdef452c8041a1b63eb9e85d3e0bcc96c8aa76d8e9e0b6990ebb0bb0a697c4ebab347e7735888b24f507dbff2742ddce7723fd94 + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee languageName: node linkType: hard -"@vitest/runner@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/runner@npm:4.0.18" +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" dependencies: - "@vitest/utils": "npm:4.0.18" - pathe: "npm:^2.0.3" - checksum: 10c0/fdb4afa411475133c05ba266c8092eaf1e56cbd5fb601f92ec6ccb9bab7ca52e06733ee8626599355cba4ee71cb3a8f28c84d3b69dc972e41047edc50229bc01 + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 languageName: node linkType: hard -"@vitest/snapshot@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/snapshot@npm:4.0.18" +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" dependencies: - "@vitest/pretty-format": "npm:4.0.18" - magic-string: "npm:^0.30.21" - pathe: "npm:^2.0.3" - checksum: 10c0/d3bfefa558db9a69a66886ace6575eb96903a5ba59f4d9a5d0fecb4acc2bb8dbb443ef409f5ac1475f2e1add30bd1d71280f98912da35e89c75829df9e84ea43 + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 languageName: node linkType: hard -"@vitest/spy@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/spy@npm:4.0.18" - checksum: 10c0/6de537890b3994fcadb8e8d8ac05942320ae184f071ec395d978a5fba7fa928cbb0c5de85af86a1c165706c466e840de8779eaff8c93450c511c7abaeb9b8a4e +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f languageName: node linkType: hard -"@vitest/utils@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/utils@npm:4.0.18" - dependencies: - "@vitest/pretty-format": "npm:4.0.18" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/4a3c43c1421eb90f38576926496f6c80056167ba111e63f77cf118983902673737a1a38880b890d7c06ec0a12475024587344ee502b3c43093781533022f2aeb +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 languageName: node linkType: hard @@ -2913,6 +4040,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: 10c0/338eb46fc1aed5544f628344cb9af189450b401d152ceadbf1f5746901a5d923016cd0e7740d5606062d374fdf6941c29bb515d2bd133c4f4242d5d4cd73a3c7 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2922,7 +4058,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.15.0": +"acorn@npm:^8.15.0, acorn@npm:^8.16.0": version: 8.16.0 resolution: "acorn@npm:8.16.0" bin: @@ -2957,6 +4093,31 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + "ajv@npm:^6.14.0": version: 6.14.0 resolution: "ajv@npm:6.14.0" @@ -2969,6 +4130,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.18.0 + resolution: "ajv@npm:8.18.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/e7517c426173513a07391be951879932bdf3348feaebd2199f5b901c20f99d60db8cd1591502d4d551dc82f594e82a05c4fe1c70139b15b8937f7afeaed9532f + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -3290,6 +4463,24 @@ __metadata: languageName: node linkType: hard +"babel-loader@npm:^10.1.1": + version: 10.1.1 + resolution: "babel-loader@npm:10.1.1" + dependencies: + find-up: "npm:^5.0.0" + peerDependencies: + "@babel/core": ^7.12.0 || ^8.0.0-beta.1 + "@rspack/core": ^1.0.0 || ^2.0.0-0 + webpack: ">=5.61.0" + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/09a14b66aadfc98b4fde123bcdf6e5481fb0a8a0daad1e225ea27656fd006a426d6446d34763b6af94f7a7333c52c9bead9ebefb42ad5b09a27bad65b6dac8f7 + languageName: node + linkType: hard + "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -3301,6 +4492,42 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.4.15": + version: 0.4.16 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.16" + dependencies: + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/05d4b434e1c4013558f679a2025b9f9da59dcea669e1477519a30cf94b66be7dab3d6b84faf7092d825a94b875fcea745fdba2fe8b1a8825329f6688d9d60ea5 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.14.0": + version: 0.14.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.14.1" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" + core-js-compat: "npm:^3.48.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/c1fa84e5febbdc785b8ed396fe70581e3358e7c50f58c62999e9ce75c6a71d0848d62691cb07b4e58a23eec77c84091df58ac5354126ca244e15f5fd47362497 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.6": + version: 0.6.7 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.7" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.7" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/a2a2c9256841e9ab632ef52d6b6fc6162537739ff23806307e4a13e94b5bd32446ad4ef80ab04685542a8caf874299a3f291ffb5b62e26309a45355efc4da261 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -3389,7 +4616,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.0": +"browserslist@npm:^4.24.0, browserslist@npm:^4.28.1": version: 4.28.1 resolution: "browserslist@npm:4.28.1" dependencies: @@ -3411,6 +4638,13 @@ __metadata: languageName: node linkType: hard +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + "buffer@npm:^5.7.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -3557,6 +4791,13 @@ __metadata: languageName: node linkType: hard +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10c0/3058da7a5f4934b87cf6a90ef5fb68ebc5f7d06f143ed5a4650208e5d7acae47bc03ec844b29fbf5ba7e46e8daa6acecc878f7983a4f4bb7271593da91e61ff5 + languageName: node + linkType: hard + "ci-info@npm:^4.1.0, ci-info@npm:^4.2.0": version: 4.4.0 resolution: "ci-info@npm:4.4.0" @@ -3693,6 +4934,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + "commander@npm:^6.2.1": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -3742,6 +4990,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.48.0": + version: 3.48.0 + resolution: "core-js-compat@npm:3.48.0" + dependencies: + browserslist: "npm:^4.28.1" + checksum: 10c0/7bb6522127928fff5d56c7050f379a034de85fe2d5c6e6925308090d4b51fb0cb88e0db99619c932ee84d8756d531bf851232948fe1ad18598cb1e7278e8db13 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -4261,6 +5518,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.20.0": + version: 5.20.0 + resolution: "enhanced-resolve@npm:5.20.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.3.0" + checksum: 10c0/4ed5f38406fc9ad74c58a3d63b8215862243ab0ed6b0efc51ccdb72cdcedd3ac8638abe298680b279d7a83c3cb140e5eea7a5f8bd99696c74588f07ad89a95a7 + languageName: node + linkType: hard + "enquirer@npm:^2.3.6": version: 2.4.1 resolution: "enquirer@npm:2.4.1" @@ -4409,6 +5676,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 10c0/ae78dbbd43035a4b972c46cfb6877e374ea290adfc62bc2f5a083fea242c0b2baaab25c5886af86be55f092f4a326741cb94334cd3c478c383fdc8a9ec5ff817 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -4669,6 +5943,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + "eslint-scope@npm:^8.4.0": version: 8.4.0 resolution: "eslint-scope@npm:8.4.0" @@ -4800,6 +6084,13 @@ __metadata: languageName: node linkType: hard +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" @@ -4859,6 +6150,13 @@ __metadata: languageName: node linkType: hard +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + "execa@npm:4.1.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -4996,6 +6294,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.1.0 + resolution: "fast-uri@npm:3.1.0" + checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -5372,6 +6677,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + "glob@npm:^10.4.1": version: 10.5.0 resolution: "glob@npm:10.5.0" @@ -5453,7 +6765,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -6258,6 +7570,17 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + "joi@npm:^18.0.2": version: 18.0.2 resolution: "joi@npm:18.0.2" @@ -6357,7 +7680,7 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^3.0.2": +"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": version: 3.1.0 resolution: "jsesc@npm:3.1.0" bin: @@ -6373,7 +7696,7 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0": +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 @@ -6387,6 +7710,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" @@ -6553,6 +7883,13 @@ __metadata: languageName: node linkType: hard +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 10c0/a523b6329f114e0a98317158e30a7dfce044b731521be5399464010472a93a15ece44757d1eaed1d8845019869c5390218bc1c7c3110f4eeaef5157394486eac + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -6571,6 +7908,13 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + "lodash.flattendeep@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flattendeep@npm:4.4.0" @@ -6789,7 +8133,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -6952,6 +8296,13 @@ __metadata: languageName: node linkType: hard +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + "nise@npm:^4.0.4": version: 4.1.0 resolution: "nise@npm:4.1.0" @@ -7768,7 +9119,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^19.0.0, react-is@npm:^19.2.3": +"react-is@npm:^19.0.0, react-is@npm:^19.2.3, react-is@npm:^19.2.4": version: 19.2.4 resolution: "react-is@npm:19.2.4" checksum: 10c0/477a7cfc900f24194606e315fa353856a3a13487ea8eca841678817cad4daef64339ea0d1e84e58459fc75dbe0d9ba00bb0cc626db3d07e0cf31edc64cb4fa37 @@ -7918,6 +9269,22 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.2.2": + version: 10.2.2 + resolution: "regenerate-unicode-properties@npm:10.2.2" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/66a1d6a1dbacdfc49afd88f20b2319a4c33cee56d245163e4d8f5f283e0f45d1085a78f7f7406dd19ea3a5dd7a7799cd020cd817c97464a7507f9d10fbdce87c + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -7932,6 +9299,38 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.3.1": + version: 6.4.0 + resolution: "regexpu-core@npm:6.4.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.2" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.13.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.2.1" + checksum: 10c0/1eed9783c023dd06fb1f3ce4b6e3fdf0bc1e30cb036f30aeb2019b351e5e0b74355b40462282ea5db092c79a79331c374c7e9897e44a5ca4509e9f0b570263de + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.13.0": + version: 0.13.0 + resolution: "regjsparser@npm:0.13.0" + dependencies: + jsesc: "npm:~3.1.0" + bin: + regjsparser: bin/parser + checksum: 10c0/4702f85cda09f67747c1b2fb673a0f0e5d1ba39d55f177632265a0be471ba59e3f320623f411649141f752b126b8126eac3ff4c62d317921e430b0472bfc6071 + languageName: node + linkType: hard + "release-zalgo@npm:^1.0.0": version: 1.0.0 resolution: "release-zalgo@npm:1.0.0" @@ -7964,6 +9363,13 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -8008,7 +9414,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.19.0": +"resolve@npm:^1.19.0, resolve@npm:^1.22.11": version: 1.22.11 resolution: "resolve@npm:1.22.11" dependencies: @@ -8037,7 +9443,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.11#optional!builtin": version: 1.22.11 resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" dependencies: @@ -8101,7 +9507,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.43.0": +"rollup@npm:^4.43.0, rollup@npm:^4.59.0": version: 4.59.0 resolution: "rollup@npm:4.59.0" dependencies: @@ -8280,6 +9686,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/1c8d2c480a026d7c02ab2ecbe5919133a096d6a721a3f201fa50663e4f30f6d6ba020dfddd93cb828b66b922e76b342e103edd19a62c95c8f60e9079cc403202 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -8522,6 +9940,16 @@ __metadata: languageName: node linkType: hard +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -8529,7 +9957,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 @@ -8820,7 +10248,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -8869,6 +10297,13 @@ __metadata: languageName: node linkType: hard +"tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: 10c0/cb9d67cc2c6a74dedc812ef3085d9d681edd2c1fa18e4aef57a3c0605fdbe44e6b8ea00bd9ef21bc74dd45314e39d31227aa031ebf2f5e38164df514136f2681 + languageName: node + linkType: hard + "tar@npm:^7.5.4": version: 7.5.11 resolution: "tar@npm:7.5.11" @@ -8882,6 +10317,41 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.3.17": + version: 5.4.0 + resolution: "terser-webpack-plugin@npm:5.4.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/1feed4b9575af795dae6af0c8f0d76d6e1fb7b357b8628d90e834c23a651b918a58cdc48d0ae6c1f0581f74bc8169b33c3b8d049f2d2190bac4e310964e59fde + languageName: node + linkType: hard + +"terser@npm:^5.31.1": + version: 5.46.0 + resolution: "terser@npm:5.46.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.15.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/93ad468f13187c4f66b609bbfc00a6aee752007779ca3157f2c1ee063697815748d6010fd449a16c30be33213748431d5f54cc0224ba6a3fbbf5acd3582a4356 + languageName: node + linkType: hard + "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -9218,6 +10688,37 @@ __metadata: languageName: node linkType: hard +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.2.1": + version: 2.2.1 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" + checksum: 10c0/93acd1ad9496b600e5379d1aaca154cf551c5d6d4a0aefaf0984fc2e6288e99220adbeb82c935cde461457fb6af0264a1774b8dfd4d9a9e31548df3352a4194d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.2.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.2.0" + checksum: 10c0/b338529831c988ac696f2bdbcd4579d1c5cc844b24eda7269973c457fa81989bdb49a366af37a448eb1a60f1dae89559ea2a5854db2797e972a0162eee0778c6 + languageName: node + linkType: hard + "unique-filename@npm:^5.0.0": version: 5.0.0 resolution: "unique-filename@npm:5.0.0" @@ -9493,6 +10994,16 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:^2.5.1": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 + languageName: node + linkType: hard + "web-worker@npm:^1.2.0": version: 1.5.0 resolution: "web-worker@npm:1.5.0" @@ -9514,6 +11025,51 @@ __metadata: languageName: node linkType: hard +"webpack-sources@npm:^3.3.4": + version: 3.3.4 + resolution: "webpack-sources@npm:3.3.4" + checksum: 10c0/94a42508531338eb41939cf1d48a4a8a6db97f3a47e5453cff2133a68d3169ca779d4bcbe9dfed072ce16611959eba1e16f085bc2dc56714e1a1c1783fd661a3 + languageName: node + linkType: hard + +"webpack@npm:^5.105.4": + version: 5.105.4 + resolution: "webpack@npm:5.105.4" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.16.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.28.1" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.20.0" + es-module-lexer: "npm:^2.0.0" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.3.1" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.17" + watchpack: "npm:^2.5.1" + webpack-sources: "npm:^3.3.4" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/e9896d20bac351b119d59942b7efae5b117056ecf203acc0d1a84ecbf0a5a9a80ca733735f96bd163e3530be6ab7f615cd67e5320bd3c47d709c9bfe376c3280 + languageName: node + linkType: hard + "whatwg-encoding@npm:^3.1.1": version: 3.1.1 resolution: "whatwg-encoding@npm:3.1.1" @@ -9670,12 +11226,15 @@ __metadata: version: 0.0.0-use.local resolution: "wps-web@workspace:." dependencies: + "@babel/core": "npm:^7.29.0" + "@babel/preset-env": "npm:^7.29.0" "@cypress/code-coverage": "npm:^4.0.0" "@emotion/react": "npm:^11.8.2" "@emotion/styled": "npm:^11.8.1" "@eslint/compat": "npm:^2.0.0" "@mui/icons-material": "npm:^5.5.1" "@mui/material": "npm:5.15.20" + "@mui/system": "npm:^5.15.14" "@mui/x-data-grid-pro": "npm:^6.0.0" "@mui/x-date-pickers": "npm:^7.29.4" "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51" @@ -9686,6 +11245,8 @@ __metadata: "@testing-library/jest-dom": "npm:^6.4.2" "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.2" + "@types/babel__core": "npm:^7" + "@types/babel__preset-env": "npm:^7" "@types/esri-leaflet": "npm:^3.0.0" "@types/jest": "npm:^30.0.0" "@types/leaflet": "npm:^1.7.0" @@ -9693,6 +11254,7 @@ __metadata: "@types/luxon": "npm:^3.0.2" "@types/react": "npm:18.3.3" "@types/react-dom": "npm:^18.3.0" + "@types/react-is": "npm:^19" "@types/react-plotly.js": "npm:^2.2.4" "@types/react-router-dom": "npm:^5.3.3" "@types/recharts": "npm:^1.8.23" @@ -9702,6 +11264,7 @@ __metadata: "@vitejs/plugin-react": "npm:^4.3.1" "@vitest/coverage-v8": "npm:^4.0.8" axios: "npm:1.8.2" + babel-loader: "npm:^10.1.1" cypress: "npm:^15.10.0" date-fns: "npm:^4.0.0" eslint: "npm:^9.7.0" @@ -9727,9 +11290,11 @@ __metadata: prettier: "npm:^3.3.3" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" + react-is: "npm:^19.2.4" react-redux: "npm:^9.1.2" react-router-dom: "npm:^7.6.2" recharts: "npm:^3.0.0" + rollup: "npm:^4.59.0" start-server-and-test: "npm:^2.0.0" ts-sinon: "npm:^2.0.2" typescript: "npm:^5.2.2" @@ -9737,6 +11302,7 @@ __metadata: vite-plugin-istanbul: "npm:^7.0.0" vite-plugin-svgr: "npm:^4.2.0" vitest: "npm:^4.0.0" + webpack: "npm:^5.105.4" whatwg-fetch: "npm:^3.6.20" languageName: unknown linkType: soft From 8835fbaa1cb25c6043768d102d2d3111e1cbf5d0 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Thu, 12 Mar 2026 14:22:42 -0700 Subject: [PATCH 02/13] Restructure web into Turborepo monorepo with packages --- web/.gitignore | 1 + web/{ => apps/wps-web}/.env.cypress | 0 web/{ => apps/wps-web}/.env.example | 0 web/{ => apps/wps-web}/Dockerfile | 0 web/{ => apps/wps-web}/README.md | 0 web/{ => apps/wps-web}/cypress.config.cjs | 0 .../wps-web/cypress/downloads/downloads.html | Bin 0 -> 118577 bytes ...e-behaviour-advisory-calculator-page.cy.ts | 0 .../cypress/e2e/hfi-calculator-page.cy.ts | 0 .../cypress/e2e/morecast-2-page.cy.ts | 0 .../wps-web}/cypress/e2e/not-found-page.cy.ts | 0 .../e2e/percentile-calculator-page.cy.ts | 0 .../cypress/fixtures/fba-calc/322.json | 0 .../fixtures/fba-calc/322_209_response.json | 0 .../cypress/fixtures/fba-calc/328.json | 0 .../cypress/fixtures/fba-calc/export.csv | 4 +- .../cypress/fixtures/fba/fire-centers.json | 0 .../hfi-calc/dailies-disable-station.json | 0 .../hfi-calc/dailies-high-intensity.json | 0 .../fixtures/hfi-calc/dailies-missing.json | 0 .../fixtures/hfi-calc/dailies-saved.json | 0 .../cypress/fixtures/hfi-calc/dailies.json | 0 .../fixtures/hfi-calc/fire-centres-grass.json | 0 .../hfi-calc/fire-centres-minimal.json | 0 .../fixtures/hfi-calc/fire_centres.json | 0 .../cypress/fixtures/hfi-calc/fuel_types.json | 0 .../fixtures/hfi-calc/hfi_result_cariboo.json | 0 .../hfi-calc/hfi_result_kamloops.json | 0 .../fixtures/hfi-calc/ready-states.json | 0 .../percentiles/percentile-result.json | 0 .../percentiles/two-percentiles-result.json | 0 .../high-res-model-summaries.json | 0 .../hr-models-with-bias-adjusted.json | 0 .../weather-data/model-summaries.json | 0 .../models-with-bias-adjusted.json | 0 .../weather-data/noon-forecast-summaries.json | 0 .../fixtures/weather-data/noon-forecasts.json | 0 .../fixtures/weather-data/observations.json | 0 .../regional-model-summaries.json | 0 .../regional-models-with-bias-adjusted.json | 0 .../fixtures/weather-stations-details.json | 0 .../cypress/fixtures/weather-stations.json | 0 .../wps-web}/cypress/support/commands.ts | 0 web/{ => apps/wps-web}/cypress/support/e2e.ts | 0 .../wps-web}/cypress/support/fba-commands.ts | 0 .../wps-web}/cypress/support/hfi-commands.ts | 0 .../cypress/support/percentile-commands.ts | 0 web/{ => apps/wps-web}/cypress/tsconfig.json | 0 web/{ => apps/wps-web}/eslint.config.cjs | 0 web/{ => apps/wps-web}/index.html | 0 web/{ => apps/wps-web}/manifest.json | 0 web/{ => apps/wps-web}/mergeCoverage.cjs | 0 web/apps/wps-web/package.json | 127 +++++++++ .../wps-web}/public/images/BCID_H_rgb_rev.svg | 0 .../images/bc-wilderfire-service-logo.png | Bin .../wps-web}/public/images/bcid-192x192.png | Bin .../wps-web}/public/images/bcid-512x512.png | Bin .../public/images/bcid-apple-icon.svg | 0 .../public/images/bcid-apple-touch-icon.png | Bin .../public/images/bcid-favicon-16x16.png | Bin .../public/images/bcid-favicon-32x32.png | Bin .../wps-web}/public/images/bcid-logo-en.svg | 0 .../wps-web}/public/images/bcid-logo-fr.svg | 0 .../public/images/bcid-logo-rev-en.svg | 0 .../public/images/bcid-logo-rev-fr.svg | 0 .../public/images/bcid-symbol-rev.svg | 0 .../wps-web}/public/images/bcid-symbol.svg | 0 .../wps-web}/public/images/fbpgo_maskable.png | Bin .../wps-web}/public/images/logo-banner.svg | 0 .../wps-web}/public/images/redMarker.png | Bin web/{ => apps/wps-web}/src/app/App.tsx | 0 web/{ => apps/wps-web}/src/app/Routes.tsx | 0 web/{ => apps/wps-web}/src/app/rootReducer.ts | 0 web/{ => apps/wps-web}/src/app/store.ts | 0 .../src/commonSlices/fireCentersSlice.ts | 0 .../selectedStationGroupMembers.test.ts | 0 .../selectedStationGroupMembers.ts | 0 .../src/commonSlices/stationGroupsSlice.ts | 0 .../90th_percentile_calculator_rationale.pdf | Bin .../wps-web}/src/features/NoMatchPage.tsx | 0 .../features/auth/components/AuthWrapper.tsx | 0 .../wps-web}/src/features/auth/keycloak.ts | 0 .../wps-web}/src/features/auth/roles.ts | 0 .../auth/slices/authenticationSlice.test.ts | 0 .../auth/slices/authenticationSlice.ts | 0 .../features/cHaines/pages/CHainesPage.tsx | 0 .../cHaines/slices/cHainesModelRunsSlice.tsx | 0 .../slices/cHainesPredictionsSlice.tsx | 0 .../features/fba/calculateZoneStatus.test.ts | 0 .../src/features/fba/calculateZoneStatus.ts | 0 .../fba/components/ASAAboutDataContent.tsx | 0 .../fba/components/ASADatePicker.test.tsx | 0 .../features/fba/components/ASADatePicker.tsx | 0 .../fba/components/ActualForecastControl.tsx | 0 .../components/actualForecastControl.test.tsx | 0 .../components/infoPanel/AdvisoryReport.tsx | 0 .../fba/components/infoPanel/AdvisoryText.tsx | 0 .../components/infoPanel/FireCentreInfo.tsx | 0 .../components/infoPanel/FireZoneUnitInfo.tsx | 0 .../infoPanel/FireZoneUnitSummary.tsx | 0 .../components/infoPanel/FireZoneUnitTabs.tsx | 0 .../components/infoPanel/InfoAccordion.tsx | 0 .../infoPanel/ProvincialSummary.tsx | 0 .../fba/components/infoPanel/TabPanel.tsx | 0 .../infoPanel/advisoryReport.test.tsx | 0 .../infoPanel/advisoryText.test.tsx | 0 .../infoPanel/fireCentreInfo.test.tsx | 0 .../infoPanel/fireZoneUnitInfo.test.tsx | 0 .../infoPanel/fireZoneUnitSummary.test.tsx | 0 .../infoPanel/fireZoneUnitTabs.test.tsx | 0 .../infoPanel/infoAccordion.test.tsx | 0 .../infoPanel/provincialSummary.test.tsx | 0 .../features/fba/components/map/FBAMap.tsx | 0 .../features/fba/components/map/Legend.tsx | 0 .../fba/components/map/ScaleBarContainer.tsx | 0 .../fba/components/map/fbaMap.test.tsx | 0 .../fba/components/map/featureStylers.ts | 0 .../fba/components/map/legend.test.tsx | 0 .../components/map/scalebarContainer.test.tsx | 0 .../fba/components/viz/CriticalHours.tsx | 0 .../fba/components/viz/ElevationFlag.tsx | 0 .../fba/components/viz/ElevationInfoViz.tsx | 0 .../fba/components/viz/ElevationLabel.tsx | 0 .../fba/components/viz/ElevationStatus.tsx | 0 .../fba/components/viz/FillableFlag.tsx | 0 .../fba/components/viz/FuelDistribution.tsx | 0 .../fba/components/viz/FuelSummary.tsx | 0 .../features/fba/components/viz/color.test.ts | 0 .../src/features/fba/components/viz/color.ts | 0 .../fba/components/viz/criticalHours.test.tsx | 0 .../fba/components/viz/elevationFlag.test.tsx | 0 .../components/viz/elevationStatus.test.tsx | 0 .../fba/components/viz/fillableFlag.test.tsx | 0 .../components/viz/fuelDistribution.test.tsx | 0 .../src/features/fba/context/MapContext.tsx | 0 .../wps-web}/src/features/fba/cqlBuilder.ts | 0 .../fba/criticalHoursStartEndTime.test.ts | 0 .../features/fba/criticalHoursStartEndTime.ts | 0 .../src/features/fba/fireCentreExtents.ts | 0 .../src/features/fba/fireZoneUnitExtents.ts | 0 .../src/features/fba/hfiStatsUtils.test.ts | 0 .../src/features/fba/hfiStatsUtils.ts | 0 .../fba/hooks/useFireCentreDetails.ts | 0 .../features/fba/hooks/useLoading.test.tsx | 0 .../src/features/fba/hooks/useLoading.ts | 0 .../src/features/fba/images/mountain.png | Bin .../fba/pages/FireBehaviourAdvisoryPage.tsx | 0 .../src/features/fba/pmtilesBuilder.ts | 0 .../fireCentreHFIFuelStatsSlice.test.ts | 0 .../fba/slices/fireCentreHFIFuelStatsSlice.ts | 0 .../slices/fireCentreTPIStatsSlice.test.ts | 0 .../fba/slices/fireCentreTPIStatsSlice.ts | 0 .../fba/slices/fireZoneElevationInfoSlice.ts | 0 .../fba/slices/provincialSummarySlice.ts | 0 .../features/fba/slices/runDatesSlice.test.ts | 0 .../src/features/fba/slices/runDatesSlice.ts | 0 .../fba/slices/valueAtCoordinateSlice.ts | 0 .../src/features/fbaCalculator/RowManager.ts | 0 .../components/CriticalHoursCell.tsx | 0 .../components/CrownFractionBurnedCell.tsx | 0 .../fbaCalculator/components/ErrorAlert.tsx | 0 .../components/FBAProgressRow.tsx | 0 .../fbaCalculator/components/FBATable.tsx | 4 +- .../fbaCalculator/components/FBATableHead.tsx | 0 .../components/FBATableInstructions.tsx | 0 .../components/FbaAboutDataContent.tsx | 0 .../components/FilterColumnsModal.tsx | 0 .../components/FixedDecimalNumberCell.tsx | 0 .../fbaCalculator/components/FuelTypeCell.tsx | 0 .../components/GrassCureCell.tsx | 0 .../fbaCalculator}/components/HFICell.tsx | 2 +- .../components/LoadingIndicatorCell.tsx | 0 .../fbaCalculator/components/PrecipCell.tsx | 0 .../components/SelectionCell.tsx | 0 .../fbaCalculator/components/StatusCell.tsx | 0 .../fbaCalculator/components/TableHeader.tsx | 0 .../components/TextDisplayCell.tsx | 0 .../components/WeatherStationCell.tsx | 0 .../components/WindSpeedCell.tsx | 0 .../components/fbaProgressRow.test.tsx | 0 .../components/grassCureCell.test.tsx | 0 .../components/hfiCell.test.tsx | 2 +- .../components/loadingIndicatorCell.test.tsx | 0 .../components/precipCell.test.tsx | 0 .../components/selectionCell.test.tsx | 0 .../components/windSpeedCell.test.tsx | 0 .../src/features/fbaCalculator/fuelTypes.ts | 0 .../pages/FireBehaviourCalculatorPage.tsx | 0 .../features/fbaCalculator/rowManager.test.ts | 0 .../slices/fbaCalculatorSlice.ts | 0 .../src/features/fbaCalculator/tableState.ts | 0 .../src/features/fbaCalculator/utils.ts | 0 .../src/features/fbaCalculator/validation.ts | 0 .../fireWatch/components/CreateFireWatch.tsx | 0 .../components/DetailPanelContent.tsx | 0 .../components/FireWatchDashboard.tsx | 0 .../components/FireWatchDetailsModal.tsx | 0 .../fireWatch/components/MenuHeader.tsx | 0 .../fireWatch/components/NavigationDrawer.tsx | 0 .../fireWatch/components/OptionalHeading.tsx | 0 .../components/detailPanelContent.test.tsx | 0 .../components/fireWatchDashboard.test.tsx | 0 .../components/steps/CompleteStep.tsx | 0 .../steps/FireBehaviourIndicesStep.tsx | 0 .../fireWatch/components/steps/FuelStep.tsx | 0 .../fireWatch/components/steps/InfoStep.tsx | 0 .../components/steps/LocationStep.tsx | 0 .../components/steps/ReviewSubmitStep.tsx | 0 .../components/steps/SummaryTextLine.tsx | 0 .../steps/WeatherParametersStep.tsx | 0 .../src/features/fireWatch/constants.ts | 0 .../src/features/fireWatch/fireWatchApi.ts | 0 .../src/features/fireWatch/interfaces.ts | 0 .../fireWatch/pages/FireWatchPage.tsx | 0 .../fireWatch/slices/burnForecastSlice.ts | 0 .../slices/fireWatchFireCentresSlice.ts | 0 .../fireWatch/slices/fireWatchSlice.ts | 0 .../wps-web}/src/features/fireWatch/utils.ts | 0 .../components/AccuracyVariablePicker.tsx | 0 .../maps/FireIndicesVectorLayer.tsx | 0 .../components/maps/WeatherMap.tsx | 0 .../fireWeather/components/maps/constants.ts | 0 .../components/maps/stationAccuracy.test.ts | 0 .../components/maps/stationAccuracy.ts | 0 .../components/AboutDataModal.tsx | 0 .../components/BaseStationAttributeCells.tsx | 0 .../components/CalculatedCell.tsx | 0 .../CalculatedPlanningAreaCells.tsx | 0 .../hfiCalculator/components/DailyHFICell.tsx | 2 +- .../components/DailyViewTable.tsx | 0 .../components/DangerClassCell.tsx | 0 .../components/DayHeaders.test.tsx | 0 .../hfiCalculator/components/DayHeaders.tsx | 0 .../components/DayIndexHeaders.tsx | 0 .../components/DownloadPDFButton.tsx | 0 .../components/EmptyFireCentre.tsx | 0 .../components/EmptyStaticCells.tsx | 0 .../components/ErrorIconWithTooltip.tsx | 0 .../components/FireCentreCell.tsx | 0 .../components/FireCentreDropdown.tsx | 0 .../components/FireStartsCell.tsx | 0 .../components/FireStartsDropdown.tsx | 0 .../components/FuelTypeDropdown.tsx | 0 .../components/GrassCureCell.tsx | 0 .../components/HFIErrorAlert.tsx | 0 .../components/HFILoadingDataContainer.tsx | 0 .../components/HFIPageSubHeader.tsx | 0 .../components/HFISuccessAlert.tsx | 0 .../components/HeaderRowCell.tsx | 0 .../components/HighestDailyFIGCell.tsx | 0 .../components/IntensityGroupCell.tsx | 0 .../components/LastUpdatedHeader.tsx | 0 .../components/LoadingBackdrop.tsx | 0 .../components/MeanIntensityGroupRollup.tsx | 0 .../components/MeanPrepLevelCell.tsx | 0 .../components/PlanningAreaReadyToggle.tsx | 0 .../components/PrepDateRangeSelector.tsx | 0 .../components/PrepLevelCell.tsx | 0 .../components/RequiredDataCell.tsx | 0 .../hfiCalculator/components/StaticCells.tsx | 2 +- .../components/StationDataHeaderCells.tsx | 0 .../components/StationSelectCell.tsx | 0 .../hfiCalculator/components/StatusCell.tsx | 0 .../components/StyledFireComponents.tsx | 0 .../StyledPlanningAreaComponents.tsx | 0 .../components/StyledTableComponents.tsx | 0 .../hfiCalculator/components/ViewSwitcher.tsx | 0 .../components/ViewSwitcherToggles.tsx | 0 .../components/WeeklyROSCell.tsx | 0 .../components/WeeklyViewTable.tsx | 0 .../components/WindDirectionCell.tsx | 0 .../components/dailyHFICell.test.tsx | 0 .../components/dayIndexHeaders.test.tsx | 0 .../components/emptyFireCentre.test.tsx | 0 .../components/fireStartsDropdown.test.tsx | 0 .../components/fuelTypeDropdown.test.tsx | 0 .../components/grassCureCell.test.tsx | 0 .../components/headerRowCell.test.tsx | 0 .../components/hfiErrorAlert.test.tsx | 0 .../components/hfiLoadingDataView.test.tsx | 0 .../components/intensityGroupCell.test.tsx | 0 .../meanIntensityGroupRollup.test.tsx | 0 .../components/meanPrepLevelCell.test.tsx | 0 .../planningAreaReadyToggle.test.tsx | 0 .../components/prepLevelCell.test.tsx | 0 .../components/staticCells.test.tsx | 0 .../stationAdmin/AdminCancelButton.tsx | 0 .../stationAdmin/AdminFuelTypesDropdown.tsx | 0 .../stationAdmin/AdminRemoveButton.tsx | 0 .../stationAdmin/AdminStationDropdown.tsx | 0 .../stationAdmin/ExistingStationList.tsx | 0 .../stationAdmin/LoggedInStatus.tsx | 0 .../stationAdmin/ManageStationsButton.tsx | 0 .../stationAdmin/ManageStationsModal.tsx | 19 +- .../stationAdmin/NewStationList.tsx | 0 .../stationAdmin/PlanningAreaAdmin.tsx | 0 .../stationAdmin/SaveStationUpdatesButton.tsx | 0 .../stationAdmin/StationListAdmin.tsx | 0 .../adminFuelTypeDropdown.test.tsx | 0 .../stationAdmin/adminRemoveButton.test.tsx | 0 .../adminStationDropdown.test.tsx | 0 .../stationAdmin/loggedInStatus.test.tsx | 0 .../manageStationsButton.test.tsx | 0 .../stationAdmin/planningAreaAdmin.test.tsx | 0 .../saveStationUpdatesButton.test.tsx | 0 .../components/stationSelectCell.test.tsx | 0 .../components/statusCell.test.tsx | 0 .../hfiCalculator/components/testHelpers.ts | 0 .../components/weeklyRosCell.test.tsx | 0 .../src/features/hfiCalculator/constants.ts | 0 .../hfiCalculator/pages/HfiCalculatorPage.tsx | 0 .../slices/hfiCalculatorSlice.test.ts | 0 .../slices/hfiCalculatorSlice.ts | 0 .../slices/hfiReadySlice.test.ts | 0 .../hfiCalculator/slices/hfiReadySlice.ts | 0 .../hfiCalculator/slices/stationsSlice.ts | 0 .../src/features/hfiCalculator/util.ts | 0 .../src/features/hfiCalculator/validation.ts | 0 .../landingPage/components/BetaTag.tsx | 0 .../landingPage/components/Footer.tsx | 0 .../landingPage/components/Sidebar.tsx | 0 .../components/SidebarToolList.tsx | 0 .../landingPage/components/Subheading.tsx | 0 .../landingPage/components/ToolCard.tsx | 0 .../landingPage/components/ToolCards.tsx | 0 .../landingPage/images/collaboardIcon.svg | 0 .../features/landingPage/images/msTeams.svg | 0 .../landingPage/pages/LandingPage.tsx | 0 .../src/features/landingPage/toolInfo.tsx | 0 .../wps-web}/src/features/map/Map.tsx | 0 .../wps-web}/src/features/map/TileLayer.tsx | 0 .../wps-web}/src/features/map/VectorLayer.tsx | 0 .../moreCast2/components/ActualCell.tsx | 0 .../moreCast2/components/ColumnDefBuilder.tsx | 0 .../moreCast2/components/DataGridColumns.tsx | 0 .../moreCast2/components/EditInputCell.tsx | 0 .../moreCast2/components/ForecastCell.tsx | 0 .../moreCast2/components/ForecastDataGrid.tsx | 0 .../moreCast2/components/ForecastHeader.tsx | 0 .../components/ForecastSummaryDataGrid.tsx | 0 .../components/GridComponentRenderer.tsx | 0 .../moreCast2/components/GroupHeader.tsx | 0 .../components/InvalidCellToolTip.tsx | 0 .../moreCast2/components/ModelHeader.tsx | 0 .../moreCast2/components/MoreCast2Column.tsx | 0 .../components/MoreCast2DateRangePicker.tsx | 0 .../components/MoreCast2Snackbar.tsx | 0 .../components/MorecastAboutDataContent.tsx | 0 .../components/ResetForecastButton.tsx | 0 .../components/SaveForecastButton.tsx | 0 .../moreCast2/components/SelectableButton.tsx | 0 .../components/StationGroupDropdown.tsx | 0 .../moreCast2/components/StationPanel.tsx | 0 .../moreCast2/components/TabbedDataGrid.tsx | 0 .../moreCast2/components/ValidatedCell.tsx | 0 .../components/ValidatedForecastCell.tsx | 0 .../ValidatedGrassCureForecastCell.tsx | 0 .../ValidatedWindDirectionForecastCell.tsx | 0 .../components/WeatherModelDropdown.tsx | 0 .../components/colDefBuilder.test.tsx | 0 .../components/editInputCell.test.tsx | 0 .../components/forecastCell.test.tsx | 0 .../components/forecastHeader.test.tsx | 0 .../components/gridComponentRenderer.test.tsx | 0 .../moreCast2/components/modelHeader.test.tsx | 0 .../components/moreCast2Column.test.tsx | 0 .../components/resetForecastButton.test.tsx | 0 .../components/saveForecastButton.test.tsx | 0 .../components/selectableButton.test.tsx | 0 .../components/stationGroupsDropdown.test.tsx | 0 .../components/stationPanel.test.tsx | 0 .../components/tabbedDataGrid.test.tsx | 0 .../moreCast2/components/testHelper.tsx | 0 .../components/validatedForecastCell.test.tsx | 0 .../validatedGrassCureForecastCell.test.tsx | 0 ...alidatedWindDirectionForecastCell.test.tsx | 0 .../components/weatherModelDropdown.test.tsx | 0 .../features/moreCast2/forecastDraft.test.ts | 0 .../src/features/moreCast2/forecastDraft.ts | 0 .../src/features/moreCast2/interfaces.ts | 15 +- .../moreCast2/pages/MoreCast2Page.tsx | 0 .../src/features/moreCast2/rowFilters.test.ts | 0 .../src/features/moreCast2/rowFilters.ts | 0 .../features/moreCast2/saveForecast.test.ts | 0 .../src/features/moreCast2/saveForecasts.ts | 0 .../moreCast2/slices/dataSlice.test.ts | 0 .../features/moreCast2/slices/dataSlice.ts | 0 .../moreCast2/slices/selectedStationsSlice.ts | 0 .../moreCast2/slices/validInputSlice.test.ts | 0 .../moreCast2/slices/validInputSlice.ts | 0 .../src/features/moreCast2/util.test.ts | 0 .../wps-web}/src/features/moreCast2/util.ts | 0 .../components/PercentileActionButtons.tsx | 0 .../PercentileCalcDocumentation.tsx | 0 .../components/PercentileMeanResultTable.tsx | 0 .../components/PercentileResults.tsx | 0 .../components/PercentileSnackbar.tsx | 0 .../PercentileStationResultTable.tsx | 0 .../components/PercentileTextfield.tsx | 0 .../components/TimeRangeSlider.tsx | 0 .../components/WxStationDropdown.tsx | 0 .../pages/PercentileCalculatorPage.tsx | 0 ...PercentileCalculatorPageWithDisclaimer.tsx | 0 .../slices/percentilesSlice.ts | 0 .../components/RasterTypeDropdown.test.tsx | 0 .../components/RasterTypeDropdown.tsx | 0 .../map/RasterErrorNotification.test.tsx | 0 .../map/RasterErrorNotification.tsx | 0 .../components/map/RasterLegend.tsx | 0 .../components/map/RasterTooltip.tsx | 0 .../sfmsInsights/components/map/SFMSMap.tsx | 0 .../components/map/layerDefinitions.test.ts | 0 .../components/map/layerDefinitions.ts | 0 .../components/map/layerManager.test.ts | 0 .../components/map/layerManager.ts | 0 .../components/map/rasterConfig.ts | 0 .../map/rasterTooltipHandler.test.ts | 0 .../components/map/rasterTooltipHandler.ts | 0 .../map/rasterTooltipInteraction.test.ts | 0 .../map/rasterTooltipInteraction.ts | 0 .../components/map/sfmsFeatureStylers.test.ts | 0 .../components/map/sfmsFeatureStylers.ts | 0 .../components/map/sfmsMap.test.tsx | 0 .../pages/SFMSInsightsPage.test.tsx | 0 .../sfmsInsights/pages/SFMSInsightsPage.tsx | 0 .../features/stations/slices/stationsSlice.ts | 0 .../wps-web}/src/fonts/BCSans-Bold.woff | Bin .../wps-web}/src/fonts/BCSans-Bold.woff2 | Bin .../wps-web}/src/fonts/BCSans-BoldItalic.woff | Bin .../src/fonts/BCSans-BoldItalic.woff2 | Bin .../wps-web}/src/fonts/BCSans-Italic.woff | Bin .../wps-web}/src/fonts/BCSans-Italic.woff2 | Bin .../wps-web}/src/fonts/BCSans-Regular.woff | Bin .../wps-web}/src/fonts/BCSans-Regular.woff2 | Bin .../wps-web}/src/fonts/FONTLOG_README.txt | 0 .../wps-web}/src/fonts/LICENSE_OFL.txt | 0 web/{ => apps/wps-web}/src/index.css | 0 web/{ => apps/wps-web}/src/index.tsx | 0 web/{ => apps/wps-web}/src/react-app-env.d.ts | 0 web/{ => apps/wps-web}/src/setupTests.ts | 0 web/{ => apps/wps-web}/src/test/testUtils.ts | 0 web/{ => apps/wps-web}/src/types/global.d.ts | 0 web/{ => apps/wps-web}/src/whatwg-fetch.d.ts | 0 web/apps/wps-web/tsconfig.app.json | 26 ++ web/apps/wps-web/tsconfig.json | 11 + web/{ => apps/wps-web}/tsconfig.node.json | 0 web/{ => apps/wps-web}/vite.config.ts | 31 ++- web/{ => apps/wps-web}/vitest.config.ts | 0 web/package.json | 131 +--------- web/packages/api/package.json | 5 + web/{src/api => packages/api/src}/axios.ts | 0 .../api => packages/api/src}/cHainesAPI.ts | 0 web/{src/api => packages/api/src}/fbaAPI.ts | 2 +- .../api => packages/api/src}/fbaCalcAPI.ts | 0 .../api => packages/api/src}/forecastAPI.ts | 0 .../api/src}/hfiCalculatorAPI.ts | 17 +- web/{src/api => packages/api/src}/modelAPI.ts | 0 .../api/src}/moreCast2API.test.ts | 0 .../api => packages/api/src}/moreCast2API.ts | 19 +- .../api/src}/observationAPI.ts | 0 .../api => packages/api/src}/percentileAPI.ts | 0 web/{src/api => packages/api/src}/snow.ts | 0 .../api/src}/stationAPI.test.ts | 0 .../api => packages/api/src}/stationAPI.ts | 0 web/packages/api/tsconfig.json | 16 ++ web/packages/tsconfig/base.json | 12 + web/packages/tsconfig/package.json | 9 + web/packages/tsconfig/react-app.json | 19 ++ web/packages/types/package.json | 5 + .../types => packages/types/src}/window.d.ts | 0 web/packages/ui/package.json | 5 + .../ui/src}/AboutDataPopover.tsx | 0 .../components => packages/ui/src}/Button.tsx | 0 .../ui/src}/Container.tsx | 0 .../ui/src}/DateRangeSelector.tsx | 0 .../ui/src}/ErrorBoundary.tsx | 0 .../ui/src}/ErrorMessage.tsx | 0 .../ui/src}/FeedbackButton.tsx | 0 .../ui/src}/FireCenterDropdown.tsx | 0 .../ui/src}/FireTable.tsx | 0 .../ui/src}/GeneralHeader.tsx | 0 .../components => packages/ui/src}/Grid.tsx | 0 .../ui/src}/HeaderImage.tsx | 0 .../ui/src}/PageTitle.tsx | 0 .../ui/src}/ResetDialog.tsx | 0 .../components => packages/ui/src}/Slider.tsx | 0 .../ui/src}/StickyCell.tsx | 0 .../ui/src}/StyledFormControl.tsx | 0 .../ui/src}/WPSDatePicker.tsx | 0 .../ui/src}/aboutDataPopover.test.tsx | 6 +- .../src}/dateRangePicker/DateRangePicker.tsx | 0 .../DateRangePickerWrapper.tsx | 0 .../ui/src}/dateRangePicker/Day.tsx | 0 .../ui/src}/dateRangePicker/Header.tsx | 0 .../ui/src}/dateRangePicker/LICENSE | 0 .../ui/src}/dateRangePicker/Menu.tsx | 0 .../ui/src}/dateRangePicker/Month.tsx | 0 .../ui/src}/dateRangePicker/README.md | 0 .../dateRangePickerWrapper.test.tsx | 0 .../ui/src}/dateRangePicker/menu.test.tsx | 0 .../ui/src}/dateRangePicker/month.test.tsx | 0 .../ui/src}/dateRangePicker/types.ts | 0 .../ui/src}/dateRangePicker/utils.test.tsx | 0 .../ui/src}/dateRangePicker/utils.ts | 0 .../ui/src}/fireTable.test.tsx | 0 .../components => packages/ui/src}/index.ts | 0 .../ui/src}/resetDialog.test.tsx | 2 +- .../ui/src}/stickyCell.test.tsx | 0 web/{src/app => packages/ui/src}/theme.ts | 0 web/packages/ui/tsconfig.json | 14 + web/packages/utils/package.json | 5 + .../utils => packages/utils/src}/constants.ts | 0 .../utils => packages/utils/src}/date.test.ts | 0 web/{src/utils => packages/utils/src}/date.ts | 0 .../utils/src}/dropdown.test.ts | 0 .../utils => packages/utils/src}/dropdown.ts | 0 web/{src/utils => packages/utils/src}/env.ts | 0 .../utils => packages/utils/src}/error.ts | 0 .../utils => packages/utils/src}/format.ts | 0 .../utils => packages/utils/src}/fwi/bui.ts | 0 .../utils => packages/utils/src}/fwi/dc.ts | 0 .../utils => packages/utils/src}/fwi/dmc.ts | 0 .../utils => packages/utils/src}/fwi/ffmc.ts | 0 .../utils => packages/utils/src}/fwi/fwi.ts | 0 .../utils => packages/utils/src}/fwi/index.ts | 0 .../utils => packages/utils/src}/fwi/isi.ts | 0 .../utils/src}/getError.test.ts | 0 .../utils => packages/utils/src}/getError.ts | 0 .../utils => packages/utils/src}/strings.ts | 0 .../utils => packages/utils/src}/url.test.ts | 0 web/{src/utils => packages/utils/src}/url.ts | 0 .../utils/src}/vectorLayerUtils.test.ts | 2 +- .../utils/src}/vectorLayerUtils.ts | 0 web/packages/utils/tsconfig.json | 18 ++ web/tsconfig.app.json | 44 ---- web/tsconfig.json | 15 +- web/turbo.json | 21 ++ web/yarn.lock | 246 ++++++++++++------ 538 files changed, 551 insertions(+), 308 deletions(-) rename web/{ => apps/wps-web}/.env.cypress (100%) rename web/{ => apps/wps-web}/.env.example (100%) rename web/{ => apps/wps-web}/Dockerfile (100%) rename web/{ => apps/wps-web}/README.md (100%) rename web/{ => apps/wps-web}/cypress.config.cjs (100%) create mode 100644 web/apps/wps-web/cypress/downloads/downloads.html rename web/{ => apps/wps-web}/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/hfi-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/morecast-2-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/not-found-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/percentile-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/322.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/322_209_response.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/328.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/export.csv (99%) rename web/{ => apps/wps-web}/cypress/fixtures/fba/fire-centers.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-disable-station.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-high-intensity.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-missing.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-saved.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire-centres-grass.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire-centres-minimal.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire_centres.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fuel_types.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/hfi_result_cariboo.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/hfi_result_kamloops.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/ready-states.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/percentiles/percentile-result.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/percentiles/two-percentiles-result.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/high-res-model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/noon-forecast-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/noon-forecasts.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/observations.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/regional-model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-stations-details.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-stations.json (100%) rename web/{ => apps/wps-web}/cypress/support/commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/e2e.ts (100%) rename web/{ => apps/wps-web}/cypress/support/fba-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/hfi-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/percentile-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/tsconfig.json (100%) rename web/{ => apps/wps-web}/eslint.config.cjs (100%) rename web/{ => apps/wps-web}/index.html (100%) rename web/{ => apps/wps-web}/manifest.json (100%) rename web/{ => apps/wps-web}/mergeCoverage.cjs (100%) create mode 100644 web/apps/wps-web/package.json rename web/{ => apps/wps-web}/public/images/BCID_H_rgb_rev.svg (100%) rename web/{ => apps/wps-web}/public/images/bc-wilderfire-service-logo.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-192x192.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-512x512.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-apple-icon.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-apple-touch-icon.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-favicon-16x16.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-favicon-32x32.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-en.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-fr.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-rev-en.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-rev-fr.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-symbol-rev.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-symbol.svg (100%) rename web/{ => apps/wps-web}/public/images/fbpgo_maskable.png (100%) rename web/{ => apps/wps-web}/public/images/logo-banner.svg (100%) rename web/{ => apps/wps-web}/public/images/redMarker.png (100%) rename web/{ => apps/wps-web}/src/app/App.tsx (100%) rename web/{ => apps/wps-web}/src/app/Routes.tsx (100%) rename web/{ => apps/wps-web}/src/app/rootReducer.ts (100%) rename web/{ => apps/wps-web}/src/app/store.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/fireCentersSlice.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/selectedStationGroupMembers.test.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/selectedStationGroupMembers.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/stationGroupsSlice.ts (100%) rename web/{ => apps/wps-web}/src/documents/90th_percentile_calculator_rationale.pdf (100%) rename web/{ => apps/wps-web}/src/features/NoMatchPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/auth/components/AuthWrapper.tsx (100%) rename web/{ => apps/wps-web}/src/features/auth/keycloak.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/roles.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/slices/authenticationSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/slices/authenticationSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/cHaines/pages/CHainesPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/cHaines/slices/cHainesModelRunsSlice.tsx (100%) rename web/{ => apps/wps-web}/src/features/cHaines/slices/cHainesPredictionsSlice.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/calculateZoneStatus.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/calculateZoneStatus.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASAAboutDataContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASADatePicker.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASADatePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ActualForecastControl.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/actualForecastControl.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/AdvisoryReport.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/AdvisoryText.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireCentreInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/InfoAccordion.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/ProvincialSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/TabPanel.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/advisoryReport.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/advisoryText.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/infoAccordion.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/provincialSummary.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/FBAMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/Legend.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/ScaleBarContainer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/fbaMap.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/featureStylers.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/legend.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/scalebarContainer.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/CriticalHours.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationFlag.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationInfoViz.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationLabel.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationStatus.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FillableFlag.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FuelDistribution.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FuelSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/color.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/color.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/criticalHours.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/elevationFlag.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/elevationStatus.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/fillableFlag.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/fuelDistribution.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/context/MapContext.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/cqlBuilder.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/criticalHoursStartEndTime.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/criticalHoursStartEndTime.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/fireCentreExtents.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/fireZoneUnitExtents.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hfiStatsUtils.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hfiStatsUtils.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useFireCentreDetails.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useLoading.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useLoading.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/images/mountain.png (100%) rename web/{ => apps/wps-web}/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/pmtilesBuilder.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreTPIStatsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireZoneElevationInfoSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/provincialSummarySlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/runDatesSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/runDatesSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/valueAtCoordinateSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/RowManager.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/CriticalHoursCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/ErrorAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBAProgressRow.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATable.tsx (99%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATableHead.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATableInstructions.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FbaAboutDataContent.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/FilterColumnsModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FuelTypeCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/GrassCureCell.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/HFICell.tsx (94%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/PrecipCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/SelectionCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/StatusCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/TableHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/TextDisplayCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/WeatherStationCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/WindSpeedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/fbaProgressRow.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/grassCureCell.test.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/hfiCell.test.tsx (98%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/precipCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/selectionCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/windSpeedCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/fuelTypes.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/rowManager.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/tableState.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/utils.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/validation.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/CreateFireWatch.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/DetailPanelContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/FireWatchDashboard.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/FireWatchDetailsModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/MenuHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/NavigationDrawer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/OptionalHeading.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/detailPanelContent.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/fireWatchDashboard.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/CompleteStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/FuelStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/InfoStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/LocationStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/SummaryTextLine.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/WeatherParametersStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/fireWatchApi.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/interfaces.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/pages/FireWatchPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/burnForecastSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/fireWatchSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/utils.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/AccuracyVariablePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/WeatherMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/stationAccuracy.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/stationAccuracy.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/AboutDataModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/CalculatedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DailyHFICell.tsx (87%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DailyViewTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DangerClassCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayHeaders.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayHeaders.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayIndexHeaders.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DownloadPDFButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/EmptyFireCentre.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/EmptyStaticCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireCentreCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireCentreDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireStartsCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireStartsDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FuelTypeDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/GrassCureCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFIErrorAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFIPageSubHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFISuccessAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HeaderRowCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/IntensityGroupCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/LastUpdatedHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/LoadingBackdrop.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PrepLevelCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/RequiredDataCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StaticCells.tsx (97%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StationDataHeaderCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StationSelectCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StatusCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledFireComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledTableComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ViewSwitcher.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WeeklyROSCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WeeklyViewTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WindDirectionCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/dailyHFICell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/emptyFireCentre.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/grassCureCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/headerRowCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/intensityGroupCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/prepLevelCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/staticCells.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx (92%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationSelectCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/statusCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/testHelpers.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/weeklyRosCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiReadySlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiReadySlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/stationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/util.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/validation.ts (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/BetaTag.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Footer.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Sidebar.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/SidebarToolList.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Subheading.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/ToolCard.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/ToolCards.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/images/collaboardIcon.svg (100%) rename web/{ => apps/wps-web}/src/features/landingPage/images/msTeams.svg (100%) rename web/{ => apps/wps-web}/src/features/landingPage/pages/LandingPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/toolInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/Map.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/TileLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/VectorLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ActualCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ColumnDefBuilder.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/DataGridColumns.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/EditInputCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/GridComponentRenderer.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/GroupHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/InvalidCellToolTip.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ModelHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2Column.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2Snackbar.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MorecastAboutDataContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ResetForecastButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/SaveForecastButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/SelectableButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/StationGroupDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/StationPanel.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/TabbedDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/WeatherModelDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/colDefBuilder.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/editInputCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/forecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/forecastHeader.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/gridComponentRenderer.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/modelHeader.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/moreCast2Column.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/resetForecastButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/saveForecastButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/selectableButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/stationGroupsDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/stationPanel.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/tabbedDataGrid.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/testHelper.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/weatherModelDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/forecastDraft.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/forecastDraft.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/interfaces.ts (92%) rename web/{ => apps/wps-web}/src/features/moreCast2/pages/MoreCast2Page.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/rowFilters.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/rowFilters.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/saveForecast.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/saveForecasts.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/dataSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/dataSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/selectedStationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/validInputSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/validInputSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/util.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/util.ts (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileActionButtons.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileResults.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileSnackbar.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileStationResultTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileTextfield.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/TimeRangeSlider.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/WxStationDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/slices/percentilesSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/RasterTypeDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterLegend.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterTooltip.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/SFMSMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerDefinitions.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerDefinitions.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerManager.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerManager.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterConfig.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsMap.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/stations/slices/stationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Bold.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Bold.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-BoldItalic.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-BoldItalic.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Italic.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Italic.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Regular.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Regular.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/FONTLOG_README.txt (100%) rename web/{ => apps/wps-web}/src/fonts/LICENSE_OFL.txt (100%) rename web/{ => apps/wps-web}/src/index.css (100%) rename web/{ => apps/wps-web}/src/index.tsx (100%) rename web/{ => apps/wps-web}/src/react-app-env.d.ts (100%) rename web/{ => apps/wps-web}/src/setupTests.ts (100%) rename web/{ => apps/wps-web}/src/test/testUtils.ts (100%) rename web/{ => apps/wps-web}/src/types/global.d.ts (100%) rename web/{ => apps/wps-web}/src/whatwg-fetch.d.ts (100%) create mode 100644 web/apps/wps-web/tsconfig.app.json create mode 100644 web/apps/wps-web/tsconfig.json rename web/{ => apps/wps-web}/tsconfig.node.json (100%) rename web/{ => apps/wps-web}/vite.config.ts (55%) rename web/{ => apps/wps-web}/vitest.config.ts (100%) create mode 100644 web/packages/api/package.json rename web/{src/api => packages/api/src}/axios.ts (100%) rename web/{src/api => packages/api/src}/cHainesAPI.ts (100%) rename web/{src/api => packages/api/src}/fbaAPI.ts (99%) rename web/{src/api => packages/api/src}/fbaCalcAPI.ts (100%) rename web/{src/api => packages/api/src}/forecastAPI.ts (100%) rename web/{src/api => packages/api/src}/hfiCalculatorAPI.ts (97%) rename web/{src/api => packages/api/src}/modelAPI.ts (100%) rename web/{src/api => packages/api/src}/moreCast2API.test.ts (100%) rename web/{src/api => packages/api/src}/moreCast2API.ts (94%) rename web/{src/api => packages/api/src}/observationAPI.ts (100%) rename web/{src/api => packages/api/src}/percentileAPI.ts (100%) rename web/{src/api => packages/api/src}/snow.ts (100%) rename web/{src/api => packages/api/src}/stationAPI.test.ts (100%) rename web/{src/api => packages/api/src}/stationAPI.ts (100%) create mode 100644 web/packages/api/tsconfig.json create mode 100644 web/packages/tsconfig/base.json create mode 100644 web/packages/tsconfig/package.json create mode 100644 web/packages/tsconfig/react-app.json create mode 100644 web/packages/types/package.json rename web/{src/types => packages/types/src}/window.d.ts (100%) create mode 100644 web/packages/ui/package.json rename web/{src/components => packages/ui/src}/AboutDataPopover.tsx (100%) rename web/{src/components => packages/ui/src}/Button.tsx (100%) rename web/{src/components => packages/ui/src}/Container.tsx (100%) rename web/{src/components => packages/ui/src}/DateRangeSelector.tsx (100%) rename web/{src/components => packages/ui/src}/ErrorBoundary.tsx (100%) rename web/{src/components => packages/ui/src}/ErrorMessage.tsx (100%) rename web/{src/components => packages/ui/src}/FeedbackButton.tsx (100%) rename web/{src/components => packages/ui/src}/FireCenterDropdown.tsx (100%) rename web/{src/components => packages/ui/src}/FireTable.tsx (100%) rename web/{src/components => packages/ui/src}/GeneralHeader.tsx (100%) rename web/{src/components => packages/ui/src}/Grid.tsx (100%) rename web/{src/components => packages/ui/src}/HeaderImage.tsx (100%) rename web/{src/components => packages/ui/src}/PageTitle.tsx (100%) rename web/{src/components => packages/ui/src}/ResetDialog.tsx (100%) rename web/{src/components => packages/ui/src}/Slider.tsx (100%) rename web/{src/components => packages/ui/src}/StickyCell.tsx (100%) rename web/{src/components => packages/ui/src}/StyledFormControl.tsx (100%) rename web/{src/components => packages/ui/src}/WPSDatePicker.tsx (100%) rename web/{src/components => packages/ui/src}/aboutDataPopover.test.tsx (85%) rename web/{src/components => packages/ui/src}/dateRangePicker/DateRangePicker.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/DateRangePickerWrapper.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Day.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Header.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/LICENSE (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Menu.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Month.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/README.md (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/dateRangePickerWrapper.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/menu.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/month.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/types.ts (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/utils.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/utils.ts (100%) rename web/{src/components => packages/ui/src}/fireTable.test.tsx (100%) rename web/{src/components => packages/ui/src}/index.ts (100%) rename web/{src/components => packages/ui/src}/resetDialog.test.tsx (97%) rename web/{src/components => packages/ui/src}/stickyCell.test.tsx (100%) rename web/{src/app => packages/ui/src}/theme.ts (100%) create mode 100644 web/packages/ui/tsconfig.json create mode 100644 web/packages/utils/package.json rename web/{src/utils => packages/utils/src}/constants.ts (100%) rename web/{src/utils => packages/utils/src}/date.test.ts (100%) rename web/{src/utils => packages/utils/src}/date.ts (100%) rename web/{src/utils => packages/utils/src}/dropdown.test.ts (100%) rename web/{src/utils => packages/utils/src}/dropdown.ts (100%) rename web/{src/utils => packages/utils/src}/env.ts (100%) rename web/{src/utils => packages/utils/src}/error.ts (100%) rename web/{src/utils => packages/utils/src}/format.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/bui.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/dc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/dmc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/ffmc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/fwi.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/index.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/isi.ts (100%) rename web/{src/utils => packages/utils/src}/getError.test.ts (100%) rename web/{src/utils => packages/utils/src}/getError.ts (100%) rename web/{src/utils => packages/utils/src}/strings.ts (100%) rename web/{src/utils => packages/utils/src}/url.test.ts (100%) rename web/{src/utils => packages/utils/src}/url.ts (100%) rename web/{src/utils => packages/utils/src}/vectorLayerUtils.test.ts (98%) rename web/{src/utils => packages/utils/src}/vectorLayerUtils.ts (100%) create mode 100644 web/packages/utils/tsconfig.json delete mode 100644 web/tsconfig.app.json create mode 100644 web/turbo.json diff --git a/web/.gitignore b/web/.gitignore index cb55ef7359..99ac23a217 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -3,6 +3,7 @@ .sentryclirc .pnp.* .yarn/* +.turbo/* !.yarn/patches !.yarn/plugins !.yarn/releases diff --git a/web/.env.cypress b/web/apps/wps-web/.env.cypress similarity index 100% rename from web/.env.cypress rename to web/apps/wps-web/.env.cypress diff --git a/web/.env.example b/web/apps/wps-web/.env.example similarity index 100% rename from web/.env.example rename to web/apps/wps-web/.env.example diff --git a/web/Dockerfile b/web/apps/wps-web/Dockerfile similarity index 100% rename from web/Dockerfile rename to web/apps/wps-web/Dockerfile diff --git a/web/README.md b/web/apps/wps-web/README.md similarity index 100% rename from web/README.md rename to web/apps/wps-web/README.md diff --git a/web/cypress.config.cjs b/web/apps/wps-web/cypress.config.cjs similarity index 100% rename from web/cypress.config.cjs rename to web/apps/wps-web/cypress.config.cjs diff --git a/web/apps/wps-web/cypress/downloads/downloads.html b/web/apps/wps-web/cypress/downloads/downloads.html new file mode 100644 index 0000000000000000000000000000000000000000..a73e07468767d645b3a90052bc165dbb3f3bdfe9 GIT binary patch literal 118577 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

{Oe>>DQT0`DtSu`qW{wUh_}N{8OytS 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 literal 0 HcmV?d00001 diff --git a/web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts diff --git a/web/cypress/e2e/hfi-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/hfi-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts diff --git a/web/cypress/e2e/morecast-2-page.cy.ts b/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts similarity index 100% rename from web/cypress/e2e/morecast-2-page.cy.ts rename to web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts diff --git a/web/cypress/e2e/not-found-page.cy.ts b/web/apps/wps-web/cypress/e2e/not-found-page.cy.ts similarity index 100% rename from web/cypress/e2e/not-found-page.cy.ts rename to web/apps/wps-web/cypress/e2e/not-found-page.cy.ts diff --git a/web/cypress/e2e/percentile-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/percentile-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts diff --git a/web/cypress/fixtures/fba-calc/322.json b/web/apps/wps-web/cypress/fixtures/fba-calc/322.json similarity index 100% rename from web/cypress/fixtures/fba-calc/322.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/322.json diff --git a/web/cypress/fixtures/fba-calc/322_209_response.json b/web/apps/wps-web/cypress/fixtures/fba-calc/322_209_response.json similarity index 100% rename from web/cypress/fixtures/fba-calc/322_209_response.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/322_209_response.json diff --git a/web/cypress/fixtures/fba-calc/328.json b/web/apps/wps-web/cypress/fixtures/fba-calc/328.json similarity index 100% rename from web/cypress/fixtures/fba-calc/328.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/328.json diff --git a/web/cypress/fixtures/fba-calc/export.csv b/web/apps/wps-web/cypress/fixtures/fba-calc/export.csv similarity index 99% rename from web/cypress/fixtures/fba-calc/export.csv rename to web/apps/wps-web/cypress/fixtures/fba-calc/export.csv index 405b31451c..e74222850b 100644 --- a/web/cypress/fixtures/fba-calc/export.csv +++ b/web/apps/wps-web/cypress/fixtures/fba-calc/export.csv @@ -1,3 +1,3 @@ -"Zone","Weather Station","Elevation","FBP Fuel Type","Grass Cure","Status","Temp","RH","Wind Dir","Wind Speed (km/h)","Precip (mm)","FFMC","DMC","DC","ISI","BUI","FWI","HFI","Critical Hours (4000 kW/m)","Critical Hours (10000 kW/m)","ROS (m/min)","Fire Type","CFB (%)","Flame Length (m)","30 min fire size (ha)","60 min fire size (ha)" -"K5","PENTICTON RS (328)","427","O1A","80","ACTUAL","25.9","30","302","7.3","0","91.932","122.665","1002.44","8.156","187.86","33.709","1468.3296228910988","","","13.984091646581893","S","0.0","2.212336338874282","5.1009941188966925","28.273388410171016" +"Zone","Weather Station","Elevation","FBP Fuel Type","Grass Cure","Status","Temp","RH","Wind Dir","Wind Speed (km/h)","Precip (mm)","FFMC","DMC","DC","ISI","BUI","FWI","HFI","Critical Hours (4000 kW/m)","Critical Hours (10000 kW/m)","ROS (m/min)","Fire Type","CFB (%)","Flame Length (m)","30 min fire size (ha)","60 min fire size (ha)" +"K5","PENTICTON RS (328)","427","O1A","80","ACTUAL","25.9","30","302","7.3","0","91.932","122.665","1002.44","8.156","187.86","33.709","1468.3296228910988","","","13.984091646581893","S","0.0","2.212336338874282","5.1009941188966925","28.273388410171016" "K2","AFTON (322)","780","C5","","ACTUAL","20.5","38","310","9.2","0","89.579","90.588","858.106","6.417","143.344","26.922","629.1355440376345","","","0.5728888963554044","S","0.0","1.4481431145178463","0.009328024522166307","0.0522691463588831" \ No newline at end of file diff --git a/web/cypress/fixtures/fba/fire-centers.json b/web/apps/wps-web/cypress/fixtures/fba/fire-centers.json similarity index 100% rename from web/cypress/fixtures/fba/fire-centers.json rename to web/apps/wps-web/cypress/fixtures/fba/fire-centers.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-disable-station.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-disable-station.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-disable-station.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-disable-station.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-high-intensity.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-high-intensity.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-high-intensity.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-high-intensity.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-missing.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-missing.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-missing.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-missing.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-saved.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-saved.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-saved.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-saved.json diff --git a/web/cypress/fixtures/hfi-calc/dailies.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies.json diff --git a/web/cypress/fixtures/hfi-calc/fire-centres-grass.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-grass.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire-centres-grass.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-grass.json diff --git a/web/cypress/fixtures/hfi-calc/fire-centres-minimal.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-minimal.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire-centres-minimal.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-minimal.json diff --git a/web/cypress/fixtures/hfi-calc/fire_centres.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire_centres.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire_centres.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire_centres.json diff --git a/web/cypress/fixtures/hfi-calc/fuel_types.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fuel_types.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fuel_types.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fuel_types.json diff --git a/web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json diff --git a/web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json diff --git a/web/cypress/fixtures/hfi-calc/ready-states.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/ready-states.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/ready-states.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/ready-states.json diff --git a/web/cypress/fixtures/percentiles/percentile-result.json b/web/apps/wps-web/cypress/fixtures/percentiles/percentile-result.json similarity index 100% rename from web/cypress/fixtures/percentiles/percentile-result.json rename to web/apps/wps-web/cypress/fixtures/percentiles/percentile-result.json diff --git a/web/cypress/fixtures/percentiles/two-percentiles-result.json b/web/apps/wps-web/cypress/fixtures/percentiles/two-percentiles-result.json similarity index 100% rename from web/cypress/fixtures/percentiles/two-percentiles-result.json rename to web/apps/wps-web/cypress/fixtures/percentiles/two-percentiles-result.json diff --git a/web/cypress/fixtures/weather-data/high-res-model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/high-res-model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/high-res-model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/high-res-model-summaries.json diff --git a/web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-data/model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/model-summaries.json diff --git a/web/cypress/fixtures/weather-data/models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-data/noon-forecast-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/noon-forecast-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/noon-forecast-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/noon-forecast-summaries.json diff --git a/web/cypress/fixtures/weather-data/noon-forecasts.json b/web/apps/wps-web/cypress/fixtures/weather-data/noon-forecasts.json similarity index 100% rename from web/cypress/fixtures/weather-data/noon-forecasts.json rename to web/apps/wps-web/cypress/fixtures/weather-data/noon-forecasts.json diff --git a/web/cypress/fixtures/weather-data/observations.json b/web/apps/wps-web/cypress/fixtures/weather-data/observations.json similarity index 100% rename from web/cypress/fixtures/weather-data/observations.json rename to web/apps/wps-web/cypress/fixtures/weather-data/observations.json diff --git a/web/cypress/fixtures/weather-data/regional-model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/regional-model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/regional-model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/regional-model-summaries.json diff --git a/web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-stations-details.json b/web/apps/wps-web/cypress/fixtures/weather-stations-details.json similarity index 100% rename from web/cypress/fixtures/weather-stations-details.json rename to web/apps/wps-web/cypress/fixtures/weather-stations-details.json diff --git a/web/cypress/fixtures/weather-stations.json b/web/apps/wps-web/cypress/fixtures/weather-stations.json similarity index 100% rename from web/cypress/fixtures/weather-stations.json rename to web/apps/wps-web/cypress/fixtures/weather-stations.json diff --git a/web/cypress/support/commands.ts b/web/apps/wps-web/cypress/support/commands.ts similarity index 100% rename from web/cypress/support/commands.ts rename to web/apps/wps-web/cypress/support/commands.ts diff --git a/web/cypress/support/e2e.ts b/web/apps/wps-web/cypress/support/e2e.ts similarity index 100% rename from web/cypress/support/e2e.ts rename to web/apps/wps-web/cypress/support/e2e.ts diff --git a/web/cypress/support/fba-commands.ts b/web/apps/wps-web/cypress/support/fba-commands.ts similarity index 100% rename from web/cypress/support/fba-commands.ts rename to web/apps/wps-web/cypress/support/fba-commands.ts diff --git a/web/cypress/support/hfi-commands.ts b/web/apps/wps-web/cypress/support/hfi-commands.ts similarity index 100% rename from web/cypress/support/hfi-commands.ts rename to web/apps/wps-web/cypress/support/hfi-commands.ts diff --git a/web/cypress/support/percentile-commands.ts b/web/apps/wps-web/cypress/support/percentile-commands.ts similarity index 100% rename from web/cypress/support/percentile-commands.ts rename to web/apps/wps-web/cypress/support/percentile-commands.ts diff --git a/web/cypress/tsconfig.json b/web/apps/wps-web/cypress/tsconfig.json similarity index 100% rename from web/cypress/tsconfig.json rename to web/apps/wps-web/cypress/tsconfig.json diff --git a/web/eslint.config.cjs b/web/apps/wps-web/eslint.config.cjs similarity index 100% rename from web/eslint.config.cjs rename to web/apps/wps-web/eslint.config.cjs diff --git a/web/index.html b/web/apps/wps-web/index.html similarity index 100% rename from web/index.html rename to web/apps/wps-web/index.html diff --git a/web/manifest.json b/web/apps/wps-web/manifest.json similarity index 100% rename from web/manifest.json rename to web/apps/wps-web/manifest.json diff --git a/web/mergeCoverage.cjs b/web/apps/wps-web/mergeCoverage.cjs similarity index 100% rename from web/mergeCoverage.cjs rename to web/apps/wps-web/mergeCoverage.cjs diff --git a/web/apps/wps-web/package.json b/web/apps/wps-web/package.json new file mode 100644 index 0000000000..def3986807 --- /dev/null +++ b/web/apps/wps-web/package.json @@ -0,0 +1,127 @@ +{ + "name": "@wps/wps-web", + "version": "0.1.0", + "engines": { + "node": ">=20", + "npm": ">=10.7.0" + }, + "type": "module", + "license": "Apache-2.0", + "licenses": [ + { + "type": "Apache-2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + } + ], + "dependencies": { + "@emotion/react": "^11.8.2", + "@emotion/styled": "^11.8.1", + "@mui/icons-material": "^5.5.1", + "@mui/material": "5.15.20", + "@mui/system": "^5.15.14", + "@mui/x-data-grid-pro": "^6.0.0", + "@mui/x-date-pickers": "^7.29.4", + "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51", + "@reduxjs/toolkit": "^2.2.7", + "@sentry/react": "^10.0.0", + "@sentry/vite-plugin": "^5.0.0", + "@types/esri-leaflet": "^3.0.0", + "@types/leaflet": "^1.7.0", + "@types/lodash": "^4.14.173", + "@types/luxon": "^3.0.2", + "@types/react": "18.3.3", + "@types/react-dom": "^18.3.0", + "@types/react-plotly.js": "^2.2.4", + "@types/react-router-dom": "^5.3.3", + "@types/webpack-env": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitest/coverage-v8": "^4.0.8", + "axios": "1.8.2", + "date-fns": "^4.0.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.4", + "esri-leaflet": "3.0.12", + "filefy": "^0.1.11", + "jsdom": "^26.0.0", + "jwt-decode": "^4.0.0", + "keycloak-js": "^25.0.0", + "leaflet": "^1.7.1", + "lodash": "^4.17.21", + "luxon": "^3.0.2", + "match-sorter": "^8.0.0", + "nyc": "^17.0.0", + "ol": "10.0.0", + "ol-mapbox-style": "^13.1.1", + "ol-pmtiles": "^2.0.0", + "prettier": "^3.3.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-is": "^19.2.4", + "react-redux": "^9.1.2", + "react-router-dom": "^7.6.2", + "recharts": "^3.0.0", + "typescript": "^5.2.2", + "vitest": "^4.0.0", + "whatwg-fetch": "^3.6.20" + }, + "scripts": { + "start": "vite", + "dev": "vite", + "start:cypress": "export $(cat .env.cypress | xargs) && yarn start", + "build": "tsc -b && vite build", + "build:prod": "tsc -b && vite build", + "test": "VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest", + "test:ci": "CI=true npm test", + "coverage": "npm test -- --coverage --watchAll=false", + "coverage:ci": "CI=true VITE_KEYCLOAK_CLIENT=wps-web VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest run --coverage", + "cy:open": "cypress open", + "cy:run": "cypress run --browser chrome --config watchForFileChanges=false", + "cypress:ci": "start-server-and-test start:cypress http://localhost:3030 'cy:run'", + "lint": "eslint", + "lint:fix": "eslint --fix", + "format": "prettier --write \"**/*.+(js|jsx|json|yml|yaml|css|md)\"", + "finalizeCoverage": "yarn node mergeCoverage.cjs", + "preview": "vite preview" + }, + "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.0", + "@cypress/code-coverage": "^4.0.0", + "@eslint/compat": "^2.0.0", + "@testing-library/dom": "^10.1.0", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.5.2", + "@types/babel__core": "^7", + "@types/babel__preset-env": "^7", + "@types/jest": "^30.0.0", + "@types/react-is": "^19", + "@types/recharts": "^1.8.23", + "@vitejs/plugin-react": "^4.3.1", + "@wps/tsconfig": "workspace:*", + "babel-loader": "^10.1.1", + "cypress": "^15.10.0", + "eslint": "^9.7.0", + "eslint-plugin-react-hooks": "^7.0.0", + "eslint-plugin-react-refresh": "^0.4.7", + "globals": "^17.0.0", + "rollup": "^4.59.0", + "start-server-and-test": "^2.0.0", + "ts-sinon": "^2.0.2", + "vite": "^7.0.0", + "vite-plugin-istanbul": "^7.0.0", + "vite-plugin-svgr": "^4.2.0", + "webpack": "^5.105.4" + }, + "nyc": { + "report-dir": "coverage-cypress", + "excludeAfterRemap": true, + "exclude": [ + "src/serviceWorker.ts", + "src/app/store.ts" + ] + }, + "_comment": "packageManager is defined at workspace root" +} diff --git a/web/public/images/BCID_H_rgb_rev.svg b/web/apps/wps-web/public/images/BCID_H_rgb_rev.svg similarity index 100% rename from web/public/images/BCID_H_rgb_rev.svg rename to web/apps/wps-web/public/images/BCID_H_rgb_rev.svg diff --git a/web/public/images/bc-wilderfire-service-logo.png b/web/apps/wps-web/public/images/bc-wilderfire-service-logo.png similarity index 100% rename from web/public/images/bc-wilderfire-service-logo.png rename to web/apps/wps-web/public/images/bc-wilderfire-service-logo.png diff --git a/web/public/images/bcid-192x192.png b/web/apps/wps-web/public/images/bcid-192x192.png similarity index 100% rename from web/public/images/bcid-192x192.png rename to web/apps/wps-web/public/images/bcid-192x192.png diff --git a/web/public/images/bcid-512x512.png b/web/apps/wps-web/public/images/bcid-512x512.png similarity index 100% rename from web/public/images/bcid-512x512.png rename to web/apps/wps-web/public/images/bcid-512x512.png diff --git a/web/public/images/bcid-apple-icon.svg b/web/apps/wps-web/public/images/bcid-apple-icon.svg similarity index 100% rename from web/public/images/bcid-apple-icon.svg rename to web/apps/wps-web/public/images/bcid-apple-icon.svg diff --git a/web/public/images/bcid-apple-touch-icon.png b/web/apps/wps-web/public/images/bcid-apple-touch-icon.png similarity index 100% rename from web/public/images/bcid-apple-touch-icon.png rename to web/apps/wps-web/public/images/bcid-apple-touch-icon.png diff --git a/web/public/images/bcid-favicon-16x16.png b/web/apps/wps-web/public/images/bcid-favicon-16x16.png similarity index 100% rename from web/public/images/bcid-favicon-16x16.png rename to web/apps/wps-web/public/images/bcid-favicon-16x16.png diff --git a/web/public/images/bcid-favicon-32x32.png b/web/apps/wps-web/public/images/bcid-favicon-32x32.png similarity index 100% rename from web/public/images/bcid-favicon-32x32.png rename to web/apps/wps-web/public/images/bcid-favicon-32x32.png diff --git a/web/public/images/bcid-logo-en.svg b/web/apps/wps-web/public/images/bcid-logo-en.svg similarity index 100% rename from web/public/images/bcid-logo-en.svg rename to web/apps/wps-web/public/images/bcid-logo-en.svg diff --git a/web/public/images/bcid-logo-fr.svg b/web/apps/wps-web/public/images/bcid-logo-fr.svg similarity index 100% rename from web/public/images/bcid-logo-fr.svg rename to web/apps/wps-web/public/images/bcid-logo-fr.svg diff --git a/web/public/images/bcid-logo-rev-en.svg b/web/apps/wps-web/public/images/bcid-logo-rev-en.svg similarity index 100% rename from web/public/images/bcid-logo-rev-en.svg rename to web/apps/wps-web/public/images/bcid-logo-rev-en.svg diff --git a/web/public/images/bcid-logo-rev-fr.svg b/web/apps/wps-web/public/images/bcid-logo-rev-fr.svg similarity index 100% rename from web/public/images/bcid-logo-rev-fr.svg rename to web/apps/wps-web/public/images/bcid-logo-rev-fr.svg diff --git a/web/public/images/bcid-symbol-rev.svg b/web/apps/wps-web/public/images/bcid-symbol-rev.svg similarity index 100% rename from web/public/images/bcid-symbol-rev.svg rename to web/apps/wps-web/public/images/bcid-symbol-rev.svg diff --git a/web/public/images/bcid-symbol.svg b/web/apps/wps-web/public/images/bcid-symbol.svg similarity index 100% rename from web/public/images/bcid-symbol.svg rename to web/apps/wps-web/public/images/bcid-symbol.svg diff --git a/web/public/images/fbpgo_maskable.png b/web/apps/wps-web/public/images/fbpgo_maskable.png similarity index 100% rename from web/public/images/fbpgo_maskable.png rename to web/apps/wps-web/public/images/fbpgo_maskable.png diff --git a/web/public/images/logo-banner.svg b/web/apps/wps-web/public/images/logo-banner.svg similarity index 100% rename from web/public/images/logo-banner.svg rename to web/apps/wps-web/public/images/logo-banner.svg diff --git a/web/public/images/redMarker.png b/web/apps/wps-web/public/images/redMarker.png similarity index 100% rename from web/public/images/redMarker.png rename to web/apps/wps-web/public/images/redMarker.png diff --git a/web/src/app/App.tsx b/web/apps/wps-web/src/app/App.tsx similarity index 100% rename from web/src/app/App.tsx rename to web/apps/wps-web/src/app/App.tsx diff --git a/web/src/app/Routes.tsx b/web/apps/wps-web/src/app/Routes.tsx similarity index 100% rename from web/src/app/Routes.tsx rename to web/apps/wps-web/src/app/Routes.tsx diff --git a/web/src/app/rootReducer.ts b/web/apps/wps-web/src/app/rootReducer.ts similarity index 100% rename from web/src/app/rootReducer.ts rename to web/apps/wps-web/src/app/rootReducer.ts diff --git a/web/src/app/store.ts b/web/apps/wps-web/src/app/store.ts similarity index 100% rename from web/src/app/store.ts rename to web/apps/wps-web/src/app/store.ts diff --git a/web/src/commonSlices/fireCentersSlice.ts b/web/apps/wps-web/src/commonSlices/fireCentersSlice.ts similarity index 100% rename from web/src/commonSlices/fireCentersSlice.ts rename to web/apps/wps-web/src/commonSlices/fireCentersSlice.ts diff --git a/web/src/commonSlices/selectedStationGroupMembers.test.ts b/web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.test.ts similarity index 100% rename from web/src/commonSlices/selectedStationGroupMembers.test.ts rename to web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.test.ts diff --git a/web/src/commonSlices/selectedStationGroupMembers.ts b/web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.ts similarity index 100% rename from web/src/commonSlices/selectedStationGroupMembers.ts rename to web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.ts diff --git a/web/src/commonSlices/stationGroupsSlice.ts b/web/apps/wps-web/src/commonSlices/stationGroupsSlice.ts similarity index 100% rename from web/src/commonSlices/stationGroupsSlice.ts rename to web/apps/wps-web/src/commonSlices/stationGroupsSlice.ts diff --git a/web/src/documents/90th_percentile_calculator_rationale.pdf b/web/apps/wps-web/src/documents/90th_percentile_calculator_rationale.pdf similarity index 100% rename from web/src/documents/90th_percentile_calculator_rationale.pdf rename to web/apps/wps-web/src/documents/90th_percentile_calculator_rationale.pdf diff --git a/web/src/features/NoMatchPage.tsx b/web/apps/wps-web/src/features/NoMatchPage.tsx similarity index 100% rename from web/src/features/NoMatchPage.tsx rename to web/apps/wps-web/src/features/NoMatchPage.tsx diff --git a/web/src/features/auth/components/AuthWrapper.tsx b/web/apps/wps-web/src/features/auth/components/AuthWrapper.tsx similarity index 100% rename from web/src/features/auth/components/AuthWrapper.tsx rename to web/apps/wps-web/src/features/auth/components/AuthWrapper.tsx diff --git a/web/src/features/auth/keycloak.ts b/web/apps/wps-web/src/features/auth/keycloak.ts similarity index 100% rename from web/src/features/auth/keycloak.ts rename to web/apps/wps-web/src/features/auth/keycloak.ts diff --git a/web/src/features/auth/roles.ts b/web/apps/wps-web/src/features/auth/roles.ts similarity index 100% rename from web/src/features/auth/roles.ts rename to web/apps/wps-web/src/features/auth/roles.ts diff --git a/web/src/features/auth/slices/authenticationSlice.test.ts b/web/apps/wps-web/src/features/auth/slices/authenticationSlice.test.ts similarity index 100% rename from web/src/features/auth/slices/authenticationSlice.test.ts rename to web/apps/wps-web/src/features/auth/slices/authenticationSlice.test.ts diff --git a/web/src/features/auth/slices/authenticationSlice.ts b/web/apps/wps-web/src/features/auth/slices/authenticationSlice.ts similarity index 100% rename from web/src/features/auth/slices/authenticationSlice.ts rename to web/apps/wps-web/src/features/auth/slices/authenticationSlice.ts diff --git a/web/src/features/cHaines/pages/CHainesPage.tsx b/web/apps/wps-web/src/features/cHaines/pages/CHainesPage.tsx similarity index 100% rename from web/src/features/cHaines/pages/CHainesPage.tsx rename to web/apps/wps-web/src/features/cHaines/pages/CHainesPage.tsx diff --git a/web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx b/web/apps/wps-web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx similarity index 100% rename from web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx rename to web/apps/wps-web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx diff --git a/web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx b/web/apps/wps-web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx similarity index 100% rename from web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx rename to web/apps/wps-web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx diff --git a/web/src/features/fba/calculateZoneStatus.test.ts b/web/apps/wps-web/src/features/fba/calculateZoneStatus.test.ts similarity index 100% rename from web/src/features/fba/calculateZoneStatus.test.ts rename to web/apps/wps-web/src/features/fba/calculateZoneStatus.test.ts diff --git a/web/src/features/fba/calculateZoneStatus.ts b/web/apps/wps-web/src/features/fba/calculateZoneStatus.ts similarity index 100% rename from web/src/features/fba/calculateZoneStatus.ts rename to web/apps/wps-web/src/features/fba/calculateZoneStatus.ts diff --git a/web/src/features/fba/components/ASAAboutDataContent.tsx b/web/apps/wps-web/src/features/fba/components/ASAAboutDataContent.tsx similarity index 100% rename from web/src/features/fba/components/ASAAboutDataContent.tsx rename to web/apps/wps-web/src/features/fba/components/ASAAboutDataContent.tsx diff --git a/web/src/features/fba/components/ASADatePicker.test.tsx b/web/apps/wps-web/src/features/fba/components/ASADatePicker.test.tsx similarity index 100% rename from web/src/features/fba/components/ASADatePicker.test.tsx rename to web/apps/wps-web/src/features/fba/components/ASADatePicker.test.tsx diff --git a/web/src/features/fba/components/ASADatePicker.tsx b/web/apps/wps-web/src/features/fba/components/ASADatePicker.tsx similarity index 100% rename from web/src/features/fba/components/ASADatePicker.tsx rename to web/apps/wps-web/src/features/fba/components/ASADatePicker.tsx diff --git a/web/src/features/fba/components/ActualForecastControl.tsx b/web/apps/wps-web/src/features/fba/components/ActualForecastControl.tsx similarity index 100% rename from web/src/features/fba/components/ActualForecastControl.tsx rename to web/apps/wps-web/src/features/fba/components/ActualForecastControl.tsx diff --git a/web/src/features/fba/components/actualForecastControl.test.tsx b/web/apps/wps-web/src/features/fba/components/actualForecastControl.test.tsx similarity index 100% rename from web/src/features/fba/components/actualForecastControl.test.tsx rename to web/apps/wps-web/src/features/fba/components/actualForecastControl.test.tsx diff --git a/web/src/features/fba/components/infoPanel/AdvisoryReport.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryReport.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/AdvisoryReport.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryReport.tsx diff --git a/web/src/features/fba/components/infoPanel/AdvisoryText.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryText.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/AdvisoryText.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryText.tsx diff --git a/web/src/features/fba/components/infoPanel/FireCentreInfo.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireCentreInfo.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireCentreInfo.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireCentreInfo.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx diff --git a/web/src/features/fba/components/infoPanel/InfoAccordion.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/InfoAccordion.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/InfoAccordion.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/InfoAccordion.tsx diff --git a/web/src/features/fba/components/infoPanel/ProvincialSummary.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/ProvincialSummary.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/ProvincialSummary.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/ProvincialSummary.tsx diff --git a/web/src/features/fba/components/infoPanel/TabPanel.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/TabPanel.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/TabPanel.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/TabPanel.tsx diff --git a/web/src/features/fba/components/infoPanel/advisoryReport.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/advisoryReport.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/advisoryReport.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/advisoryReport.test.tsx diff --git a/web/src/features/fba/components/infoPanel/advisoryText.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/advisoryText.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/advisoryText.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/advisoryText.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx diff --git a/web/src/features/fba/components/infoPanel/infoAccordion.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/infoAccordion.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/infoAccordion.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/infoAccordion.test.tsx diff --git a/web/src/features/fba/components/infoPanel/provincialSummary.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/provincialSummary.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/provincialSummary.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/provincialSummary.test.tsx diff --git a/web/src/features/fba/components/map/FBAMap.tsx b/web/apps/wps-web/src/features/fba/components/map/FBAMap.tsx similarity index 100% rename from web/src/features/fba/components/map/FBAMap.tsx rename to web/apps/wps-web/src/features/fba/components/map/FBAMap.tsx diff --git a/web/src/features/fba/components/map/Legend.tsx b/web/apps/wps-web/src/features/fba/components/map/Legend.tsx similarity index 100% rename from web/src/features/fba/components/map/Legend.tsx rename to web/apps/wps-web/src/features/fba/components/map/Legend.tsx diff --git a/web/src/features/fba/components/map/ScaleBarContainer.tsx b/web/apps/wps-web/src/features/fba/components/map/ScaleBarContainer.tsx similarity index 100% rename from web/src/features/fba/components/map/ScaleBarContainer.tsx rename to web/apps/wps-web/src/features/fba/components/map/ScaleBarContainer.tsx diff --git a/web/src/features/fba/components/map/fbaMap.test.tsx b/web/apps/wps-web/src/features/fba/components/map/fbaMap.test.tsx similarity index 100% rename from web/src/features/fba/components/map/fbaMap.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/fbaMap.test.tsx diff --git a/web/src/features/fba/components/map/featureStylers.ts b/web/apps/wps-web/src/features/fba/components/map/featureStylers.ts similarity index 100% rename from web/src/features/fba/components/map/featureStylers.ts rename to web/apps/wps-web/src/features/fba/components/map/featureStylers.ts diff --git a/web/src/features/fba/components/map/legend.test.tsx b/web/apps/wps-web/src/features/fba/components/map/legend.test.tsx similarity index 100% rename from web/src/features/fba/components/map/legend.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/legend.test.tsx diff --git a/web/src/features/fba/components/map/scalebarContainer.test.tsx b/web/apps/wps-web/src/features/fba/components/map/scalebarContainer.test.tsx similarity index 100% rename from web/src/features/fba/components/map/scalebarContainer.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/scalebarContainer.test.tsx diff --git a/web/src/features/fba/components/viz/CriticalHours.tsx b/web/apps/wps-web/src/features/fba/components/viz/CriticalHours.tsx similarity index 100% rename from web/src/features/fba/components/viz/CriticalHours.tsx rename to web/apps/wps-web/src/features/fba/components/viz/CriticalHours.tsx diff --git a/web/src/features/fba/components/viz/ElevationFlag.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationFlag.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationFlag.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationFlag.tsx diff --git a/web/src/features/fba/components/viz/ElevationInfoViz.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationInfoViz.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationInfoViz.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationInfoViz.tsx diff --git a/web/src/features/fba/components/viz/ElevationLabel.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationLabel.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationLabel.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationLabel.tsx diff --git a/web/src/features/fba/components/viz/ElevationStatus.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationStatus.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationStatus.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationStatus.tsx diff --git a/web/src/features/fba/components/viz/FillableFlag.tsx b/web/apps/wps-web/src/features/fba/components/viz/FillableFlag.tsx similarity index 100% rename from web/src/features/fba/components/viz/FillableFlag.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FillableFlag.tsx diff --git a/web/src/features/fba/components/viz/FuelDistribution.tsx b/web/apps/wps-web/src/features/fba/components/viz/FuelDistribution.tsx similarity index 100% rename from web/src/features/fba/components/viz/FuelDistribution.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FuelDistribution.tsx diff --git a/web/src/features/fba/components/viz/FuelSummary.tsx b/web/apps/wps-web/src/features/fba/components/viz/FuelSummary.tsx similarity index 100% rename from web/src/features/fba/components/viz/FuelSummary.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FuelSummary.tsx diff --git a/web/src/features/fba/components/viz/color.test.ts b/web/apps/wps-web/src/features/fba/components/viz/color.test.ts similarity index 100% rename from web/src/features/fba/components/viz/color.test.ts rename to web/apps/wps-web/src/features/fba/components/viz/color.test.ts diff --git a/web/src/features/fba/components/viz/color.ts b/web/apps/wps-web/src/features/fba/components/viz/color.ts similarity index 100% rename from web/src/features/fba/components/viz/color.ts rename to web/apps/wps-web/src/features/fba/components/viz/color.ts diff --git a/web/src/features/fba/components/viz/criticalHours.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/criticalHours.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/criticalHours.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/criticalHours.test.tsx diff --git a/web/src/features/fba/components/viz/elevationFlag.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/elevationFlag.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/elevationFlag.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/elevationFlag.test.tsx diff --git a/web/src/features/fba/components/viz/elevationStatus.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/elevationStatus.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/elevationStatus.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/elevationStatus.test.tsx diff --git a/web/src/features/fba/components/viz/fillableFlag.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/fillableFlag.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/fillableFlag.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/fillableFlag.test.tsx diff --git a/web/src/features/fba/components/viz/fuelDistribution.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/fuelDistribution.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/fuelDistribution.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/fuelDistribution.test.tsx diff --git a/web/src/features/fba/context/MapContext.tsx b/web/apps/wps-web/src/features/fba/context/MapContext.tsx similarity index 100% rename from web/src/features/fba/context/MapContext.tsx rename to web/apps/wps-web/src/features/fba/context/MapContext.tsx diff --git a/web/src/features/fba/cqlBuilder.ts b/web/apps/wps-web/src/features/fba/cqlBuilder.ts similarity index 100% rename from web/src/features/fba/cqlBuilder.ts rename to web/apps/wps-web/src/features/fba/cqlBuilder.ts diff --git a/web/src/features/fba/criticalHoursStartEndTime.test.ts b/web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.test.ts similarity index 100% rename from web/src/features/fba/criticalHoursStartEndTime.test.ts rename to web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.test.ts diff --git a/web/src/features/fba/criticalHoursStartEndTime.ts b/web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.ts similarity index 100% rename from web/src/features/fba/criticalHoursStartEndTime.ts rename to web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.ts diff --git a/web/src/features/fba/fireCentreExtents.ts b/web/apps/wps-web/src/features/fba/fireCentreExtents.ts similarity index 100% rename from web/src/features/fba/fireCentreExtents.ts rename to web/apps/wps-web/src/features/fba/fireCentreExtents.ts diff --git a/web/src/features/fba/fireZoneUnitExtents.ts b/web/apps/wps-web/src/features/fba/fireZoneUnitExtents.ts similarity index 100% rename from web/src/features/fba/fireZoneUnitExtents.ts rename to web/apps/wps-web/src/features/fba/fireZoneUnitExtents.ts diff --git a/web/src/features/fba/hfiStatsUtils.test.ts b/web/apps/wps-web/src/features/fba/hfiStatsUtils.test.ts similarity index 100% rename from web/src/features/fba/hfiStatsUtils.test.ts rename to web/apps/wps-web/src/features/fba/hfiStatsUtils.test.ts diff --git a/web/src/features/fba/hfiStatsUtils.ts b/web/apps/wps-web/src/features/fba/hfiStatsUtils.ts similarity index 100% rename from web/src/features/fba/hfiStatsUtils.ts rename to web/apps/wps-web/src/features/fba/hfiStatsUtils.ts diff --git a/web/src/features/fba/hooks/useFireCentreDetails.ts b/web/apps/wps-web/src/features/fba/hooks/useFireCentreDetails.ts similarity index 100% rename from web/src/features/fba/hooks/useFireCentreDetails.ts rename to web/apps/wps-web/src/features/fba/hooks/useFireCentreDetails.ts diff --git a/web/src/features/fba/hooks/useLoading.test.tsx b/web/apps/wps-web/src/features/fba/hooks/useLoading.test.tsx similarity index 100% rename from web/src/features/fba/hooks/useLoading.test.tsx rename to web/apps/wps-web/src/features/fba/hooks/useLoading.test.tsx diff --git a/web/src/features/fba/hooks/useLoading.ts b/web/apps/wps-web/src/features/fba/hooks/useLoading.ts similarity index 100% rename from web/src/features/fba/hooks/useLoading.ts rename to web/apps/wps-web/src/features/fba/hooks/useLoading.ts diff --git a/web/src/features/fba/images/mountain.png b/web/apps/wps-web/src/features/fba/images/mountain.png similarity index 100% rename from web/src/features/fba/images/mountain.png rename to web/apps/wps-web/src/features/fba/images/mountain.png diff --git a/web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx b/web/apps/wps-web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx similarity index 100% rename from web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx rename to web/apps/wps-web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx diff --git a/web/src/features/fba/pmtilesBuilder.ts b/web/apps/wps-web/src/features/fba/pmtilesBuilder.ts similarity index 100% rename from web/src/features/fba/pmtilesBuilder.ts rename to web/apps/wps-web/src/features/fba/pmtilesBuilder.ts diff --git a/web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts diff --git a/web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts diff --git a/web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts diff --git a/web/src/features/fba/slices/fireCentreTPIStatsSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreTPIStatsSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.ts diff --git a/web/src/features/fba/slices/fireZoneElevationInfoSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireZoneElevationInfoSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireZoneElevationInfoSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireZoneElevationInfoSlice.ts diff --git a/web/src/features/fba/slices/provincialSummarySlice.ts b/web/apps/wps-web/src/features/fba/slices/provincialSummarySlice.ts similarity index 100% rename from web/src/features/fba/slices/provincialSummarySlice.ts rename to web/apps/wps-web/src/features/fba/slices/provincialSummarySlice.ts diff --git a/web/src/features/fba/slices/runDatesSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/runDatesSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/runDatesSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/runDatesSlice.test.ts diff --git a/web/src/features/fba/slices/runDatesSlice.ts b/web/apps/wps-web/src/features/fba/slices/runDatesSlice.ts similarity index 100% rename from web/src/features/fba/slices/runDatesSlice.ts rename to web/apps/wps-web/src/features/fba/slices/runDatesSlice.ts diff --git a/web/src/features/fba/slices/valueAtCoordinateSlice.ts b/web/apps/wps-web/src/features/fba/slices/valueAtCoordinateSlice.ts similarity index 100% rename from web/src/features/fba/slices/valueAtCoordinateSlice.ts rename to web/apps/wps-web/src/features/fba/slices/valueAtCoordinateSlice.ts diff --git a/web/src/features/fbaCalculator/RowManager.ts b/web/apps/wps-web/src/features/fbaCalculator/RowManager.ts similarity index 100% rename from web/src/features/fbaCalculator/RowManager.ts rename to web/apps/wps-web/src/features/fbaCalculator/RowManager.ts diff --git a/web/src/features/fbaCalculator/components/CriticalHoursCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/CriticalHoursCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/CriticalHoursCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/CriticalHoursCell.tsx diff --git a/web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx diff --git a/web/src/features/fbaCalculator/components/ErrorAlert.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/ErrorAlert.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/ErrorAlert.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/ErrorAlert.tsx diff --git a/web/src/features/fbaCalculator/components/FBAProgressRow.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBAProgressRow.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBAProgressRow.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBAProgressRow.tsx diff --git a/web/src/features/fbaCalculator/components/FBATable.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx similarity index 99% rename from web/src/features/fbaCalculator/components/FBATable.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx index 24b93b75cd..09c8f59d9c 100644 --- a/web/src/features/fbaCalculator/components/FBATable.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx @@ -30,7 +30,7 @@ import { useLocation, useNavigate } from 'react-router-dom' import { rowShouldUpdate, isWindSpeedInvalid, isPrecipInvalid } from 'features/fbaCalculator/validation' import TextDisplayCell from 'features/fbaCalculator/components/TextDisplayCell' import FixedDecimalNumberCell from 'features/fbaCalculator/components/FixedDecimalNumberCell' -import HFICell from 'components/HFICell' +import HFICell from './HFICell' import CrownFractionBurnedCell from 'features/fbaCalculator/components/CrownFractionBurnedCell' import CriticalHoursCell from 'features/fbaCalculator/components/CriticalHoursCell' import StatusCell from 'features/fbaCalculator/components/StatusCell' @@ -41,7 +41,7 @@ import StickyCell from 'components/StickyCell' import FBATableHead from 'features/fbaCalculator/components/FBATableHead' import FireTable from 'components/FireTable' import FBATableInstructions from 'features/fbaCalculator/components/FBATableInstructions' -import FilterColumnsModal from 'components/FilterColumnsModal' +import FilterColumnsModal from './FilterColumnsModal' import WPSDatePicker from 'components/WPSDatePicker' import { AppDispatch } from 'app/store' import { DataTableCell } from 'features/hfiCalculator/components/StyledPlanningAreaComponents' diff --git a/web/src/features/fbaCalculator/components/FBATableHead.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATableHead.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBATableHead.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATableHead.tsx diff --git a/web/src/features/fbaCalculator/components/FBATableInstructions.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATableInstructions.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBATableInstructions.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATableInstructions.tsx diff --git a/web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx diff --git a/web/src/components/FilterColumnsModal.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FilterColumnsModal.tsx similarity index 100% rename from web/src/components/FilterColumnsModal.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FilterColumnsModal.tsx diff --git a/web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx diff --git a/web/src/features/fbaCalculator/components/FuelTypeCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FuelTypeCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FuelTypeCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FuelTypeCell.tsx diff --git a/web/src/features/fbaCalculator/components/GrassCureCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/GrassCureCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/GrassCureCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/GrassCureCell.tsx diff --git a/web/src/components/HFICell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx similarity index 94% rename from web/src/components/HFICell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx index 344a4d52c8..40064678ae 100644 --- a/web/src/components/HFICell.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx @@ -1,7 +1,7 @@ import { TableCell } from '@mui/material' import { styled } from '@mui/material/styles' import React from 'react' -import FixedDecimalNumberCell from 'features/fbaCalculator/components/FixedDecimalNumberCell' +import FixedDecimalNumberCell from './FixedDecimalNumberCell' import { isNull, isUndefined } from 'lodash' const PREFIX = 'HFICell' diff --git a/web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx diff --git a/web/src/features/fbaCalculator/components/PrecipCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/PrecipCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/PrecipCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/PrecipCell.tsx diff --git a/web/src/features/fbaCalculator/components/SelectionCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/SelectionCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/SelectionCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/SelectionCell.tsx diff --git a/web/src/features/fbaCalculator/components/StatusCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/StatusCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/StatusCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/StatusCell.tsx diff --git a/web/src/features/fbaCalculator/components/TableHeader.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/TableHeader.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/TableHeader.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/TableHeader.tsx diff --git a/web/src/features/fbaCalculator/components/TextDisplayCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/TextDisplayCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/TextDisplayCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/TextDisplayCell.tsx diff --git a/web/src/features/fbaCalculator/components/WeatherStationCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/WeatherStationCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/WeatherStationCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/WeatherStationCell.tsx diff --git a/web/src/features/fbaCalculator/components/WindSpeedCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/WindSpeedCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/WindSpeedCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/WindSpeedCell.tsx diff --git a/web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx diff --git a/web/src/features/fbaCalculator/components/grassCureCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/grassCureCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/grassCureCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/grassCureCell.test.tsx diff --git a/web/src/components/hfiCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx similarity index 98% rename from web/src/components/hfiCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx index 94ec2fb14d..9e29b06d1e 100644 --- a/web/src/components/hfiCell.test.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx @@ -1,6 +1,6 @@ import { TableContainer, Table, TableBody, TableRow } from '@mui/material' import { render } from '@testing-library/react' -import HFICell from 'components/HFICell' +import HFICell from './HFICell' describe('HFICell', () => { it('should render without color when HFI is undefined', () => { diff --git a/web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/precipCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/precipCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/precipCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/precipCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/selectionCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/selectionCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/selectionCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/selectionCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/windSpeedCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/windSpeedCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/windSpeedCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/windSpeedCell.test.tsx diff --git a/web/src/features/fbaCalculator/fuelTypes.ts b/web/apps/wps-web/src/features/fbaCalculator/fuelTypes.ts similarity index 100% rename from web/src/features/fbaCalculator/fuelTypes.ts rename to web/apps/wps-web/src/features/fbaCalculator/fuelTypes.ts diff --git a/web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx b/web/apps/wps-web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx similarity index 100% rename from web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx rename to web/apps/wps-web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx diff --git a/web/src/features/fbaCalculator/rowManager.test.ts b/web/apps/wps-web/src/features/fbaCalculator/rowManager.test.ts similarity index 100% rename from web/src/features/fbaCalculator/rowManager.test.ts rename to web/apps/wps-web/src/features/fbaCalculator/rowManager.test.ts diff --git a/web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts b/web/apps/wps-web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts similarity index 100% rename from web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts rename to web/apps/wps-web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts diff --git a/web/src/features/fbaCalculator/tableState.ts b/web/apps/wps-web/src/features/fbaCalculator/tableState.ts similarity index 100% rename from web/src/features/fbaCalculator/tableState.ts rename to web/apps/wps-web/src/features/fbaCalculator/tableState.ts diff --git a/web/src/features/fbaCalculator/utils.ts b/web/apps/wps-web/src/features/fbaCalculator/utils.ts similarity index 100% rename from web/src/features/fbaCalculator/utils.ts rename to web/apps/wps-web/src/features/fbaCalculator/utils.ts diff --git a/web/src/features/fbaCalculator/validation.ts b/web/apps/wps-web/src/features/fbaCalculator/validation.ts similarity index 100% rename from web/src/features/fbaCalculator/validation.ts rename to web/apps/wps-web/src/features/fbaCalculator/validation.ts diff --git a/web/src/features/fireWatch/components/CreateFireWatch.tsx b/web/apps/wps-web/src/features/fireWatch/components/CreateFireWatch.tsx similarity index 100% rename from web/src/features/fireWatch/components/CreateFireWatch.tsx rename to web/apps/wps-web/src/features/fireWatch/components/CreateFireWatch.tsx diff --git a/web/src/features/fireWatch/components/DetailPanelContent.tsx b/web/apps/wps-web/src/features/fireWatch/components/DetailPanelContent.tsx similarity index 100% rename from web/src/features/fireWatch/components/DetailPanelContent.tsx rename to web/apps/wps-web/src/features/fireWatch/components/DetailPanelContent.tsx diff --git a/web/src/features/fireWatch/components/FireWatchDashboard.tsx b/web/apps/wps-web/src/features/fireWatch/components/FireWatchDashboard.tsx similarity index 100% rename from web/src/features/fireWatch/components/FireWatchDashboard.tsx rename to web/apps/wps-web/src/features/fireWatch/components/FireWatchDashboard.tsx diff --git a/web/src/features/fireWatch/components/FireWatchDetailsModal.tsx b/web/apps/wps-web/src/features/fireWatch/components/FireWatchDetailsModal.tsx similarity index 100% rename from web/src/features/fireWatch/components/FireWatchDetailsModal.tsx rename to web/apps/wps-web/src/features/fireWatch/components/FireWatchDetailsModal.tsx diff --git a/web/src/features/fireWatch/components/MenuHeader.tsx b/web/apps/wps-web/src/features/fireWatch/components/MenuHeader.tsx similarity index 100% rename from web/src/features/fireWatch/components/MenuHeader.tsx rename to web/apps/wps-web/src/features/fireWatch/components/MenuHeader.tsx diff --git a/web/src/features/fireWatch/components/NavigationDrawer.tsx b/web/apps/wps-web/src/features/fireWatch/components/NavigationDrawer.tsx similarity index 100% rename from web/src/features/fireWatch/components/NavigationDrawer.tsx rename to web/apps/wps-web/src/features/fireWatch/components/NavigationDrawer.tsx diff --git a/web/src/features/fireWatch/components/OptionalHeading.tsx b/web/apps/wps-web/src/features/fireWatch/components/OptionalHeading.tsx similarity index 100% rename from web/src/features/fireWatch/components/OptionalHeading.tsx rename to web/apps/wps-web/src/features/fireWatch/components/OptionalHeading.tsx diff --git a/web/src/features/fireWatch/components/detailPanelContent.test.tsx b/web/apps/wps-web/src/features/fireWatch/components/detailPanelContent.test.tsx similarity index 100% rename from web/src/features/fireWatch/components/detailPanelContent.test.tsx rename to web/apps/wps-web/src/features/fireWatch/components/detailPanelContent.test.tsx diff --git a/web/src/features/fireWatch/components/fireWatchDashboard.test.tsx b/web/apps/wps-web/src/features/fireWatch/components/fireWatchDashboard.test.tsx similarity index 100% rename from web/src/features/fireWatch/components/fireWatchDashboard.test.tsx rename to web/apps/wps-web/src/features/fireWatch/components/fireWatchDashboard.test.tsx diff --git a/web/src/features/fireWatch/components/steps/CompleteStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/CompleteStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/CompleteStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/CompleteStep.tsx diff --git a/web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx diff --git a/web/src/features/fireWatch/components/steps/FuelStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/FuelStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/FuelStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/FuelStep.tsx diff --git a/web/src/features/fireWatch/components/steps/InfoStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/InfoStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/InfoStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/InfoStep.tsx diff --git a/web/src/features/fireWatch/components/steps/LocationStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/LocationStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/LocationStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/LocationStep.tsx diff --git a/web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx diff --git a/web/src/features/fireWatch/components/steps/SummaryTextLine.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/SummaryTextLine.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/SummaryTextLine.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/SummaryTextLine.tsx diff --git a/web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx diff --git a/web/src/features/fireWatch/constants.ts b/web/apps/wps-web/src/features/fireWatch/constants.ts similarity index 100% rename from web/src/features/fireWatch/constants.ts rename to web/apps/wps-web/src/features/fireWatch/constants.ts diff --git a/web/src/features/fireWatch/fireWatchApi.ts b/web/apps/wps-web/src/features/fireWatch/fireWatchApi.ts similarity index 100% rename from web/src/features/fireWatch/fireWatchApi.ts rename to web/apps/wps-web/src/features/fireWatch/fireWatchApi.ts diff --git a/web/src/features/fireWatch/interfaces.ts b/web/apps/wps-web/src/features/fireWatch/interfaces.ts similarity index 100% rename from web/src/features/fireWatch/interfaces.ts rename to web/apps/wps-web/src/features/fireWatch/interfaces.ts diff --git a/web/src/features/fireWatch/pages/FireWatchPage.tsx b/web/apps/wps-web/src/features/fireWatch/pages/FireWatchPage.tsx similarity index 100% rename from web/src/features/fireWatch/pages/FireWatchPage.tsx rename to web/apps/wps-web/src/features/fireWatch/pages/FireWatchPage.tsx diff --git a/web/src/features/fireWatch/slices/burnForecastSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/burnForecastSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/burnForecastSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/burnForecastSlice.ts diff --git a/web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts diff --git a/web/src/features/fireWatch/slices/fireWatchSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/fireWatchSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/fireWatchSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/fireWatchSlice.ts diff --git a/web/src/features/fireWatch/utils.ts b/web/apps/wps-web/src/features/fireWatch/utils.ts similarity index 100% rename from web/src/features/fireWatch/utils.ts rename to web/apps/wps-web/src/features/fireWatch/utils.ts diff --git a/web/src/features/fireWeather/components/AccuracyVariablePicker.tsx b/web/apps/wps-web/src/features/fireWeather/components/AccuracyVariablePicker.tsx similarity index 100% rename from web/src/features/fireWeather/components/AccuracyVariablePicker.tsx rename to web/apps/wps-web/src/features/fireWeather/components/AccuracyVariablePicker.tsx diff --git a/web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx b/web/apps/wps-web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx similarity index 100% rename from web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx rename to web/apps/wps-web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx diff --git a/web/src/features/fireWeather/components/maps/WeatherMap.tsx b/web/apps/wps-web/src/features/fireWeather/components/maps/WeatherMap.tsx similarity index 100% rename from web/src/features/fireWeather/components/maps/WeatherMap.tsx rename to web/apps/wps-web/src/features/fireWeather/components/maps/WeatherMap.tsx diff --git a/web/src/features/fireWeather/components/maps/constants.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/constants.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/constants.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/constants.ts diff --git a/web/src/features/fireWeather/components/maps/stationAccuracy.test.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.test.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/stationAccuracy.test.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.test.ts diff --git a/web/src/features/fireWeather/components/maps/stationAccuracy.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/stationAccuracy.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.ts diff --git a/web/src/features/hfiCalculator/components/AboutDataModal.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/AboutDataModal.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/AboutDataModal.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/AboutDataModal.tsx diff --git a/web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx diff --git a/web/src/features/hfiCalculator/components/CalculatedCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/CalculatedCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/CalculatedCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/CalculatedCell.tsx diff --git a/web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx diff --git a/web/src/features/hfiCalculator/components/DailyHFICell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx similarity index 87% rename from web/src/features/hfiCalculator/components/DailyHFICell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx index 08e2a0092f..7ed221265c 100644 --- a/web/src/features/hfiCalculator/components/DailyHFICell.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx @@ -1,4 +1,4 @@ -import HFICell from 'components/HFICell' +import HFICell from 'features/fbaCalculator/components/HFICell' import CalculatedCell from 'features/hfiCalculator/components/CalculatedCell' import React from 'react' diff --git a/web/src/features/hfiCalculator/components/DailyViewTable.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DailyViewTable.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DailyViewTable.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DailyViewTable.tsx diff --git a/web/src/features/hfiCalculator/components/DangerClassCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DangerClassCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DangerClassCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DangerClassCell.tsx diff --git a/web/src/features/hfiCalculator/components/DayHeaders.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayHeaders.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.test.tsx diff --git a/web/src/features/hfiCalculator/components/DayHeaders.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayHeaders.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.tsx diff --git a/web/src/features/hfiCalculator/components/DayIndexHeaders.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayIndexHeaders.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayIndexHeaders.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayIndexHeaders.tsx diff --git a/web/src/features/hfiCalculator/components/DownloadPDFButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DownloadPDFButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DownloadPDFButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DownloadPDFButton.tsx diff --git a/web/src/features/hfiCalculator/components/EmptyFireCentre.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/EmptyFireCentre.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/EmptyFireCentre.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/EmptyFireCentre.tsx diff --git a/web/src/features/hfiCalculator/components/EmptyStaticCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/EmptyStaticCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/EmptyStaticCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/EmptyStaticCells.tsx diff --git a/web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx diff --git a/web/src/features/hfiCalculator/components/FireCentreCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireCentreCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireCentreCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireCentreCell.tsx diff --git a/web/src/features/hfiCalculator/components/FireCentreDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireCentreDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireCentreDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireCentreDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/FireStartsCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireStartsCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireStartsCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireStartsCell.tsx diff --git a/web/src/features/hfiCalculator/components/FireStartsDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireStartsDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireStartsDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireStartsDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/GrassCureCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/GrassCureCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/GrassCureCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/GrassCureCell.tsx diff --git a/web/src/features/hfiCalculator/components/HFIErrorAlert.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFIErrorAlert.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFIErrorAlert.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFIErrorAlert.tsx diff --git a/web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx diff --git a/web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx diff --git a/web/src/features/hfiCalculator/components/HFISuccessAlert.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFISuccessAlert.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFISuccessAlert.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFISuccessAlert.tsx diff --git a/web/src/features/hfiCalculator/components/HeaderRowCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HeaderRowCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HeaderRowCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HeaderRowCell.tsx diff --git a/web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx diff --git a/web/src/features/hfiCalculator/components/IntensityGroupCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/IntensityGroupCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/IntensityGroupCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/IntensityGroupCell.tsx diff --git a/web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx diff --git a/web/src/features/hfiCalculator/components/LoadingBackdrop.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/LoadingBackdrop.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/LoadingBackdrop.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/LoadingBackdrop.tsx diff --git a/web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx diff --git a/web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx diff --git a/web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx diff --git a/web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx diff --git a/web/src/features/hfiCalculator/components/PrepLevelCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PrepLevelCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PrepLevelCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PrepLevelCell.tsx diff --git a/web/src/features/hfiCalculator/components/RequiredDataCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/RequiredDataCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/RequiredDataCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/RequiredDataCell.tsx diff --git a/web/src/features/hfiCalculator/components/StaticCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx similarity index 97% rename from web/src/features/hfiCalculator/components/StaticCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx index 5e4fb9c9c7..8310d43a7f 100644 --- a/web/src/features/hfiCalculator/components/StaticCells.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx @@ -1,6 +1,6 @@ import { TableCell } from '@mui/material' import { FuelType, StationDaily, WeatherStation } from 'api/hfiCalculatorAPI' -import HFICell from 'components/HFICell' +import HFICell from 'features/fbaCalculator/components/HFICell' import EmptyStaticCells from 'features/hfiCalculator/components/EmptyStaticCells' import HighestDailyFIGCell from 'features/hfiCalculator/components/HighestDailyFIGCell' import IntensityGroupCell from 'features/hfiCalculator/components/IntensityGroupCell' diff --git a/web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx diff --git a/web/src/features/hfiCalculator/components/StationSelectCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StationSelectCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StationSelectCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StationSelectCell.tsx diff --git a/web/src/features/hfiCalculator/components/StatusCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StatusCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StatusCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StatusCell.tsx diff --git a/web/src/features/hfiCalculator/components/StyledFireComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledFireComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledFireComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledFireComponents.tsx diff --git a/web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx diff --git a/web/src/features/hfiCalculator/components/StyledTableComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledTableComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledTableComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledTableComponents.tsx diff --git a/web/src/features/hfiCalculator/components/ViewSwitcher.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcher.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ViewSwitcher.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcher.tsx diff --git a/web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx diff --git a/web/src/features/hfiCalculator/components/WeeklyROSCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WeeklyROSCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WeeklyROSCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WeeklyROSCell.tsx diff --git a/web/src/features/hfiCalculator/components/WeeklyViewTable.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WeeklyViewTable.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WeeklyViewTable.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WeeklyViewTable.tsx diff --git a/web/src/features/hfiCalculator/components/WindDirectionCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WindDirectionCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WindDirectionCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WindDirectionCell.tsx diff --git a/web/src/features/hfiCalculator/components/dailyHFICell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/dailyHFICell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/dailyHFICell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/dailyHFICell.test.tsx diff --git a/web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx diff --git a/web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx diff --git a/web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/grassCureCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/grassCureCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/grassCureCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/grassCureCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/headerRowCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/headerRowCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/headerRowCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/headerRowCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx diff --git a/web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx diff --git a/web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx diff --git a/web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx diff --git a/web/src/features/hfiCalculator/components/prepLevelCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/prepLevelCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/prepLevelCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/prepLevelCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/staticCells.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/staticCells.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/staticCells.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/staticCells.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx similarity index 92% rename from web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx index f22df0e8c0..1fef5f8cd5 100644 --- a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx @@ -6,7 +6,8 @@ import { useDispatch, useSelector } from 'react-redux' import { selectFireWeatherStations, selectHFICalculatorState } from 'app/rootReducer' import { setStationsUpdatedFailed, StationInfo } from 'features/hfiCalculator/slices/hfiCalculatorSlice' import { AppDispatch } from 'app/store' -import { FuelType, PlanningArea } from 'api/hfiCalculatorAPI' +import { BasicPlanningArea, BasicWFWXStation, FuelType, PlanningArea, StationAdminRow } from 'api/hfiCalculatorAPI' +export type { BasicPlanningArea, BasicWFWXStation, StationAdminRow } from 'api/hfiCalculatorAPI' import { groupBy, isNull, isUndefined, sortBy } from 'lodash' import { fetchWxStations } from 'features/stations/slices/stationsSlice' import { getStations, StationSource } from 'api/stationAPI' @@ -23,28 +24,12 @@ const CloseIconButton = styled(IconButton, { right: '0px' }) -export interface BasicPlanningArea { - id: number - name: string -} -export interface BasicWFWXStation { - code: number - name: string -} - export interface AddStationOptions { planningAreaOptions: BasicPlanningArea[] stationOptions: BasicWFWXStation[] fuelTypeOptions: FuelType[] } -export interface StationAdminRow { - planningAreaId: number - rowId: number - station?: BasicWFWXStation - fuelType?: Pick -} - export interface AddStationModalProps { testId?: string planningAreas?: PlanningArea[] diff --git a/web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationSelectCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationSelectCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationSelectCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationSelectCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/statusCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/statusCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/statusCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/statusCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/testHelpers.ts b/web/apps/wps-web/src/features/hfiCalculator/components/testHelpers.ts similarity index 100% rename from web/src/features/hfiCalculator/components/testHelpers.ts rename to web/apps/wps-web/src/features/hfiCalculator/components/testHelpers.ts diff --git a/web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx diff --git a/web/src/features/hfiCalculator/constants.ts b/web/apps/wps-web/src/features/hfiCalculator/constants.ts similarity index 100% rename from web/src/features/hfiCalculator/constants.ts rename to web/apps/wps-web/src/features/hfiCalculator/constants.ts diff --git a/web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx b/web/apps/wps-web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx similarity index 100% rename from web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx rename to web/apps/wps-web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx diff --git a/web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts diff --git a/web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts diff --git a/web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts diff --git a/web/src/features/hfiCalculator/slices/hfiReadySlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiReadySlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.ts diff --git a/web/src/features/hfiCalculator/slices/stationsSlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/stationsSlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/stationsSlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/stationsSlice.ts diff --git a/web/src/features/hfiCalculator/util.ts b/web/apps/wps-web/src/features/hfiCalculator/util.ts similarity index 100% rename from web/src/features/hfiCalculator/util.ts rename to web/apps/wps-web/src/features/hfiCalculator/util.ts diff --git a/web/src/features/hfiCalculator/validation.ts b/web/apps/wps-web/src/features/hfiCalculator/validation.ts similarity index 100% rename from web/src/features/hfiCalculator/validation.ts rename to web/apps/wps-web/src/features/hfiCalculator/validation.ts diff --git a/web/src/features/landingPage/components/BetaTag.tsx b/web/apps/wps-web/src/features/landingPage/components/BetaTag.tsx similarity index 100% rename from web/src/features/landingPage/components/BetaTag.tsx rename to web/apps/wps-web/src/features/landingPage/components/BetaTag.tsx diff --git a/web/src/features/landingPage/components/Footer.tsx b/web/apps/wps-web/src/features/landingPage/components/Footer.tsx similarity index 100% rename from web/src/features/landingPage/components/Footer.tsx rename to web/apps/wps-web/src/features/landingPage/components/Footer.tsx diff --git a/web/src/features/landingPage/components/Sidebar.tsx b/web/apps/wps-web/src/features/landingPage/components/Sidebar.tsx similarity index 100% rename from web/src/features/landingPage/components/Sidebar.tsx rename to web/apps/wps-web/src/features/landingPage/components/Sidebar.tsx diff --git a/web/src/features/landingPage/components/SidebarToolList.tsx b/web/apps/wps-web/src/features/landingPage/components/SidebarToolList.tsx similarity index 100% rename from web/src/features/landingPage/components/SidebarToolList.tsx rename to web/apps/wps-web/src/features/landingPage/components/SidebarToolList.tsx diff --git a/web/src/features/landingPage/components/Subheading.tsx b/web/apps/wps-web/src/features/landingPage/components/Subheading.tsx similarity index 100% rename from web/src/features/landingPage/components/Subheading.tsx rename to web/apps/wps-web/src/features/landingPage/components/Subheading.tsx diff --git a/web/src/features/landingPage/components/ToolCard.tsx b/web/apps/wps-web/src/features/landingPage/components/ToolCard.tsx similarity index 100% rename from web/src/features/landingPage/components/ToolCard.tsx rename to web/apps/wps-web/src/features/landingPage/components/ToolCard.tsx diff --git a/web/src/features/landingPage/components/ToolCards.tsx b/web/apps/wps-web/src/features/landingPage/components/ToolCards.tsx similarity index 100% rename from web/src/features/landingPage/components/ToolCards.tsx rename to web/apps/wps-web/src/features/landingPage/components/ToolCards.tsx diff --git a/web/src/features/landingPage/images/collaboardIcon.svg b/web/apps/wps-web/src/features/landingPage/images/collaboardIcon.svg similarity index 100% rename from web/src/features/landingPage/images/collaboardIcon.svg rename to web/apps/wps-web/src/features/landingPage/images/collaboardIcon.svg diff --git a/web/src/features/landingPage/images/msTeams.svg b/web/apps/wps-web/src/features/landingPage/images/msTeams.svg similarity index 100% rename from web/src/features/landingPage/images/msTeams.svg rename to web/apps/wps-web/src/features/landingPage/images/msTeams.svg diff --git a/web/src/features/landingPage/pages/LandingPage.tsx b/web/apps/wps-web/src/features/landingPage/pages/LandingPage.tsx similarity index 100% rename from web/src/features/landingPage/pages/LandingPage.tsx rename to web/apps/wps-web/src/features/landingPage/pages/LandingPage.tsx diff --git a/web/src/features/landingPage/toolInfo.tsx b/web/apps/wps-web/src/features/landingPage/toolInfo.tsx similarity index 100% rename from web/src/features/landingPage/toolInfo.tsx rename to web/apps/wps-web/src/features/landingPage/toolInfo.tsx diff --git a/web/src/features/map/Map.tsx b/web/apps/wps-web/src/features/map/Map.tsx similarity index 100% rename from web/src/features/map/Map.tsx rename to web/apps/wps-web/src/features/map/Map.tsx diff --git a/web/src/features/map/TileLayer.tsx b/web/apps/wps-web/src/features/map/TileLayer.tsx similarity index 100% rename from web/src/features/map/TileLayer.tsx rename to web/apps/wps-web/src/features/map/TileLayer.tsx diff --git a/web/src/features/map/VectorLayer.tsx b/web/apps/wps-web/src/features/map/VectorLayer.tsx similarity index 100% rename from web/src/features/map/VectorLayer.tsx rename to web/apps/wps-web/src/features/map/VectorLayer.tsx diff --git a/web/src/features/moreCast2/components/ActualCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ActualCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ActualCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ActualCell.tsx diff --git a/web/src/features/moreCast2/components/ColumnDefBuilder.tsx b/web/apps/wps-web/src/features/moreCast2/components/ColumnDefBuilder.tsx similarity index 100% rename from web/src/features/moreCast2/components/ColumnDefBuilder.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ColumnDefBuilder.tsx diff --git a/web/src/features/moreCast2/components/DataGridColumns.tsx b/web/apps/wps-web/src/features/moreCast2/components/DataGridColumns.tsx similarity index 100% rename from web/src/features/moreCast2/components/DataGridColumns.tsx rename to web/apps/wps-web/src/features/moreCast2/components/DataGridColumns.tsx diff --git a/web/src/features/moreCast2/components/EditInputCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/EditInputCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/EditInputCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/EditInputCell.tsx diff --git a/web/src/features/moreCast2/components/ForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ForecastDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastDataGrid.tsx diff --git a/web/src/features/moreCast2/components/ForecastHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastHeader.tsx diff --git a/web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx diff --git a/web/src/features/moreCast2/components/GridComponentRenderer.tsx b/web/apps/wps-web/src/features/moreCast2/components/GridComponentRenderer.tsx similarity index 100% rename from web/src/features/moreCast2/components/GridComponentRenderer.tsx rename to web/apps/wps-web/src/features/moreCast2/components/GridComponentRenderer.tsx diff --git a/web/src/features/moreCast2/components/GroupHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/GroupHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/GroupHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/GroupHeader.tsx diff --git a/web/src/features/moreCast2/components/InvalidCellToolTip.tsx b/web/apps/wps-web/src/features/moreCast2/components/InvalidCellToolTip.tsx similarity index 100% rename from web/src/features/moreCast2/components/InvalidCellToolTip.tsx rename to web/apps/wps-web/src/features/moreCast2/components/InvalidCellToolTip.tsx diff --git a/web/src/features/moreCast2/components/ModelHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/ModelHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/ModelHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ModelHeader.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2Column.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2Column.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2Column.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2Column.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2Snackbar.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2Snackbar.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2Snackbar.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2Snackbar.tsx diff --git a/web/src/features/moreCast2/components/MorecastAboutDataContent.tsx b/web/apps/wps-web/src/features/moreCast2/components/MorecastAboutDataContent.tsx similarity index 100% rename from web/src/features/moreCast2/components/MorecastAboutDataContent.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MorecastAboutDataContent.tsx diff --git a/web/src/features/moreCast2/components/ResetForecastButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/ResetForecastButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/ResetForecastButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ResetForecastButton.tsx diff --git a/web/src/features/moreCast2/components/SaveForecastButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/SaveForecastButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/SaveForecastButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/SaveForecastButton.tsx diff --git a/web/src/features/moreCast2/components/SelectableButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/SelectableButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/SelectableButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/SelectableButton.tsx diff --git a/web/src/features/moreCast2/components/StationGroupDropdown.tsx b/web/apps/wps-web/src/features/moreCast2/components/StationGroupDropdown.tsx similarity index 100% rename from web/src/features/moreCast2/components/StationGroupDropdown.tsx rename to web/apps/wps-web/src/features/moreCast2/components/StationGroupDropdown.tsx diff --git a/web/src/features/moreCast2/components/StationPanel.tsx b/web/apps/wps-web/src/features/moreCast2/components/StationPanel.tsx similarity index 100% rename from web/src/features/moreCast2/components/StationPanel.tsx rename to web/apps/wps-web/src/features/moreCast2/components/StationPanel.tsx diff --git a/web/src/features/moreCast2/components/TabbedDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/TabbedDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/TabbedDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/TabbedDataGrid.tsx diff --git a/web/src/features/moreCast2/components/ValidatedCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx diff --git a/web/src/features/moreCast2/components/WeatherModelDropdown.tsx b/web/apps/wps-web/src/features/moreCast2/components/WeatherModelDropdown.tsx similarity index 100% rename from web/src/features/moreCast2/components/WeatherModelDropdown.tsx rename to web/apps/wps-web/src/features/moreCast2/components/WeatherModelDropdown.tsx diff --git a/web/src/features/moreCast2/components/colDefBuilder.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/colDefBuilder.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/colDefBuilder.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/colDefBuilder.test.tsx diff --git a/web/src/features/moreCast2/components/editInputCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/editInputCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/editInputCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/editInputCell.test.tsx diff --git a/web/src/features/moreCast2/components/forecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/forecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/forecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/forecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/forecastHeader.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/forecastHeader.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/forecastHeader.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/forecastHeader.test.tsx diff --git a/web/src/features/moreCast2/components/gridComponentRenderer.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/gridComponentRenderer.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/gridComponentRenderer.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/gridComponentRenderer.test.tsx diff --git a/web/src/features/moreCast2/components/modelHeader.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/modelHeader.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/modelHeader.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/modelHeader.test.tsx diff --git a/web/src/features/moreCast2/components/moreCast2Column.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/moreCast2Column.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/moreCast2Column.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/moreCast2Column.test.tsx diff --git a/web/src/features/moreCast2/components/resetForecastButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/resetForecastButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/resetForecastButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/resetForecastButton.test.tsx diff --git a/web/src/features/moreCast2/components/saveForecastButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/saveForecastButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/saveForecastButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/saveForecastButton.test.tsx diff --git a/web/src/features/moreCast2/components/selectableButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/selectableButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/selectableButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/selectableButton.test.tsx diff --git a/web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx diff --git a/web/src/features/moreCast2/components/stationPanel.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/stationPanel.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/stationPanel.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/stationPanel.test.tsx diff --git a/web/src/features/moreCast2/components/tabbedDataGrid.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/tabbedDataGrid.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/tabbedDataGrid.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/tabbedDataGrid.test.tsx diff --git a/web/src/features/moreCast2/components/testHelper.tsx b/web/apps/wps-web/src/features/moreCast2/components/testHelper.tsx similarity index 100% rename from web/src/features/moreCast2/components/testHelper.tsx rename to web/apps/wps-web/src/features/moreCast2/components/testHelper.tsx diff --git a/web/src/features/moreCast2/components/validatedForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/weatherModelDropdown.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/weatherModelDropdown.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/weatherModelDropdown.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/weatherModelDropdown.test.tsx diff --git a/web/src/features/moreCast2/forecastDraft.test.ts b/web/apps/wps-web/src/features/moreCast2/forecastDraft.test.ts similarity index 100% rename from web/src/features/moreCast2/forecastDraft.test.ts rename to web/apps/wps-web/src/features/moreCast2/forecastDraft.test.ts diff --git a/web/src/features/moreCast2/forecastDraft.ts b/web/apps/wps-web/src/features/moreCast2/forecastDraft.ts similarity index 100% rename from web/src/features/moreCast2/forecastDraft.ts rename to web/apps/wps-web/src/features/moreCast2/forecastDraft.ts diff --git a/web/src/features/moreCast2/interfaces.ts b/web/apps/wps-web/src/features/moreCast2/interfaces.ts similarity index 92% rename from web/src/features/moreCast2/interfaces.ts rename to web/apps/wps-web/src/features/moreCast2/interfaces.ts index 8c5c88bbc0..32fa4d1d6f 100644 --- a/web/src/features/moreCast2/interfaces.ts +++ b/web/apps/wps-web/src/features/moreCast2/interfaces.ts @@ -1,24 +1,13 @@ import { DateTime } from 'luxon' import { ModelType } from 'api/moreCast2API' +export type { MoreCast2ForecastRow } from 'api/moreCast2API' + export interface PredictionItem { choice: ModelType value: number } -export interface MoreCast2ForecastRow { - id: string - forDate: DateTime - precip: PredictionItem - rh: PredictionItem - stationCode: number - stationName: string - temp: PredictionItem - windDirection: PredictionItem - windSpeed: PredictionItem - grassCuring: PredictionItem -} - export interface BaseRow { // Identity and date properties id: string diff --git a/web/src/features/moreCast2/pages/MoreCast2Page.tsx b/web/apps/wps-web/src/features/moreCast2/pages/MoreCast2Page.tsx similarity index 100% rename from web/src/features/moreCast2/pages/MoreCast2Page.tsx rename to web/apps/wps-web/src/features/moreCast2/pages/MoreCast2Page.tsx diff --git a/web/src/features/moreCast2/rowFilters.test.ts b/web/apps/wps-web/src/features/moreCast2/rowFilters.test.ts similarity index 100% rename from web/src/features/moreCast2/rowFilters.test.ts rename to web/apps/wps-web/src/features/moreCast2/rowFilters.test.ts diff --git a/web/src/features/moreCast2/rowFilters.ts b/web/apps/wps-web/src/features/moreCast2/rowFilters.ts similarity index 100% rename from web/src/features/moreCast2/rowFilters.ts rename to web/apps/wps-web/src/features/moreCast2/rowFilters.ts diff --git a/web/src/features/moreCast2/saveForecast.test.ts b/web/apps/wps-web/src/features/moreCast2/saveForecast.test.ts similarity index 100% rename from web/src/features/moreCast2/saveForecast.test.ts rename to web/apps/wps-web/src/features/moreCast2/saveForecast.test.ts diff --git a/web/src/features/moreCast2/saveForecasts.ts b/web/apps/wps-web/src/features/moreCast2/saveForecasts.ts similarity index 100% rename from web/src/features/moreCast2/saveForecasts.ts rename to web/apps/wps-web/src/features/moreCast2/saveForecasts.ts diff --git a/web/src/features/moreCast2/slices/dataSlice.test.ts b/web/apps/wps-web/src/features/moreCast2/slices/dataSlice.test.ts similarity index 100% rename from web/src/features/moreCast2/slices/dataSlice.test.ts rename to web/apps/wps-web/src/features/moreCast2/slices/dataSlice.test.ts diff --git a/web/src/features/moreCast2/slices/dataSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/dataSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/dataSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/dataSlice.ts diff --git a/web/src/features/moreCast2/slices/selectedStationsSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/selectedStationsSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/selectedStationsSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/selectedStationsSlice.ts diff --git a/web/src/features/moreCast2/slices/validInputSlice.test.ts b/web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.test.ts similarity index 100% rename from web/src/features/moreCast2/slices/validInputSlice.test.ts rename to web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.test.ts diff --git a/web/src/features/moreCast2/slices/validInputSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/validInputSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.ts diff --git a/web/src/features/moreCast2/util.test.ts b/web/apps/wps-web/src/features/moreCast2/util.test.ts similarity index 100% rename from web/src/features/moreCast2/util.test.ts rename to web/apps/wps-web/src/features/moreCast2/util.test.ts diff --git a/web/src/features/moreCast2/util.ts b/web/apps/wps-web/src/features/moreCast2/util.ts similarity index 100% rename from web/src/features/moreCast2/util.ts rename to web/apps/wps-web/src/features/moreCast2/util.ts diff --git a/web/src/features/percentileCalculator/components/PercentileActionButtons.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileActionButtons.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileActionButtons.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileActionButtons.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileResults.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileResults.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileResults.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileResults.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileSnackbar.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileSnackbar.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileSnackbar.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileSnackbar.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileTextfield.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileTextfield.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileTextfield.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileTextfield.tsx diff --git a/web/src/features/percentileCalculator/components/TimeRangeSlider.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/TimeRangeSlider.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/TimeRangeSlider.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/TimeRangeSlider.tsx diff --git a/web/src/features/percentileCalculator/components/WxStationDropdown.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/WxStationDropdown.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/WxStationDropdown.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/WxStationDropdown.tsx diff --git a/web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx b/web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx similarity index 100% rename from web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx rename to web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx diff --git a/web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx b/web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx similarity index 100% rename from web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx rename to web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx diff --git a/web/src/features/percentileCalculator/slices/percentilesSlice.ts b/web/apps/wps-web/src/features/percentileCalculator/slices/percentilesSlice.ts similarity index 100% rename from web/src/features/percentileCalculator/slices/percentilesSlice.ts rename to web/apps/wps-web/src/features/percentileCalculator/slices/percentilesSlice.ts diff --git a/web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx diff --git a/web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterLegend.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterLegend.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterLegend.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterLegend.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterTooltip.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterTooltip.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterTooltip.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterTooltip.tsx diff --git a/web/src/features/sfmsInsights/components/map/SFMSMap.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/SFMSMap.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/SFMSMap.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/SFMSMap.tsx diff --git a/web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts diff --git a/web/src/features/sfmsInsights/components/map/layerDefinitions.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerDefinitions.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.ts diff --git a/web/src/features/sfmsInsights/components/map/layerManager.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerManager.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.test.ts diff --git a/web/src/features/sfmsInsights/components/map/layerManager.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerManager.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterConfig.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterConfig.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterConfig.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterConfig.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx diff --git a/web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx diff --git a/web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx b/web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx similarity index 100% rename from web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx rename to web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx diff --git a/web/src/features/stations/slices/stationsSlice.ts b/web/apps/wps-web/src/features/stations/slices/stationsSlice.ts similarity index 100% rename from web/src/features/stations/slices/stationsSlice.ts rename to web/apps/wps-web/src/features/stations/slices/stationsSlice.ts diff --git a/web/src/fonts/BCSans-Bold.woff b/web/apps/wps-web/src/fonts/BCSans-Bold.woff similarity index 100% rename from web/src/fonts/BCSans-Bold.woff rename to web/apps/wps-web/src/fonts/BCSans-Bold.woff diff --git a/web/src/fonts/BCSans-Bold.woff2 b/web/apps/wps-web/src/fonts/BCSans-Bold.woff2 similarity index 100% rename from web/src/fonts/BCSans-Bold.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Bold.woff2 diff --git a/web/src/fonts/BCSans-BoldItalic.woff b/web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff similarity index 100% rename from web/src/fonts/BCSans-BoldItalic.woff rename to web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff diff --git a/web/src/fonts/BCSans-BoldItalic.woff2 b/web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff2 similarity index 100% rename from web/src/fonts/BCSans-BoldItalic.woff2 rename to web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff2 diff --git a/web/src/fonts/BCSans-Italic.woff b/web/apps/wps-web/src/fonts/BCSans-Italic.woff similarity index 100% rename from web/src/fonts/BCSans-Italic.woff rename to web/apps/wps-web/src/fonts/BCSans-Italic.woff diff --git a/web/src/fonts/BCSans-Italic.woff2 b/web/apps/wps-web/src/fonts/BCSans-Italic.woff2 similarity index 100% rename from web/src/fonts/BCSans-Italic.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Italic.woff2 diff --git a/web/src/fonts/BCSans-Regular.woff b/web/apps/wps-web/src/fonts/BCSans-Regular.woff similarity index 100% rename from web/src/fonts/BCSans-Regular.woff rename to web/apps/wps-web/src/fonts/BCSans-Regular.woff diff --git a/web/src/fonts/BCSans-Regular.woff2 b/web/apps/wps-web/src/fonts/BCSans-Regular.woff2 similarity index 100% rename from web/src/fonts/BCSans-Regular.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Regular.woff2 diff --git a/web/src/fonts/FONTLOG_README.txt b/web/apps/wps-web/src/fonts/FONTLOG_README.txt similarity index 100% rename from web/src/fonts/FONTLOG_README.txt rename to web/apps/wps-web/src/fonts/FONTLOG_README.txt diff --git a/web/src/fonts/LICENSE_OFL.txt b/web/apps/wps-web/src/fonts/LICENSE_OFL.txt similarity index 100% rename from web/src/fonts/LICENSE_OFL.txt rename to web/apps/wps-web/src/fonts/LICENSE_OFL.txt diff --git a/web/src/index.css b/web/apps/wps-web/src/index.css similarity index 100% rename from web/src/index.css rename to web/apps/wps-web/src/index.css diff --git a/web/src/index.tsx b/web/apps/wps-web/src/index.tsx similarity index 100% rename from web/src/index.tsx rename to web/apps/wps-web/src/index.tsx diff --git a/web/src/react-app-env.d.ts b/web/apps/wps-web/src/react-app-env.d.ts similarity index 100% rename from web/src/react-app-env.d.ts rename to web/apps/wps-web/src/react-app-env.d.ts diff --git a/web/src/setupTests.ts b/web/apps/wps-web/src/setupTests.ts similarity index 100% rename from web/src/setupTests.ts rename to web/apps/wps-web/src/setupTests.ts diff --git a/web/src/test/testUtils.ts b/web/apps/wps-web/src/test/testUtils.ts similarity index 100% rename from web/src/test/testUtils.ts rename to web/apps/wps-web/src/test/testUtils.ts diff --git a/web/src/types/global.d.ts b/web/apps/wps-web/src/types/global.d.ts similarity index 100% rename from web/src/types/global.d.ts rename to web/apps/wps-web/src/types/global.d.ts diff --git a/web/src/whatwg-fetch.d.ts b/web/apps/wps-web/src/whatwg-fetch.d.ts similarity index 100% rename from web/src/whatwg-fetch.d.ts rename to web/apps/wps-web/src/whatwg-fetch.d.ts diff --git a/web/apps/wps-web/tsconfig.app.json b/web/apps/wps-web/tsconfig.app.json new file mode 100644 index 0000000000..368a30db5a --- /dev/null +++ b/web/apps/wps-web/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "extends": "@wps/tsconfig/react-app.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client", "node", "vitest/globals", "@testing-library/jest-dom"], + "noUnusedLocals": false, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@/app/theme": ["../../packages/ui/src/theme"], + "@/api/*": ["../../packages/api/src/*"], + "@/utils/*": ["../../packages/utils/src/*"], + "@/components/*": ["../../packages/ui/src/*"], + "#root/*": ["./*"], + "app/theme": ["../../packages/ui/src/theme"], + "app/*": ["./src/app/*"], + "utils/*": ["../../packages/utils/src/*"], + "api/*": ["../../packages/api/src/*"], + "features/*": ["./src/features/*"], + "components/*": ["../../packages/ui/src/*"], + "components": ["../../packages/ui/src/index"], + "commonSlices/*": ["./src/commonSlices/*"] + } + }, + "include": ["src", "../../packages/ui/src", "../../packages/api/src", "../../packages/utils/src"] +} diff --git a/web/apps/wps-web/tsconfig.json b/web/apps/wps-web/tsconfig.json new file mode 100644 index 0000000000..fcf5db7f84 --- /dev/null +++ b/web/apps/wps-web/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], +} \ No newline at end of file diff --git a/web/tsconfig.node.json b/web/apps/wps-web/tsconfig.node.json similarity index 100% rename from web/tsconfig.node.json rename to web/apps/wps-web/tsconfig.node.json diff --git a/web/vite.config.ts b/web/apps/wps-web/vite.config.ts similarity index 55% rename from web/vite.config.ts rename to web/apps/wps-web/vite.config.ts index 8acf9505c2..d35a2d11c7 100644 --- a/web/vite.config.ts +++ b/web/apps/wps-web/vite.config.ts @@ -64,16 +64,25 @@ export default defineConfig({ } }, resolve: { - alias: { - '@': path.resolve(__dirname, './src'), - app: resolve(__dirname, 'src', 'app'), - features: resolve(__dirname, 'src', 'features'), - utils: resolve(__dirname, 'src', 'utils'), - commonSlices: resolve(__dirname, 'src', 'commonSlices'), - components: resolve(__dirname, 'src', 'components'), - api: resolve(__dirname, 'src', 'api'), - documents: resolve(__dirname, 'src', 'documents'), - '#root': resolve(__dirname) - } + alias: [ + // @/app/theme remapped to ui package (must come before @/app/ and @/) + { find: '@/app/theme', replacement: resolve(__dirname, '../../packages/ui/src/theme') }, + // @/api, @/utils, @/components remapped to extracted packages + { find: /^@\/api\/(.*)/, replacement: resolve(__dirname, '../../packages/api/src/$1') }, + { find: /^@\/utils\/(.*)/, replacement: resolve(__dirname, '../../packages/utils/src/$1') }, + { find: /^@\/components\/(.*)/, replacement: resolve(__dirname, '../../packages/ui/src/$1') }, + // bare aliases + { find: '@', replacement: path.resolve(__dirname, './src') }, + // app/theme specifically remapped to ui package (must come before app) + { find: 'app/theme', replacement: resolve(__dirname, '../../packages/ui/src/theme') }, + { find: 'app', replacement: resolve(__dirname, 'src/app') }, + { find: 'features', replacement: resolve(__dirname, 'src/features') }, + { find: 'utils', replacement: resolve(__dirname, '../../packages/utils/src') }, + { find: 'commonSlices', replacement: resolve(__dirname, 'src/commonSlices') }, + { find: 'components', replacement: resolve(__dirname, '../../packages/ui/src') }, + { find: 'api', replacement: resolve(__dirname, '../../packages/api/src') }, + { find: 'documents', replacement: resolve(__dirname, 'src/documents') }, + { find: '#root', replacement: resolve(__dirname) } + ] } }) diff --git a/web/vitest.config.ts b/web/apps/wps-web/vitest.config.ts similarity index 100% rename from web/vitest.config.ts rename to web/apps/wps-web/vitest.config.ts diff --git a/web/package.json b/web/package.json index 63e529de70..4e78cc331a 100644 --- a/web/package.json +++ b/web/package.json @@ -1,125 +1,18 @@ { - "name": "wps-web", - "version": "0.1.0", - "engines": { - "node": ">=20", - "npm": ">=10.7.0" - }, - "type": "module", - "license": "Apache-2.0", - "licenses": [ - { - "type": "Apache-2.0", - "url": "https://www.apache.org/licenses/LICENSE-2.0" - } + "name": "wps-frontend", + "private": true, + "workspaces": [ + "apps/*", + "packages/*" ], - "dependencies": { - "@emotion/react": "^11.8.2", - "@emotion/styled": "^11.8.1", - "@mui/icons-material": "^5.5.1", - "@mui/material": "5.15.20", - "@mui/system": "^5.15.14", - "@mui/x-data-grid-pro": "^6.0.0", - "@mui/x-date-pickers": "^7.29.4", - "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51", - "@reduxjs/toolkit": "^2.2.7", - "@sentry/react": "^10.0.0", - "@sentry/vite-plugin": "^5.0.0", - "@types/esri-leaflet": "^3.0.0", - "@types/leaflet": "^1.7.0", - "@types/lodash": "^4.14.173", - "@types/luxon": "^3.0.2", - "@types/react": "18.3.3", - "@types/react-dom": "^18.3.0", - "@types/react-plotly.js": "^2.2.4", - "@types/react-router-dom": "^5.3.3", - "@types/webpack-env": "^1.15.1", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "@vitest/coverage-v8": "^4.0.8", - "axios": "1.8.2", - "date-fns": "^4.0.0", - "eslint-config-prettier": "^10.0.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.4", - "esri-leaflet": "3.0.12", - "filefy": "^0.1.11", - "jsdom": "^26.0.0", - "jwt-decode": "^4.0.0", - "keycloak-js": "^25.0.0", - "leaflet": "^1.7.1", - "lodash": "^4.17.21", - "luxon": "^3.0.2", - "match-sorter": "^8.0.0", - "nyc": "^17.0.0", - "ol": "10.0.0", - "ol-mapbox-style": "^13.1.1", - "ol-pmtiles": "^2.0.0", - "prettier": "^3.3.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-is": "^19.2.4", - "react-redux": "^9.1.2", - "react-router-dom": "^7.6.2", - "recharts": "^3.0.0", - "typescript": "^5.2.2", - "vitest": "^4.0.0", - "whatwg-fetch": "^3.6.20" - }, + "packageManager": "yarn@4.13.0", "scripts": { - "start": "vite", - "start:cypress": "export $(cat .env.cypress | xargs) && yarn start", - "build": "tsc -b && vite build", - "build:prod": "tsc -b && vite build", - "test": "VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest", - "test:ci": "CI=true npm test", - "coverage": "npm test -- --coverage --watchAll=false", - "coverage:ci": "CI=true VITE_KEYCLOAK_CLIENT=wps-web VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest run --coverage", - "cy:open": "cypress open", - "cy:run": "cypress run --browser chrome --config watchForFileChanges=false", - "cypress:ci": "start-server-and-test start:cypress http://localhost:3030 'cy:run'", - "lint": "eslint", - "lint:fix": "eslint --fix", - "format": "prettier --write \"**/*.+(js|jsx|json|yml|yaml|css|md)\"", - "finalizeCoverage": "yarn node mergeCoverage.cjs", - "preview": "vite preview" + "build": "turbo build", + "test": "turbo test", + "lint": "turbo lint", + "dev": "turbo dev" }, "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "@cypress/code-coverage": "^4.0.0", - "@eslint/compat": "^2.0.0", - "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^16.0.0", - "@testing-library/user-event": "^14.5.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/jest": "^30.0.0", - "@types/react-is": "^19", - "@types/recharts": "^1.8.23", - "@vitejs/plugin-react": "^4.3.1", - "babel-loader": "^10.1.1", - "cypress": "^15.10.0", - "eslint": "^9.7.0", - "eslint-plugin-react-hooks": "^7.0.0", - "eslint-plugin-react-refresh": "^0.4.7", - "globals": "^17.0.0", - "rollup": "^4.59.0", - "start-server-and-test": "^2.0.0", - "ts-sinon": "^2.0.2", - "vite": "^7.0.0", - "vite-plugin-istanbul": "^7.0.0", - "vite-plugin-svgr": "^4.2.0", - "webpack": "^5.105.4" - }, - "nyc": { - "report-dir": "coverage-cypress", - "excludeAfterRemap": true, - "exclude": [ - "src/serviceWorker.ts", - "src/app/store.ts" - ] - }, - "packageManager": "yarn@4.13.0" + "turbo": "^2.0.0" + } } diff --git a/web/packages/api/package.json b/web/packages/api/package.json new file mode 100644 index 0000000000..f0c559c365 --- /dev/null +++ b/web/packages/api/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/api", + "version": "0.0.0", + "private": true +} diff --git a/web/src/api/axios.ts b/web/packages/api/src/axios.ts similarity index 100% rename from web/src/api/axios.ts rename to web/packages/api/src/axios.ts diff --git a/web/src/api/cHainesAPI.ts b/web/packages/api/src/cHainesAPI.ts similarity index 100% rename from web/src/api/cHainesAPI.ts rename to web/packages/api/src/cHainesAPI.ts diff --git a/web/src/api/fbaAPI.ts b/web/packages/api/src/fbaAPI.ts similarity index 99% rename from web/src/api/fbaAPI.ts rename to web/packages/api/src/fbaAPI.ts index 6213f1ec57..fcd3ddea61 100644 --- a/web/src/api/fbaAPI.ts +++ b/web/packages/api/src/fbaAPI.ts @@ -1,4 +1,4 @@ -import { AdvisoryStatus } from '@/utils/constants' +import { AdvisoryStatus } from 'utils/constants' import axios, { raster } from 'api/axios' import { DateTime } from 'luxon' diff --git a/web/src/api/fbaCalcAPI.ts b/web/packages/api/src/fbaCalcAPI.ts similarity index 100% rename from web/src/api/fbaCalcAPI.ts rename to web/packages/api/src/fbaCalcAPI.ts diff --git a/web/src/api/forecastAPI.ts b/web/packages/api/src/forecastAPI.ts similarity index 100% rename from web/src/api/forecastAPI.ts rename to web/packages/api/src/forecastAPI.ts diff --git a/web/src/api/hfiCalculatorAPI.ts b/web/packages/api/src/hfiCalculatorAPI.ts similarity index 97% rename from web/src/api/hfiCalculatorAPI.ts rename to web/packages/api/src/hfiCalculatorAPI.ts index 60d3f717ef..3b4c4d7c7f 100644 --- a/web/src/api/hfiCalculatorAPI.ts +++ b/web/packages/api/src/hfiCalculatorAPI.ts @@ -1,5 +1,4 @@ import axios from 'api/axios' -import { StationAdminRow } from 'features/hfiCalculator/components/stationAdmin/ManageStationsModal' import { HFIResultResponse, PlanningAreaResult, @@ -147,6 +146,22 @@ export interface HFIAdminStationUpdateRequest { date_range?: PrepDateRange } +export interface BasicPlanningArea { + id: number + name: string +} +export interface BasicWFWXStation { + code: number + name: string +} + +export interface StationAdminRow { + planningAreaId: number + rowId: number + station?: BasicWFWXStation + fuelType?: Pick +} + const baseUrl = '/hfi-calc/' export async function getHFIStations(): Promise { diff --git a/web/src/api/modelAPI.ts b/web/packages/api/src/modelAPI.ts similarity index 100% rename from web/src/api/modelAPI.ts rename to web/packages/api/src/modelAPI.ts diff --git a/web/src/api/moreCast2API.test.ts b/web/packages/api/src/moreCast2API.test.ts similarity index 100% rename from web/src/api/moreCast2API.test.ts rename to web/packages/api/src/moreCast2API.test.ts diff --git a/web/src/api/moreCast2API.ts b/web/packages/api/src/moreCast2API.ts similarity index 94% rename from web/src/api/moreCast2API.ts rename to web/packages/api/src/moreCast2API.ts index 8d88c8aa80..70f25c27aa 100644 --- a/web/src/api/moreCast2API.ts +++ b/web/packages/api/src/moreCast2API.ts @@ -1,7 +1,24 @@ import axios from 'api/axios' import { isEqual } from 'lodash' import { DateTime } from 'luxon' -import { MoreCast2ForecastRow } from 'features/moreCast2/interfaces' + +export interface PredictionItem { + choice: ModelType + value: number +} + +export interface MoreCast2ForecastRow { + id: string + forDate: DateTime + precip: PredictionItem + rh: PredictionItem + stationCode: number + stationName: string + temp: PredictionItem + windDirection: PredictionItem + windSpeed: PredictionItem + grassCuring: PredictionItem +} export enum ModelChoice { ACTUAL = 'ACTUAL', diff --git a/web/src/api/observationAPI.ts b/web/packages/api/src/observationAPI.ts similarity index 100% rename from web/src/api/observationAPI.ts rename to web/packages/api/src/observationAPI.ts diff --git a/web/src/api/percentileAPI.ts b/web/packages/api/src/percentileAPI.ts similarity index 100% rename from web/src/api/percentileAPI.ts rename to web/packages/api/src/percentileAPI.ts diff --git a/web/src/api/snow.ts b/web/packages/api/src/snow.ts similarity index 100% rename from web/src/api/snow.ts rename to web/packages/api/src/snow.ts diff --git a/web/src/api/stationAPI.test.ts b/web/packages/api/src/stationAPI.test.ts similarity index 100% rename from web/src/api/stationAPI.test.ts rename to web/packages/api/src/stationAPI.test.ts diff --git a/web/src/api/stationAPI.ts b/web/packages/api/src/stationAPI.ts similarity index 100% rename from web/src/api/stationAPI.ts rename to web/packages/api/src/stationAPI.ts diff --git a/web/packages/api/tsconfig.json b/web/packages/api/tsconfig.json new file mode 100644 index 0000000000..849e7c477d --- /dev/null +++ b/web/packages/api/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@wps/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler", + "module": "esnext", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "noEmit": true, + "baseUrl": ".", + "paths": { + "api/*": ["./src/*"], + "utils/*": ["../utils/src/*"] + } + }, + "include": ["src"] +} diff --git a/web/packages/tsconfig/base.json b/web/packages/tsconfig/base.json new file mode 100644 index 0000000000..49b3d05209 --- /dev/null +++ b/web/packages/tsconfig/base.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/web/packages/tsconfig/package.json b/web/packages/tsconfig/package.json new file mode 100644 index 0000000000..54cac9a370 --- /dev/null +++ b/web/packages/tsconfig/package.json @@ -0,0 +1,9 @@ +{ + "name": "@wps/tsconfig", + "version": "0.0.0", + "private": true, + "exports": { + "./base.json": "./base.json", + "./react-app.json": "./react-app.json" + } +} diff --git a/web/packages/tsconfig/react-app.json b/web/packages/tsconfig/react-app.json new file mode 100644 index 0000000000..8ca1a9f502 --- /dev/null +++ b/web/packages/tsconfig/react-app.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "composite": true, + "useDefineForClassFields": true, + "moduleResolution": "bundler", + "jsxImportSource": "@emotion/react", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "module": "esnext" + } +} diff --git a/web/packages/types/package.json b/web/packages/types/package.json new file mode 100644 index 0000000000..90919c3355 --- /dev/null +++ b/web/packages/types/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/types", + "version": "0.0.0", + "private": true +} diff --git a/web/src/types/window.d.ts b/web/packages/types/src/window.d.ts similarity index 100% rename from web/src/types/window.d.ts rename to web/packages/types/src/window.d.ts diff --git a/web/packages/ui/package.json b/web/packages/ui/package.json new file mode 100644 index 0000000000..91c7f5f305 --- /dev/null +++ b/web/packages/ui/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/ui", + "version": "0.0.0", + "private": true +} diff --git a/web/src/components/AboutDataPopover.tsx b/web/packages/ui/src/AboutDataPopover.tsx similarity index 100% rename from web/src/components/AboutDataPopover.tsx rename to web/packages/ui/src/AboutDataPopover.tsx diff --git a/web/src/components/Button.tsx b/web/packages/ui/src/Button.tsx similarity index 100% rename from web/src/components/Button.tsx rename to web/packages/ui/src/Button.tsx diff --git a/web/src/components/Container.tsx b/web/packages/ui/src/Container.tsx similarity index 100% rename from web/src/components/Container.tsx rename to web/packages/ui/src/Container.tsx diff --git a/web/src/components/DateRangeSelector.tsx b/web/packages/ui/src/DateRangeSelector.tsx similarity index 100% rename from web/src/components/DateRangeSelector.tsx rename to web/packages/ui/src/DateRangeSelector.tsx diff --git a/web/src/components/ErrorBoundary.tsx b/web/packages/ui/src/ErrorBoundary.tsx similarity index 100% rename from web/src/components/ErrorBoundary.tsx rename to web/packages/ui/src/ErrorBoundary.tsx diff --git a/web/src/components/ErrorMessage.tsx b/web/packages/ui/src/ErrorMessage.tsx similarity index 100% rename from web/src/components/ErrorMessage.tsx rename to web/packages/ui/src/ErrorMessage.tsx diff --git a/web/src/components/FeedbackButton.tsx b/web/packages/ui/src/FeedbackButton.tsx similarity index 100% rename from web/src/components/FeedbackButton.tsx rename to web/packages/ui/src/FeedbackButton.tsx diff --git a/web/src/components/FireCenterDropdown.tsx b/web/packages/ui/src/FireCenterDropdown.tsx similarity index 100% rename from web/src/components/FireCenterDropdown.tsx rename to web/packages/ui/src/FireCenterDropdown.tsx diff --git a/web/src/components/FireTable.tsx b/web/packages/ui/src/FireTable.tsx similarity index 100% rename from web/src/components/FireTable.tsx rename to web/packages/ui/src/FireTable.tsx diff --git a/web/src/components/GeneralHeader.tsx b/web/packages/ui/src/GeneralHeader.tsx similarity index 100% rename from web/src/components/GeneralHeader.tsx rename to web/packages/ui/src/GeneralHeader.tsx diff --git a/web/src/components/Grid.tsx b/web/packages/ui/src/Grid.tsx similarity index 100% rename from web/src/components/Grid.tsx rename to web/packages/ui/src/Grid.tsx diff --git a/web/src/components/HeaderImage.tsx b/web/packages/ui/src/HeaderImage.tsx similarity index 100% rename from web/src/components/HeaderImage.tsx rename to web/packages/ui/src/HeaderImage.tsx diff --git a/web/src/components/PageTitle.tsx b/web/packages/ui/src/PageTitle.tsx similarity index 100% rename from web/src/components/PageTitle.tsx rename to web/packages/ui/src/PageTitle.tsx diff --git a/web/src/components/ResetDialog.tsx b/web/packages/ui/src/ResetDialog.tsx similarity index 100% rename from web/src/components/ResetDialog.tsx rename to web/packages/ui/src/ResetDialog.tsx diff --git a/web/src/components/Slider.tsx b/web/packages/ui/src/Slider.tsx similarity index 100% rename from web/src/components/Slider.tsx rename to web/packages/ui/src/Slider.tsx diff --git a/web/src/components/StickyCell.tsx b/web/packages/ui/src/StickyCell.tsx similarity index 100% rename from web/src/components/StickyCell.tsx rename to web/packages/ui/src/StickyCell.tsx diff --git a/web/src/components/StyledFormControl.tsx b/web/packages/ui/src/StyledFormControl.tsx similarity index 100% rename from web/src/components/StyledFormControl.tsx rename to web/packages/ui/src/StyledFormControl.tsx diff --git a/web/src/components/WPSDatePicker.tsx b/web/packages/ui/src/WPSDatePicker.tsx similarity index 100% rename from web/src/components/WPSDatePicker.tsx rename to web/packages/ui/src/WPSDatePicker.tsx diff --git a/web/src/components/aboutDataPopover.test.tsx b/web/packages/ui/src/aboutDataPopover.test.tsx similarity index 85% rename from web/src/components/aboutDataPopover.test.tsx rename to web/packages/ui/src/aboutDataPopover.test.tsx index fb72f44dca..23a7d80424 100644 --- a/web/src/components/aboutDataPopover.test.tsx +++ b/web/packages/ui/src/aboutDataPopover.test.tsx @@ -1,8 +1,8 @@ import React from 'react' import { fireEvent, render, screen, waitFor } from '@testing-library/react' -import AboutDataPopover from '@/components/AboutDataPopover' -import { FBAAboutDataContent } from '@/features/fbaCalculator/components/FbaAboutDataContent' -import { ADVISORY_THRESHOLD, ASAAboutDataContent } from '@/features/fba/components/ASAAboutDataContent' +import AboutDataPopover from './AboutDataPopover' +import { FBAAboutDataContent } from 'features/fbaCalculator/components/FbaAboutDataContent' +import { ADVISORY_THRESHOLD, ASAAboutDataContent } from 'features/fba/components/ASAAboutDataContent' describe('AboutDataPopover', () => { it('should render the About Data Popover with static content', () => { diff --git a/web/src/components/dateRangePicker/DateRangePicker.tsx b/web/packages/ui/src/dateRangePicker/DateRangePicker.tsx similarity index 100% rename from web/src/components/dateRangePicker/DateRangePicker.tsx rename to web/packages/ui/src/dateRangePicker/DateRangePicker.tsx diff --git a/web/src/components/dateRangePicker/DateRangePickerWrapper.tsx b/web/packages/ui/src/dateRangePicker/DateRangePickerWrapper.tsx similarity index 100% rename from web/src/components/dateRangePicker/DateRangePickerWrapper.tsx rename to web/packages/ui/src/dateRangePicker/DateRangePickerWrapper.tsx diff --git a/web/src/components/dateRangePicker/Day.tsx b/web/packages/ui/src/dateRangePicker/Day.tsx similarity index 100% rename from web/src/components/dateRangePicker/Day.tsx rename to web/packages/ui/src/dateRangePicker/Day.tsx diff --git a/web/src/components/dateRangePicker/Header.tsx b/web/packages/ui/src/dateRangePicker/Header.tsx similarity index 100% rename from web/src/components/dateRangePicker/Header.tsx rename to web/packages/ui/src/dateRangePicker/Header.tsx diff --git a/web/src/components/dateRangePicker/LICENSE b/web/packages/ui/src/dateRangePicker/LICENSE similarity index 100% rename from web/src/components/dateRangePicker/LICENSE rename to web/packages/ui/src/dateRangePicker/LICENSE diff --git a/web/src/components/dateRangePicker/Menu.tsx b/web/packages/ui/src/dateRangePicker/Menu.tsx similarity index 100% rename from web/src/components/dateRangePicker/Menu.tsx rename to web/packages/ui/src/dateRangePicker/Menu.tsx diff --git a/web/src/components/dateRangePicker/Month.tsx b/web/packages/ui/src/dateRangePicker/Month.tsx similarity index 100% rename from web/src/components/dateRangePicker/Month.tsx rename to web/packages/ui/src/dateRangePicker/Month.tsx diff --git a/web/src/components/dateRangePicker/README.md b/web/packages/ui/src/dateRangePicker/README.md similarity index 100% rename from web/src/components/dateRangePicker/README.md rename to web/packages/ui/src/dateRangePicker/README.md diff --git a/web/src/components/dateRangePicker/dateRangePickerWrapper.test.tsx b/web/packages/ui/src/dateRangePicker/dateRangePickerWrapper.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/dateRangePickerWrapper.test.tsx rename to web/packages/ui/src/dateRangePicker/dateRangePickerWrapper.test.tsx diff --git a/web/src/components/dateRangePicker/menu.test.tsx b/web/packages/ui/src/dateRangePicker/menu.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/menu.test.tsx rename to web/packages/ui/src/dateRangePicker/menu.test.tsx diff --git a/web/src/components/dateRangePicker/month.test.tsx b/web/packages/ui/src/dateRangePicker/month.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/month.test.tsx rename to web/packages/ui/src/dateRangePicker/month.test.tsx diff --git a/web/src/components/dateRangePicker/types.ts b/web/packages/ui/src/dateRangePicker/types.ts similarity index 100% rename from web/src/components/dateRangePicker/types.ts rename to web/packages/ui/src/dateRangePicker/types.ts diff --git a/web/src/components/dateRangePicker/utils.test.tsx b/web/packages/ui/src/dateRangePicker/utils.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/utils.test.tsx rename to web/packages/ui/src/dateRangePicker/utils.test.tsx diff --git a/web/src/components/dateRangePicker/utils.ts b/web/packages/ui/src/dateRangePicker/utils.ts similarity index 100% rename from web/src/components/dateRangePicker/utils.ts rename to web/packages/ui/src/dateRangePicker/utils.ts diff --git a/web/src/components/fireTable.test.tsx b/web/packages/ui/src/fireTable.test.tsx similarity index 100% rename from web/src/components/fireTable.test.tsx rename to web/packages/ui/src/fireTable.test.tsx diff --git a/web/src/components/index.ts b/web/packages/ui/src/index.ts similarity index 100% rename from web/src/components/index.ts rename to web/packages/ui/src/index.ts diff --git a/web/src/components/resetDialog.test.tsx b/web/packages/ui/src/resetDialog.test.tsx similarity index 97% rename from web/src/components/resetDialog.test.tsx rename to web/packages/ui/src/resetDialog.test.tsx index f9a6b7d171..088496def2 100644 --- a/web/src/components/resetDialog.test.tsx +++ b/web/packages/ui/src/resetDialog.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react' -import ResetDialog from '@/components/ResetDialog' +import ResetDialog from './ResetDialog' import { vi } from 'vitest' const MESSAGE = "Test" diff --git a/web/src/components/stickyCell.test.tsx b/web/packages/ui/src/stickyCell.test.tsx similarity index 100% rename from web/src/components/stickyCell.test.tsx rename to web/packages/ui/src/stickyCell.test.tsx diff --git a/web/src/app/theme.ts b/web/packages/ui/src/theme.ts similarity index 100% rename from web/src/app/theme.ts rename to web/packages/ui/src/theme.ts diff --git a/web/packages/ui/tsconfig.json b/web/packages/ui/tsconfig.json new file mode 100644 index 0000000000..675f529035 --- /dev/null +++ b/web/packages/ui/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@wps/tsconfig/react-app.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/theme": ["./src/theme"], + "api/*": ["../api/src/*"], + "utils/*": ["../utils/src/*"], + "components/*": ["./src/*"], + "components": ["./src/index"] + } + }, + "include": ["src"] +} diff --git a/web/packages/utils/package.json b/web/packages/utils/package.json new file mode 100644 index 0000000000..bb0c64d1b8 --- /dev/null +++ b/web/packages/utils/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/utils", + "version": "0.0.0", + "private": true +} diff --git a/web/src/utils/constants.ts b/web/packages/utils/src/constants.ts similarity index 100% rename from web/src/utils/constants.ts rename to web/packages/utils/src/constants.ts diff --git a/web/src/utils/date.test.ts b/web/packages/utils/src/date.test.ts similarity index 100% rename from web/src/utils/date.test.ts rename to web/packages/utils/src/date.test.ts diff --git a/web/src/utils/date.ts b/web/packages/utils/src/date.ts similarity index 100% rename from web/src/utils/date.ts rename to web/packages/utils/src/date.ts diff --git a/web/src/utils/dropdown.test.ts b/web/packages/utils/src/dropdown.test.ts similarity index 100% rename from web/src/utils/dropdown.test.ts rename to web/packages/utils/src/dropdown.test.ts diff --git a/web/src/utils/dropdown.ts b/web/packages/utils/src/dropdown.ts similarity index 100% rename from web/src/utils/dropdown.ts rename to web/packages/utils/src/dropdown.ts diff --git a/web/src/utils/env.ts b/web/packages/utils/src/env.ts similarity index 100% rename from web/src/utils/env.ts rename to web/packages/utils/src/env.ts diff --git a/web/src/utils/error.ts b/web/packages/utils/src/error.ts similarity index 100% rename from web/src/utils/error.ts rename to web/packages/utils/src/error.ts diff --git a/web/src/utils/format.ts b/web/packages/utils/src/format.ts similarity index 100% rename from web/src/utils/format.ts rename to web/packages/utils/src/format.ts diff --git a/web/src/utils/fwi/bui.ts b/web/packages/utils/src/fwi/bui.ts similarity index 100% rename from web/src/utils/fwi/bui.ts rename to web/packages/utils/src/fwi/bui.ts diff --git a/web/src/utils/fwi/dc.ts b/web/packages/utils/src/fwi/dc.ts similarity index 100% rename from web/src/utils/fwi/dc.ts rename to web/packages/utils/src/fwi/dc.ts diff --git a/web/src/utils/fwi/dmc.ts b/web/packages/utils/src/fwi/dmc.ts similarity index 100% rename from web/src/utils/fwi/dmc.ts rename to web/packages/utils/src/fwi/dmc.ts diff --git a/web/src/utils/fwi/ffmc.ts b/web/packages/utils/src/fwi/ffmc.ts similarity index 100% rename from web/src/utils/fwi/ffmc.ts rename to web/packages/utils/src/fwi/ffmc.ts diff --git a/web/src/utils/fwi/fwi.ts b/web/packages/utils/src/fwi/fwi.ts similarity index 100% rename from web/src/utils/fwi/fwi.ts rename to web/packages/utils/src/fwi/fwi.ts diff --git a/web/src/utils/fwi/index.ts b/web/packages/utils/src/fwi/index.ts similarity index 100% rename from web/src/utils/fwi/index.ts rename to web/packages/utils/src/fwi/index.ts diff --git a/web/src/utils/fwi/isi.ts b/web/packages/utils/src/fwi/isi.ts similarity index 100% rename from web/src/utils/fwi/isi.ts rename to web/packages/utils/src/fwi/isi.ts diff --git a/web/src/utils/getError.test.ts b/web/packages/utils/src/getError.test.ts similarity index 100% rename from web/src/utils/getError.test.ts rename to web/packages/utils/src/getError.test.ts diff --git a/web/src/utils/getError.ts b/web/packages/utils/src/getError.ts similarity index 100% rename from web/src/utils/getError.ts rename to web/packages/utils/src/getError.ts diff --git a/web/src/utils/strings.ts b/web/packages/utils/src/strings.ts similarity index 100% rename from web/src/utils/strings.ts rename to web/packages/utils/src/strings.ts diff --git a/web/src/utils/url.test.ts b/web/packages/utils/src/url.test.ts similarity index 100% rename from web/src/utils/url.test.ts rename to web/packages/utils/src/url.test.ts diff --git a/web/src/utils/url.ts b/web/packages/utils/src/url.ts similarity index 100% rename from web/src/utils/url.ts rename to web/packages/utils/src/url.ts diff --git a/web/src/utils/vectorLayerUtils.test.ts b/web/packages/utils/src/vectorLayerUtils.test.ts similarity index 98% rename from web/src/utils/vectorLayerUtils.test.ts rename to web/packages/utils/src/vectorLayerUtils.test.ts index efcd40fece..b32215b2f9 100644 --- a/web/src/utils/vectorLayerUtils.test.ts +++ b/web/packages/utils/src/vectorLayerUtils.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import { createHillshadeVectorTileLayer, createVectorTileLayer, getStyleJson } from '@/utils/vectorLayerUtils' +import { createHillshadeVectorTileLayer, createVectorTileLayer, getStyleJson } from './vectorLayerUtils' import axios from 'axios' import { applyStyle } from 'ol-mapbox-style' diff --git a/web/src/utils/vectorLayerUtils.ts b/web/packages/utils/src/vectorLayerUtils.ts similarity index 100% rename from web/src/utils/vectorLayerUtils.ts rename to web/packages/utils/src/vectorLayerUtils.ts diff --git a/web/packages/utils/tsconfig.json b/web/packages/utils/tsconfig.json new file mode 100644 index 0000000000..50ca98c882 --- /dev/null +++ b/web/packages/utils/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@wps/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler", + "module": "esnext", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "jsx": "react-jsx", + "noEmit": true, + "types": ["vite/client"], + "baseUrl": ".", + "paths": { + "utils/*": ["./src/*"], + "api/*": ["../api/src/*"] + } + }, + "include": ["src", "../types/src"] +} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json deleted file mode 100644 index c2a432d091..0000000000 --- a/web/tsconfig.app.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "useDefineForClassFields": true, - /* Bundler mode */ - "moduleResolution": "bundler", - "jsxImportSource": "@emotion/react", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - /* Linting */ - "strict": true, - "types": ["vite/client", "node", "vitest/globals", "@testing-library/jest-dom"], - "noUnusedLocals": false, - // "noUnusedParameters": , - "noFallthroughCasesInSwitch": true, - //from old - "target": "es2015", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"], - "#root/*": ["./*"], - "app/*": ["./src/app/*"], - "utils/*": ["./src/utils/*"], - "api/*": ["./src/api/*"], - "features/*": ["./src/features/*"], - "components/*": ["src/components/*"], - "components": ["./src/components/index"], - "commonSlices/*": ["./src/commonSlices/*"] - } - }, - "include": ["src"] -} diff --git a/web/tsconfig.json b/web/tsconfig.json index fcf5db7f84..17159e82bc 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -1,11 +1,10 @@ { "files": [], "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.node.json" - } - ], -} \ No newline at end of file + { "path": "apps/wps-web" }, + { "path": "packages/api" }, + { "path": "packages/utils" }, + { "path": "packages/ui" }, + { "path": "packages/types" } + ] +} diff --git a/web/turbo.json b/web/turbo.json new file mode 100644 index 0000000000..23166104d0 --- /dev/null +++ b/web/turbo.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", "build/**"], + "passThroughEnv": ["SENTRY_AUTH_TOKEN"] + }, + "test": { + "dependsOn": ["^build"], + "outputs": ["coverage/**"] + }, + "lint": { + "outputs": [] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} diff --git a/web/yarn.lock b/web/yarn.lock index 756032ccff..601e216d05 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -4019,6 +4019,98 @@ __metadata: languageName: node linkType: hard +"@wps/tsconfig@workspace:*, @wps/tsconfig@workspace:packages/tsconfig": + version: 0.0.0-use.local + resolution: "@wps/tsconfig@workspace:packages/tsconfig" + languageName: unknown + linkType: soft + +"@wps/wps-web@workspace:apps/wps-web": + version: 0.0.0-use.local + resolution: "@wps/wps-web@workspace:apps/wps-web" + dependencies: + "@babel/core": "npm:^7.29.0" + "@babel/preset-env": "npm:^7.29.0" + "@cypress/code-coverage": "npm:^4.0.0" + "@emotion/react": "npm:^11.8.2" + "@emotion/styled": "npm:^11.8.1" + "@eslint/compat": "npm:^2.0.0" + "@mui/icons-material": "npm:^5.5.1" + "@mui/material": "npm:5.15.20" + "@mui/system": "npm:^5.15.14" + "@mui/x-data-grid-pro": "npm:^6.0.0" + "@mui/x-date-pickers": "npm:^7.29.4" + "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51" + "@reduxjs/toolkit": "npm:^2.2.7" + "@sentry/react": "npm:^10.0.0" + "@sentry/vite-plugin": "npm:^5.0.0" + "@testing-library/dom": "npm:^10.1.0" + "@testing-library/jest-dom": "npm:^6.4.2" + "@testing-library/react": "npm:^16.0.0" + "@testing-library/user-event": "npm:^14.5.2" + "@types/babel__core": "npm:^7" + "@types/babel__preset-env": "npm:^7" + "@types/esri-leaflet": "npm:^3.0.0" + "@types/jest": "npm:^30.0.0" + "@types/leaflet": "npm:^1.7.0" + "@types/lodash": "npm:^4.14.173" + "@types/luxon": "npm:^3.0.2" + "@types/react": "npm:18.3.3" + "@types/react-dom": "npm:^18.3.0" + "@types/react-is": "npm:^19" + "@types/react-plotly.js": "npm:^2.2.4" + "@types/react-router-dom": "npm:^5.3.3" + "@types/recharts": "npm:^1.8.23" + "@types/webpack-env": "npm:^1.15.1" + "@typescript-eslint/eslint-plugin": "npm:^8.0.0" + "@typescript-eslint/parser": "npm:^8.0.0" + "@vitejs/plugin-react": "npm:^4.3.1" + "@vitest/coverage-v8": "npm:^4.0.8" + "@wps/tsconfig": "workspace:*" + axios: "npm:1.8.2" + babel-loader: "npm:^10.1.1" + cypress: "npm:^15.10.0" + date-fns: "npm:^4.0.0" + eslint: "npm:^9.7.0" + eslint-config-prettier: "npm:^10.0.0" + eslint-plugin-prettier: "npm:^5.1.3" + eslint-plugin-react: "npm:^7.34.4" + eslint-plugin-react-hooks: "npm:^7.0.0" + eslint-plugin-react-refresh: "npm:^0.4.7" + esri-leaflet: "npm:3.0.12" + filefy: "npm:^0.1.11" + globals: "npm:^17.0.0" + jsdom: "npm:^26.0.0" + jwt-decode: "npm:^4.0.0" + keycloak-js: "npm:^25.0.0" + leaflet: "npm:^1.7.1" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.2" + match-sorter: "npm:^8.0.0" + nyc: "npm:^17.0.0" + ol: "npm:10.0.0" + ol-mapbox-style: "npm:^13.1.1" + ol-pmtiles: "npm:^2.0.0" + prettier: "npm:^3.3.3" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + react-is: "npm:^19.2.4" + react-redux: "npm:^9.1.2" + react-router-dom: "npm:^7.6.2" + recharts: "npm:^3.0.0" + rollup: "npm:^4.59.0" + start-server-and-test: "npm:^2.0.0" + ts-sinon: "npm:^2.0.2" + typescript: "npm:^5.2.2" + vite: "npm:^7.0.0" + vite-plugin-istanbul: "npm:^7.0.0" + vite-plugin-svgr: "npm:^4.2.0" + vitest: "npm:^4.0.0" + webpack: "npm:^5.105.4" + whatwg-fetch: "npm:^3.6.20" + languageName: unknown + linkType: soft + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -10543,6 +10635,77 @@ __metadata: languageName: node linkType: hard +"turbo-darwin-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-darwin-64@npm:2.8.16" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"turbo-darwin-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-darwin-arm64@npm:2.8.16" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"turbo-linux-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-linux-64@npm:2.8.16" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"turbo-linux-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-linux-arm64@npm:2.8.16" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"turbo-windows-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-windows-64@npm:2.8.16" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"turbo-windows-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-windows-arm64@npm:2.8.16" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"turbo@npm:^2.0.0": + version: 2.8.16 + resolution: "turbo@npm:2.8.16" + dependencies: + turbo-darwin-64: "npm:2.8.16" + turbo-darwin-arm64: "npm:2.8.16" + turbo-linux-64: "npm:2.8.16" + turbo-linux-arm64: "npm:2.8.16" + turbo-windows-64: "npm:2.8.16" + turbo-windows-arm64: "npm:2.8.16" + dependenciesMeta: + turbo-darwin-64: + optional: true + turbo-darwin-arm64: + optional: true + turbo-linux-64: + optional: true + turbo-linux-arm64: + optional: true + turbo-windows-64: + optional: true + turbo-windows-arm64: + optional: true + bin: + turbo: bin/turbo + checksum: 10c0/5ac16e61a723f45e8ab265d7bbeb932f8843e982d8b9eca07d8df4778d5c2152d96d2a54ddca761588c5a538178333cce5b55ba765a32c2cb4c5be07609c25de + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -11222,88 +11385,11 @@ __metadata: languageName: node linkType: hard -"wps-web@workspace:.": +"wps-frontend@workspace:.": version: 0.0.0-use.local - resolution: "wps-web@workspace:." + resolution: "wps-frontend@workspace:." dependencies: - "@babel/core": "npm:^7.29.0" - "@babel/preset-env": "npm:^7.29.0" - "@cypress/code-coverage": "npm:^4.0.0" - "@emotion/react": "npm:^11.8.2" - "@emotion/styled": "npm:^11.8.1" - "@eslint/compat": "npm:^2.0.0" - "@mui/icons-material": "npm:^5.5.1" - "@mui/material": "npm:5.15.20" - "@mui/system": "npm:^5.15.14" - "@mui/x-data-grid-pro": "npm:^6.0.0" - "@mui/x-date-pickers": "npm:^7.29.4" - "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51" - "@reduxjs/toolkit": "npm:^2.2.7" - "@sentry/react": "npm:^10.0.0" - "@sentry/vite-plugin": "npm:^5.0.0" - "@testing-library/dom": "npm:^10.1.0" - "@testing-library/jest-dom": "npm:^6.4.2" - "@testing-library/react": "npm:^16.0.0" - "@testing-library/user-event": "npm:^14.5.2" - "@types/babel__core": "npm:^7" - "@types/babel__preset-env": "npm:^7" - "@types/esri-leaflet": "npm:^3.0.0" - "@types/jest": "npm:^30.0.0" - "@types/leaflet": "npm:^1.7.0" - "@types/lodash": "npm:^4.14.173" - "@types/luxon": "npm:^3.0.2" - "@types/react": "npm:18.3.3" - "@types/react-dom": "npm:^18.3.0" - "@types/react-is": "npm:^19" - "@types/react-plotly.js": "npm:^2.2.4" - "@types/react-router-dom": "npm:^5.3.3" - "@types/recharts": "npm:^1.8.23" - "@types/webpack-env": "npm:^1.15.1" - "@typescript-eslint/eslint-plugin": "npm:^8.0.0" - "@typescript-eslint/parser": "npm:^8.0.0" - "@vitejs/plugin-react": "npm:^4.3.1" - "@vitest/coverage-v8": "npm:^4.0.8" - axios: "npm:1.8.2" - babel-loader: "npm:^10.1.1" - cypress: "npm:^15.10.0" - date-fns: "npm:^4.0.0" - eslint: "npm:^9.7.0" - eslint-config-prettier: "npm:^10.0.0" - eslint-plugin-prettier: "npm:^5.1.3" - eslint-plugin-react: "npm:^7.34.4" - eslint-plugin-react-hooks: "npm:^7.0.0" - eslint-plugin-react-refresh: "npm:^0.4.7" - esri-leaflet: "npm:3.0.12" - filefy: "npm:^0.1.11" - globals: "npm:^17.0.0" - jsdom: "npm:^26.0.0" - jwt-decode: "npm:^4.0.0" - keycloak-js: "npm:^25.0.0" - leaflet: "npm:^1.7.1" - lodash: "npm:^4.17.21" - luxon: "npm:^3.0.2" - match-sorter: "npm:^8.0.0" - nyc: "npm:^17.0.0" - ol: "npm:10.0.0" - ol-mapbox-style: "npm:^13.1.1" - ol-pmtiles: "npm:^2.0.0" - prettier: "npm:^3.3.3" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-is: "npm:^19.2.4" - react-redux: "npm:^9.1.2" - react-router-dom: "npm:^7.6.2" - recharts: "npm:^3.0.0" - rollup: "npm:^4.59.0" - start-server-and-test: "npm:^2.0.0" - ts-sinon: "npm:^2.0.2" - typescript: "npm:^5.2.2" - vite: "npm:^7.0.0" - vite-plugin-istanbul: "npm:^7.0.0" - vite-plugin-svgr: "npm:^4.2.0" - vitest: "npm:^4.0.0" - webpack: "npm:^5.105.4" - whatwg-fetch: "npm:^3.6.20" + turbo: "npm:^2.0.0" languageName: unknown linkType: soft From 2364ce5903f1ebe77e6f6755bd55180a1aa727cd Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Thu, 12 Mar 2026 14:22:42 -0700 Subject: [PATCH 03/13] Restructure web into Turborepo monorepo with packages --- web/.gitignore | 1 + web/{ => apps/wps-web}/.env.cypress | 0 web/{ => apps/wps-web}/.env.example | 0 web/{ => apps/wps-web}/Dockerfile | 0 web/{ => apps/wps-web}/README.md | 0 web/{ => apps/wps-web}/cypress.config.cjs | 0 .../wps-web/cypress/downloads/downloads.html | Bin 0 -> 118577 bytes ...e-behaviour-advisory-calculator-page.cy.ts | 0 .../cypress/e2e/hfi-calculator-page.cy.ts | 0 .../cypress/e2e/morecast-2-page.cy.ts | 0 .../wps-web}/cypress/e2e/not-found-page.cy.ts | 0 .../e2e/percentile-calculator-page.cy.ts | 0 .../cypress/fixtures/fba-calc/322.json | 0 .../fixtures/fba-calc/322_209_response.json | 0 .../cypress/fixtures/fba-calc/328.json | 0 .../cypress/fixtures/fba-calc/export.csv | 4 +- .../cypress/fixtures/fba/fire-centers.json | 0 .../hfi-calc/dailies-disable-station.json | 0 .../hfi-calc/dailies-high-intensity.json | 0 .../fixtures/hfi-calc/dailies-missing.json | 0 .../fixtures/hfi-calc/dailies-saved.json | 0 .../cypress/fixtures/hfi-calc/dailies.json | 0 .../fixtures/hfi-calc/fire-centres-grass.json | 0 .../hfi-calc/fire-centres-minimal.json | 0 .../fixtures/hfi-calc/fire_centres.json | 0 .../cypress/fixtures/hfi-calc/fuel_types.json | 0 .../fixtures/hfi-calc/hfi_result_cariboo.json | 0 .../hfi-calc/hfi_result_kamloops.json | 0 .../fixtures/hfi-calc/ready-states.json | 0 .../percentiles/percentile-result.json | 0 .../percentiles/two-percentiles-result.json | 0 .../high-res-model-summaries.json | 0 .../hr-models-with-bias-adjusted.json | 0 .../weather-data/model-summaries.json | 0 .../models-with-bias-adjusted.json | 0 .../weather-data/noon-forecast-summaries.json | 0 .../fixtures/weather-data/noon-forecasts.json | 0 .../fixtures/weather-data/observations.json | 0 .../regional-model-summaries.json | 0 .../regional-models-with-bias-adjusted.json | 0 .../fixtures/weather-stations-details.json | 0 .../cypress/fixtures/weather-stations.json | 0 .../wps-web}/cypress/support/commands.ts | 0 web/{ => apps/wps-web}/cypress/support/e2e.ts | 0 .../wps-web}/cypress/support/fba-commands.ts | 0 .../wps-web}/cypress/support/hfi-commands.ts | 0 .../cypress/support/percentile-commands.ts | 0 web/{ => apps/wps-web}/cypress/tsconfig.json | 0 web/{ => apps/wps-web}/eslint.config.cjs | 0 web/{ => apps/wps-web}/index.html | 0 web/{ => apps/wps-web}/manifest.json | 0 web/{ => apps/wps-web}/mergeCoverage.cjs | 0 web/apps/wps-web/package.json | 127 +++++++++ .../wps-web}/public/images/BCID_H_rgb_rev.svg | 0 .../images/bc-wilderfire-service-logo.png | Bin .../wps-web}/public/images/bcid-192x192.png | Bin .../wps-web}/public/images/bcid-512x512.png | Bin .../public/images/bcid-apple-icon.svg | 0 .../public/images/bcid-apple-touch-icon.png | Bin .../public/images/bcid-favicon-16x16.png | Bin .../public/images/bcid-favicon-32x32.png | Bin .../wps-web}/public/images/bcid-logo-en.svg | 0 .../wps-web}/public/images/bcid-logo-fr.svg | 0 .../public/images/bcid-logo-rev-en.svg | 0 .../public/images/bcid-logo-rev-fr.svg | 0 .../public/images/bcid-symbol-rev.svg | 0 .../wps-web}/public/images/bcid-symbol.svg | 0 .../wps-web}/public/images/fbpgo_maskable.png | Bin .../wps-web}/public/images/logo-banner.svg | 0 .../wps-web}/public/images/redMarker.png | Bin web/{ => apps/wps-web}/src/app/App.tsx | 0 web/{ => apps/wps-web}/src/app/Routes.tsx | 0 web/{ => apps/wps-web}/src/app/rootReducer.ts | 0 web/{ => apps/wps-web}/src/app/store.ts | 0 .../src/commonSlices/fireCentersSlice.ts | 0 .../selectedStationGroupMembers.test.ts | 0 .../selectedStationGroupMembers.ts | 0 .../src/commonSlices/stationGroupsSlice.ts | 0 .../90th_percentile_calculator_rationale.pdf | Bin .../wps-web}/src/features/NoMatchPage.tsx | 0 .../features/auth/components/AuthWrapper.tsx | 0 .../wps-web}/src/features/auth/keycloak.ts | 0 .../wps-web}/src/features/auth/roles.ts | 0 .../auth/slices/authenticationSlice.test.ts | 0 .../auth/slices/authenticationSlice.ts | 0 .../features/cHaines/pages/CHainesPage.tsx | 0 .../cHaines/slices/cHainesModelRunsSlice.tsx | 0 .../slices/cHainesPredictionsSlice.tsx | 0 .../features/fba/calculateZoneStatus.test.ts | 0 .../src/features/fba/calculateZoneStatus.ts | 0 .../fba/components/ASAAboutDataContent.tsx | 0 .../fba/components/ASADatePicker.test.tsx | 0 .../features/fba/components/ASADatePicker.tsx | 0 .../fba/components/ActualForecastControl.tsx | 0 .../components/actualForecastControl.test.tsx | 0 .../components/infoPanel/AdvisoryReport.tsx | 0 .../fba/components/infoPanel/AdvisoryText.tsx | 0 .../components/infoPanel/FireCentreInfo.tsx | 0 .../components/infoPanel/FireZoneUnitInfo.tsx | 0 .../infoPanel/FireZoneUnitSummary.tsx | 0 .../components/infoPanel/FireZoneUnitTabs.tsx | 0 .../components/infoPanel/InfoAccordion.tsx | 0 .../infoPanel/ProvincialSummary.tsx | 0 .../fba/components/infoPanel/TabPanel.tsx | 0 .../infoPanel/advisoryReport.test.tsx | 0 .../infoPanel/advisoryText.test.tsx | 0 .../infoPanel/fireCentreInfo.test.tsx | 0 .../infoPanel/fireZoneUnitInfo.test.tsx | 0 .../infoPanel/fireZoneUnitSummary.test.tsx | 0 .../infoPanel/fireZoneUnitTabs.test.tsx | 0 .../infoPanel/infoAccordion.test.tsx | 0 .../infoPanel/provincialSummary.test.tsx | 0 .../features/fba/components/map/FBAMap.tsx | 0 .../features/fba/components/map/Legend.tsx | 0 .../fba/components/map/ScaleBarContainer.tsx | 0 .../fba/components/map/fbaMap.test.tsx | 0 .../fba/components/map/featureStylers.ts | 0 .../fba/components/map/legend.test.tsx | 0 .../components/map/scalebarContainer.test.tsx | 0 .../fba/components/viz/CriticalHours.tsx | 0 .../fba/components/viz/ElevationFlag.tsx | 0 .../fba/components/viz/ElevationInfoViz.tsx | 0 .../fba/components/viz/ElevationLabel.tsx | 0 .../fba/components/viz/ElevationStatus.tsx | 0 .../fba/components/viz/FillableFlag.tsx | 0 .../fba/components/viz/FuelDistribution.tsx | 0 .../fba/components/viz/FuelSummary.tsx | 0 .../features/fba/components/viz/color.test.ts | 0 .../src/features/fba/components/viz/color.ts | 0 .../fba/components/viz/criticalHours.test.tsx | 0 .../fba/components/viz/elevationFlag.test.tsx | 0 .../components/viz/elevationStatus.test.tsx | 0 .../fba/components/viz/fillableFlag.test.tsx | 0 .../components/viz/fuelDistribution.test.tsx | 0 .../src/features/fba/context/MapContext.tsx | 0 .../wps-web}/src/features/fba/cqlBuilder.ts | 0 .../fba/criticalHoursStartEndTime.test.ts | 0 .../features/fba/criticalHoursStartEndTime.ts | 0 .../src/features/fba/fireCentreExtents.ts | 0 .../src/features/fba/fireZoneUnitExtents.ts | 0 .../src/features/fba/hfiStatsUtils.test.ts | 0 .../src/features/fba/hfiStatsUtils.ts | 0 .../fba/hooks/useFireCentreDetails.ts | 0 .../features/fba/hooks/useLoading.test.tsx | 0 .../src/features/fba/hooks/useLoading.ts | 0 .../src/features/fba/images/mountain.png | Bin .../fba/pages/FireBehaviourAdvisoryPage.tsx | 0 .../src/features/fba/pmtilesBuilder.ts | 0 .../fireCentreHFIFuelStatsSlice.test.ts | 0 .../fba/slices/fireCentreHFIFuelStatsSlice.ts | 0 .../slices/fireCentreTPIStatsSlice.test.ts | 0 .../fba/slices/fireCentreTPIStatsSlice.ts | 0 .../fba/slices/fireZoneElevationInfoSlice.ts | 0 .../fba/slices/provincialSummarySlice.ts | 0 .../features/fba/slices/runDatesSlice.test.ts | 0 .../src/features/fba/slices/runDatesSlice.ts | 0 .../fba/slices/valueAtCoordinateSlice.ts | 0 .../src/features/fbaCalculator/RowManager.ts | 0 .../components/CriticalHoursCell.tsx | 0 .../components/CrownFractionBurnedCell.tsx | 0 .../fbaCalculator/components/ErrorAlert.tsx | 0 .../components/FBAProgressRow.tsx | 0 .../fbaCalculator/components/FBATable.tsx | 4 +- .../fbaCalculator/components/FBATableHead.tsx | 0 .../components/FBATableInstructions.tsx | 0 .../components/FbaAboutDataContent.tsx | 0 .../components/FilterColumnsModal.tsx | 0 .../components/FixedDecimalNumberCell.tsx | 0 .../fbaCalculator/components/FuelTypeCell.tsx | 0 .../components/GrassCureCell.tsx | 0 .../fbaCalculator}/components/HFICell.tsx | 2 +- .../components/LoadingIndicatorCell.tsx | 0 .../fbaCalculator/components/PrecipCell.tsx | 0 .../components/SelectionCell.tsx | 0 .../fbaCalculator/components/StatusCell.tsx | 0 .../fbaCalculator/components/TableHeader.tsx | 0 .../components/TextDisplayCell.tsx | 0 .../components/WeatherStationCell.tsx | 0 .../components/WindSpeedCell.tsx | 0 .../components/fbaProgressRow.test.tsx | 0 .../components/grassCureCell.test.tsx | 0 .../components/hfiCell.test.tsx | 2 +- .../components/loadingIndicatorCell.test.tsx | 0 .../components/precipCell.test.tsx | 0 .../components/selectionCell.test.tsx | 0 .../components/windSpeedCell.test.tsx | 0 .../src/features/fbaCalculator/fuelTypes.ts | 0 .../pages/FireBehaviourCalculatorPage.tsx | 0 .../features/fbaCalculator/rowManager.test.ts | 0 .../slices/fbaCalculatorSlice.ts | 0 .../src/features/fbaCalculator/tableState.ts | 0 .../src/features/fbaCalculator/utils.ts | 0 .../src/features/fbaCalculator/validation.ts | 0 .../fireWatch/components/CreateFireWatch.tsx | 0 .../components/DetailPanelContent.tsx | 0 .../components/FireWatchDashboard.tsx | 0 .../components/FireWatchDetailsModal.tsx | 0 .../fireWatch/components/MenuHeader.tsx | 0 .../fireWatch/components/NavigationDrawer.tsx | 0 .../fireWatch/components/OptionalHeading.tsx | 0 .../components/detailPanelContent.test.tsx | 0 .../components/fireWatchDashboard.test.tsx | 0 .../components/steps/CompleteStep.tsx | 0 .../steps/FireBehaviourIndicesStep.tsx | 0 .../fireWatch/components/steps/FuelStep.tsx | 0 .../fireWatch/components/steps/InfoStep.tsx | 0 .../components/steps/LocationStep.tsx | 0 .../components/steps/ReviewSubmitStep.tsx | 0 .../components/steps/SummaryTextLine.tsx | 0 .../steps/WeatherParametersStep.tsx | 0 .../src/features/fireWatch/constants.ts | 0 .../src/features/fireWatch/fireWatchApi.ts | 0 .../src/features/fireWatch/interfaces.ts | 0 .../fireWatch/pages/FireWatchPage.tsx | 0 .../fireWatch/slices/burnForecastSlice.ts | 0 .../slices/fireWatchFireCentresSlice.ts | 0 .../fireWatch/slices/fireWatchSlice.ts | 0 .../wps-web}/src/features/fireWatch/utils.ts | 0 .../components/AccuracyVariablePicker.tsx | 0 .../maps/FireIndicesVectorLayer.tsx | 0 .../components/maps/WeatherMap.tsx | 0 .../fireWeather/components/maps/constants.ts | 0 .../components/maps/stationAccuracy.test.ts | 0 .../components/maps/stationAccuracy.ts | 0 .../components/AboutDataModal.tsx | 0 .../components/BaseStationAttributeCells.tsx | 0 .../components/CalculatedCell.tsx | 0 .../CalculatedPlanningAreaCells.tsx | 0 .../hfiCalculator/components/DailyHFICell.tsx | 2 +- .../components/DailyViewTable.tsx | 0 .../components/DangerClassCell.tsx | 0 .../components/DayHeaders.test.tsx | 0 .../hfiCalculator/components/DayHeaders.tsx | 0 .../components/DayIndexHeaders.tsx | 0 .../components/DownloadPDFButton.tsx | 0 .../components/EmptyFireCentre.tsx | 0 .../components/EmptyStaticCells.tsx | 0 .../components/ErrorIconWithTooltip.tsx | 0 .../components/FireCentreCell.tsx | 0 .../components/FireCentreDropdown.tsx | 0 .../components/FireStartsCell.tsx | 0 .../components/FireStartsDropdown.tsx | 0 .../components/FuelTypeDropdown.tsx | 0 .../components/GrassCureCell.tsx | 0 .../components/HFIErrorAlert.tsx | 0 .../components/HFILoadingDataContainer.tsx | 0 .../components/HFIPageSubHeader.tsx | 0 .../components/HFISuccessAlert.tsx | 0 .../components/HeaderRowCell.tsx | 0 .../components/HighestDailyFIGCell.tsx | 0 .../components/IntensityGroupCell.tsx | 0 .../components/LastUpdatedHeader.tsx | 0 .../components/LoadingBackdrop.tsx | 0 .../components/MeanIntensityGroupRollup.tsx | 0 .../components/MeanPrepLevelCell.tsx | 0 .../components/PlanningAreaReadyToggle.tsx | 0 .../components/PrepDateRangeSelector.tsx | 0 .../components/PrepLevelCell.tsx | 0 .../components/RequiredDataCell.tsx | 0 .../hfiCalculator/components/StaticCells.tsx | 2 +- .../components/StationDataHeaderCells.tsx | 0 .../components/StationSelectCell.tsx | 0 .../hfiCalculator/components/StatusCell.tsx | 0 .../components/StyledFireComponents.tsx | 0 .../StyledPlanningAreaComponents.tsx | 0 .../components/StyledTableComponents.tsx | 0 .../hfiCalculator/components/ViewSwitcher.tsx | 0 .../components/ViewSwitcherToggles.tsx | 0 .../components/WeeklyROSCell.tsx | 0 .../components/WeeklyViewTable.tsx | 0 .../components/WindDirectionCell.tsx | 0 .../components/dailyHFICell.test.tsx | 0 .../components/dayIndexHeaders.test.tsx | 0 .../components/emptyFireCentre.test.tsx | 0 .../components/fireStartsDropdown.test.tsx | 0 .../components/fuelTypeDropdown.test.tsx | 0 .../components/grassCureCell.test.tsx | 0 .../components/headerRowCell.test.tsx | 0 .../components/hfiErrorAlert.test.tsx | 0 .../components/hfiLoadingDataView.test.tsx | 0 .../components/intensityGroupCell.test.tsx | 0 .../meanIntensityGroupRollup.test.tsx | 0 .../components/meanPrepLevelCell.test.tsx | 0 .../planningAreaReadyToggle.test.tsx | 0 .../components/prepLevelCell.test.tsx | 0 .../components/staticCells.test.tsx | 0 .../stationAdmin/AdminCancelButton.tsx | 0 .../stationAdmin/AdminFuelTypesDropdown.tsx | 0 .../stationAdmin/AdminRemoveButton.tsx | 0 .../stationAdmin/AdminStationDropdown.tsx | 0 .../stationAdmin/ExistingStationList.tsx | 0 .../stationAdmin/LoggedInStatus.tsx | 0 .../stationAdmin/ManageStationsButton.tsx | 0 .../stationAdmin/ManageStationsModal.tsx | 19 +- .../stationAdmin/NewStationList.tsx | 0 .../stationAdmin/PlanningAreaAdmin.tsx | 0 .../stationAdmin/SaveStationUpdatesButton.tsx | 0 .../stationAdmin/StationListAdmin.tsx | 0 .../adminFuelTypeDropdown.test.tsx | 0 .../stationAdmin/adminRemoveButton.test.tsx | 0 .../adminStationDropdown.test.tsx | 0 .../stationAdmin/loggedInStatus.test.tsx | 0 .../manageStationsButton.test.tsx | 0 .../stationAdmin/planningAreaAdmin.test.tsx | 0 .../saveStationUpdatesButton.test.tsx | 0 .../components/stationSelectCell.test.tsx | 0 .../components/statusCell.test.tsx | 0 .../hfiCalculator/components/testHelpers.ts | 0 .../components/weeklyRosCell.test.tsx | 0 .../src/features/hfiCalculator/constants.ts | 0 .../hfiCalculator/pages/HfiCalculatorPage.tsx | 0 .../slices/hfiCalculatorSlice.test.ts | 0 .../slices/hfiCalculatorSlice.ts | 0 .../slices/hfiReadySlice.test.ts | 0 .../hfiCalculator/slices/hfiReadySlice.ts | 0 .../hfiCalculator/slices/stationsSlice.ts | 0 .../src/features/hfiCalculator/util.ts | 0 .../src/features/hfiCalculator/validation.ts | 0 .../landingPage/components/BetaTag.tsx | 0 .../landingPage/components/Footer.tsx | 0 .../landingPage/components/Sidebar.tsx | 0 .../components/SidebarToolList.tsx | 0 .../landingPage/components/Subheading.tsx | 0 .../landingPage/components/ToolCard.tsx | 0 .../landingPage/components/ToolCards.tsx | 0 .../landingPage/images/collaboardIcon.svg | 0 .../features/landingPage/images/msTeams.svg | 0 .../landingPage/pages/LandingPage.tsx | 0 .../src/features/landingPage/toolInfo.tsx | 0 .../wps-web}/src/features/map/Map.tsx | 0 .../wps-web}/src/features/map/TileLayer.tsx | 0 .../wps-web}/src/features/map/VectorLayer.tsx | 0 .../moreCast2/components/ActualCell.tsx | 0 .../moreCast2/components/ColumnDefBuilder.tsx | 0 .../moreCast2/components/DataGridColumns.tsx | 0 .../moreCast2/components/EditInputCell.tsx | 0 .../moreCast2/components/ForecastCell.tsx | 0 .../moreCast2/components/ForecastDataGrid.tsx | 0 .../moreCast2/components/ForecastHeader.tsx | 0 .../components/ForecastSummaryDataGrid.tsx | 0 .../components/GridComponentRenderer.tsx | 0 .../moreCast2/components/GroupHeader.tsx | 0 .../components/InvalidCellToolTip.tsx | 0 .../moreCast2/components/ModelHeader.tsx | 0 .../moreCast2/components/MoreCast2Column.tsx | 0 .../components/MoreCast2DateRangePicker.tsx | 0 .../components/MoreCast2Snackbar.tsx | 0 .../components/MorecastAboutDataContent.tsx | 0 .../components/ResetForecastButton.tsx | 0 .../components/SaveForecastButton.tsx | 0 .../moreCast2/components/SelectableButton.tsx | 0 .../components/StationGroupDropdown.tsx | 0 .../moreCast2/components/StationPanel.tsx | 0 .../moreCast2/components/TabbedDataGrid.tsx | 0 .../moreCast2/components/ValidatedCell.tsx | 0 .../components/ValidatedForecastCell.tsx | 0 .../ValidatedGrassCureForecastCell.tsx | 0 .../ValidatedWindDirectionForecastCell.tsx | 0 .../components/WeatherModelDropdown.tsx | 0 .../components/colDefBuilder.test.tsx | 0 .../components/editInputCell.test.tsx | 0 .../components/forecastCell.test.tsx | 0 .../components/forecastHeader.test.tsx | 0 .../components/gridComponentRenderer.test.tsx | 0 .../moreCast2/components/modelHeader.test.tsx | 0 .../components/moreCast2Column.test.tsx | 0 .../components/resetForecastButton.test.tsx | 0 .../components/saveForecastButton.test.tsx | 0 .../components/selectableButton.test.tsx | 0 .../components/stationGroupsDropdown.test.tsx | 0 .../components/stationPanel.test.tsx | 0 .../components/tabbedDataGrid.test.tsx | 0 .../moreCast2/components/testHelper.tsx | 0 .../components/validatedForecastCell.test.tsx | 0 .../validatedGrassCureForecastCell.test.tsx | 0 ...alidatedWindDirectionForecastCell.test.tsx | 0 .../components/weatherModelDropdown.test.tsx | 0 .../features/moreCast2/forecastDraft.test.ts | 0 .../src/features/moreCast2/forecastDraft.ts | 0 .../src/features/moreCast2/interfaces.ts | 15 +- .../moreCast2/pages/MoreCast2Page.tsx | 0 .../src/features/moreCast2/rowFilters.test.ts | 0 .../src/features/moreCast2/rowFilters.ts | 0 .../features/moreCast2/saveForecast.test.ts | 0 .../src/features/moreCast2/saveForecasts.ts | 0 .../moreCast2/slices/dataSlice.test.ts | 0 .../features/moreCast2/slices/dataSlice.ts | 0 .../moreCast2/slices/selectedStationsSlice.ts | 0 .../moreCast2/slices/validInputSlice.test.ts | 0 .../moreCast2/slices/validInputSlice.ts | 0 .../src/features/moreCast2/util.test.ts | 0 .../wps-web}/src/features/moreCast2/util.ts | 0 .../components/PercentileActionButtons.tsx | 0 .../PercentileCalcDocumentation.tsx | 0 .../components/PercentileMeanResultTable.tsx | 0 .../components/PercentileResults.tsx | 0 .../components/PercentileSnackbar.tsx | 0 .../PercentileStationResultTable.tsx | 0 .../components/PercentileTextfield.tsx | 0 .../components/TimeRangeSlider.tsx | 0 .../components/WxStationDropdown.tsx | 0 .../pages/PercentileCalculatorPage.tsx | 0 ...PercentileCalculatorPageWithDisclaimer.tsx | 0 .../slices/percentilesSlice.ts | 0 .../components/RasterTypeDropdown.test.tsx | 0 .../components/RasterTypeDropdown.tsx | 0 .../map/RasterErrorNotification.test.tsx | 0 .../map/RasterErrorNotification.tsx | 0 .../components/map/RasterLegend.tsx | 0 .../components/map/RasterTooltip.tsx | 0 .../sfmsInsights/components/map/SFMSMap.tsx | 0 .../components/map/layerDefinitions.test.ts | 0 .../components/map/layerDefinitions.ts | 0 .../components/map/layerManager.test.ts | 0 .../components/map/layerManager.ts | 0 .../components/map/rasterConfig.ts | 0 .../map/rasterTooltipHandler.test.ts | 0 .../components/map/rasterTooltipHandler.ts | 0 .../map/rasterTooltipInteraction.test.ts | 0 .../map/rasterTooltipInteraction.ts | 0 .../components/map/sfmsFeatureStylers.test.ts | 0 .../components/map/sfmsFeatureStylers.ts | 0 .../components/map/sfmsMap.test.tsx | 0 .../pages/SFMSInsightsPage.test.tsx | 0 .../sfmsInsights/pages/SFMSInsightsPage.tsx | 0 .../features/stations/slices/stationsSlice.ts | 0 .../wps-web}/src/fonts/BCSans-Bold.woff | Bin .../wps-web}/src/fonts/BCSans-Bold.woff2 | Bin .../wps-web}/src/fonts/BCSans-BoldItalic.woff | Bin .../src/fonts/BCSans-BoldItalic.woff2 | Bin .../wps-web}/src/fonts/BCSans-Italic.woff | Bin .../wps-web}/src/fonts/BCSans-Italic.woff2 | Bin .../wps-web}/src/fonts/BCSans-Regular.woff | Bin .../wps-web}/src/fonts/BCSans-Regular.woff2 | Bin .../wps-web}/src/fonts/FONTLOG_README.txt | 0 .../wps-web}/src/fonts/LICENSE_OFL.txt | 0 web/{ => apps/wps-web}/src/index.css | 0 web/{ => apps/wps-web}/src/index.tsx | 0 web/{ => apps/wps-web}/src/react-app-env.d.ts | 0 web/{ => apps/wps-web}/src/setupTests.ts | 0 web/{ => apps/wps-web}/src/test/testUtils.ts | 0 web/{ => apps/wps-web}/src/types/global.d.ts | 0 web/{ => apps/wps-web}/src/whatwg-fetch.d.ts | 0 web/apps/wps-web/tsconfig.app.json | 26 ++ web/apps/wps-web/tsconfig.json | 11 + web/{ => apps/wps-web}/tsconfig.node.json | 0 web/{ => apps/wps-web}/vite.config.ts | 31 ++- web/{ => apps/wps-web}/vitest.config.ts | 0 web/package.json | 131 +--------- web/packages/api/package.json | 5 + web/{src/api => packages/api/src}/axios.ts | 0 .../api => packages/api/src}/cHainesAPI.ts | 0 web/{src/api => packages/api/src}/fbaAPI.ts | 2 +- .../api => packages/api/src}/fbaCalcAPI.ts | 0 .../api => packages/api/src}/forecastAPI.ts | 0 .../api/src}/hfiCalculatorAPI.ts | 17 +- web/{src/api => packages/api/src}/modelAPI.ts | 0 .../api/src}/moreCast2API.test.ts | 0 .../api => packages/api/src}/moreCast2API.ts | 19 +- .../api/src}/observationAPI.ts | 0 .../api => packages/api/src}/percentileAPI.ts | 0 web/{src/api => packages/api/src}/snow.ts | 0 .../api/src}/stationAPI.test.ts | 0 .../api => packages/api/src}/stationAPI.ts | 0 web/packages/api/tsconfig.json | 16 ++ web/packages/tsconfig/base.json | 12 + web/packages/tsconfig/package.json | 9 + web/packages/tsconfig/react-app.json | 19 ++ web/packages/types/package.json | 5 + .../types => packages/types/src}/window.d.ts | 0 web/packages/ui/package.json | 5 + .../ui/src}/AboutDataPopover.tsx | 0 .../components => packages/ui/src}/Button.tsx | 0 .../ui/src}/Container.tsx | 0 .../ui/src}/DateRangeSelector.tsx | 0 .../ui/src}/ErrorBoundary.tsx | 0 .../ui/src}/ErrorMessage.tsx | 0 .../ui/src}/FeedbackButton.tsx | 0 .../ui/src}/FireCenterDropdown.tsx | 0 .../ui/src}/FireTable.tsx | 0 .../ui/src}/GeneralHeader.tsx | 0 .../components => packages/ui/src}/Grid.tsx | 0 .../ui/src}/HeaderImage.tsx | 0 .../ui/src}/PageTitle.tsx | 0 .../ui/src}/ResetDialog.tsx | 0 .../components => packages/ui/src}/Slider.tsx | 0 .../ui/src}/StickyCell.tsx | 0 .../ui/src}/StyledFormControl.tsx | 0 .../ui/src}/WPSDatePicker.tsx | 0 .../ui/src}/aboutDataPopover.test.tsx | 6 +- .../src}/dateRangePicker/DateRangePicker.tsx | 0 .../DateRangePickerWrapper.tsx | 0 .../ui/src}/dateRangePicker/Day.tsx | 0 .../ui/src}/dateRangePicker/Header.tsx | 0 .../ui/src}/dateRangePicker/LICENSE | 0 .../ui/src}/dateRangePicker/Menu.tsx | 0 .../ui/src}/dateRangePicker/Month.tsx | 0 .../ui/src}/dateRangePicker/README.md | 0 .../dateRangePickerWrapper.test.tsx | 0 .../ui/src}/dateRangePicker/menu.test.tsx | 0 .../ui/src}/dateRangePicker/month.test.tsx | 0 .../ui/src}/dateRangePicker/types.ts | 0 .../ui/src}/dateRangePicker/utils.test.tsx | 0 .../ui/src}/dateRangePicker/utils.ts | 0 .../ui/src}/fireTable.test.tsx | 0 .../components => packages/ui/src}/index.ts | 0 .../ui/src}/resetDialog.test.tsx | 2 +- .../ui/src}/stickyCell.test.tsx | 0 web/{src/app => packages/ui/src}/theme.ts | 0 web/packages/ui/tsconfig.json | 14 + web/packages/utils/package.json | 5 + .../utils => packages/utils/src}/constants.ts | 0 .../utils => packages/utils/src}/date.test.ts | 0 web/{src/utils => packages/utils/src}/date.ts | 0 .../utils/src}/dropdown.test.ts | 0 .../utils => packages/utils/src}/dropdown.ts | 0 web/{src/utils => packages/utils/src}/env.ts | 0 .../utils => packages/utils/src}/error.ts | 0 .../utils => packages/utils/src}/format.ts | 0 .../utils => packages/utils/src}/fwi/bui.ts | 0 .../utils => packages/utils/src}/fwi/dc.ts | 0 .../utils => packages/utils/src}/fwi/dmc.ts | 0 .../utils => packages/utils/src}/fwi/ffmc.ts | 0 .../utils => packages/utils/src}/fwi/fwi.ts | 0 .../utils => packages/utils/src}/fwi/index.ts | 0 .../utils => packages/utils/src}/fwi/isi.ts | 0 .../utils/src}/getError.test.ts | 0 .../utils => packages/utils/src}/getError.ts | 0 .../utils => packages/utils/src}/strings.ts | 0 .../utils => packages/utils/src}/url.test.ts | 0 web/{src/utils => packages/utils/src}/url.ts | 0 .../utils/src}/vectorLayerUtils.test.ts | 2 +- .../utils/src}/vectorLayerUtils.ts | 0 web/packages/utils/tsconfig.json | 18 ++ web/tsconfig.app.json | 44 ---- web/tsconfig.json | 15 +- web/turbo.json | 21 ++ web/yarn.lock | 246 ++++++++++++------ 538 files changed, 551 insertions(+), 308 deletions(-) rename web/{ => apps/wps-web}/.env.cypress (100%) rename web/{ => apps/wps-web}/.env.example (100%) rename web/{ => apps/wps-web}/Dockerfile (100%) rename web/{ => apps/wps-web}/README.md (100%) rename web/{ => apps/wps-web}/cypress.config.cjs (100%) create mode 100644 web/apps/wps-web/cypress/downloads/downloads.html rename web/{ => apps/wps-web}/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/hfi-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/morecast-2-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/not-found-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/e2e/percentile-calculator-page.cy.ts (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/322.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/322_209_response.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/328.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/fba-calc/export.csv (99%) rename web/{ => apps/wps-web}/cypress/fixtures/fba/fire-centers.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-disable-station.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-high-intensity.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-missing.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies-saved.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/dailies.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire-centres-grass.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire-centres-minimal.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fire_centres.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/fuel_types.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/hfi_result_cariboo.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/hfi_result_kamloops.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/hfi-calc/ready-states.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/percentiles/percentile-result.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/percentiles/two-percentiles-result.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/high-res-model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/noon-forecast-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/noon-forecasts.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/observations.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/regional-model-summaries.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-stations-details.json (100%) rename web/{ => apps/wps-web}/cypress/fixtures/weather-stations.json (100%) rename web/{ => apps/wps-web}/cypress/support/commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/e2e.ts (100%) rename web/{ => apps/wps-web}/cypress/support/fba-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/hfi-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/support/percentile-commands.ts (100%) rename web/{ => apps/wps-web}/cypress/tsconfig.json (100%) rename web/{ => apps/wps-web}/eslint.config.cjs (100%) rename web/{ => apps/wps-web}/index.html (100%) rename web/{ => apps/wps-web}/manifest.json (100%) rename web/{ => apps/wps-web}/mergeCoverage.cjs (100%) create mode 100644 web/apps/wps-web/package.json rename web/{ => apps/wps-web}/public/images/BCID_H_rgb_rev.svg (100%) rename web/{ => apps/wps-web}/public/images/bc-wilderfire-service-logo.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-192x192.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-512x512.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-apple-icon.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-apple-touch-icon.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-favicon-16x16.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-favicon-32x32.png (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-en.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-fr.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-rev-en.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-logo-rev-fr.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-symbol-rev.svg (100%) rename web/{ => apps/wps-web}/public/images/bcid-symbol.svg (100%) rename web/{ => apps/wps-web}/public/images/fbpgo_maskable.png (100%) rename web/{ => apps/wps-web}/public/images/logo-banner.svg (100%) rename web/{ => apps/wps-web}/public/images/redMarker.png (100%) rename web/{ => apps/wps-web}/src/app/App.tsx (100%) rename web/{ => apps/wps-web}/src/app/Routes.tsx (100%) rename web/{ => apps/wps-web}/src/app/rootReducer.ts (100%) rename web/{ => apps/wps-web}/src/app/store.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/fireCentersSlice.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/selectedStationGroupMembers.test.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/selectedStationGroupMembers.ts (100%) rename web/{ => apps/wps-web}/src/commonSlices/stationGroupsSlice.ts (100%) rename web/{ => apps/wps-web}/src/documents/90th_percentile_calculator_rationale.pdf (100%) rename web/{ => apps/wps-web}/src/features/NoMatchPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/auth/components/AuthWrapper.tsx (100%) rename web/{ => apps/wps-web}/src/features/auth/keycloak.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/roles.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/slices/authenticationSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/auth/slices/authenticationSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/cHaines/pages/CHainesPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/cHaines/slices/cHainesModelRunsSlice.tsx (100%) rename web/{ => apps/wps-web}/src/features/cHaines/slices/cHainesPredictionsSlice.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/calculateZoneStatus.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/calculateZoneStatus.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASAAboutDataContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASADatePicker.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ASADatePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/ActualForecastControl.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/actualForecastControl.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/AdvisoryReport.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/AdvisoryText.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireCentreInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/InfoAccordion.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/ProvincialSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/TabPanel.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/advisoryReport.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/advisoryText.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/infoAccordion.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/infoPanel/provincialSummary.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/FBAMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/Legend.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/ScaleBarContainer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/fbaMap.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/featureStylers.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/legend.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/map/scalebarContainer.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/CriticalHours.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationFlag.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationInfoViz.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationLabel.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/ElevationStatus.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FillableFlag.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FuelDistribution.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/FuelSummary.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/color.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/color.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/criticalHours.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/elevationFlag.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/elevationStatus.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/fillableFlag.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/components/viz/fuelDistribution.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/context/MapContext.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/cqlBuilder.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/criticalHoursStartEndTime.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/criticalHoursStartEndTime.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/fireCentreExtents.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/fireZoneUnitExtents.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hfiStatsUtils.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hfiStatsUtils.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useFireCentreDetails.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useLoading.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/hooks/useLoading.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/images/mountain.png (100%) rename web/{ => apps/wps-web}/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fba/pmtilesBuilder.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireCentreTPIStatsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/fireZoneElevationInfoSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/provincialSummarySlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/runDatesSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/runDatesSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fba/slices/valueAtCoordinateSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/RowManager.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/CriticalHoursCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/ErrorAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBAProgressRow.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATable.tsx (99%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATableHead.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FBATableInstructions.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FbaAboutDataContent.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/FilterColumnsModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/FuelTypeCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/GrassCureCell.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/HFICell.tsx (94%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/PrecipCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/SelectionCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/StatusCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/TableHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/TextDisplayCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/WeatherStationCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/WindSpeedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/fbaProgressRow.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/grassCureCell.test.tsx (100%) rename web/{src => apps/wps-web/src/features/fbaCalculator}/components/hfiCell.test.tsx (98%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/precipCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/selectionCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/components/windSpeedCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/fuelTypes.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/rowManager.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/tableState.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/utils.ts (100%) rename web/{ => apps/wps-web}/src/features/fbaCalculator/validation.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/CreateFireWatch.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/DetailPanelContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/FireWatchDashboard.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/FireWatchDetailsModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/MenuHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/NavigationDrawer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/OptionalHeading.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/detailPanelContent.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/fireWatchDashboard.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/CompleteStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/FuelStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/InfoStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/LocationStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/SummaryTextLine.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/components/steps/WeatherParametersStep.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/fireWatchApi.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/interfaces.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/pages/FireWatchPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/burnForecastSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/slices/fireWatchSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWatch/utils.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/AccuracyVariablePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/WeatherMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/stationAccuracy.test.ts (100%) rename web/{ => apps/wps-web}/src/features/fireWeather/components/maps/stationAccuracy.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/AboutDataModal.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/CalculatedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DailyHFICell.tsx (87%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DailyViewTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DangerClassCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayHeaders.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayHeaders.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DayIndexHeaders.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/DownloadPDFButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/EmptyFireCentre.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/EmptyStaticCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireCentreCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireCentreDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireStartsCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FireStartsDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/FuelTypeDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/GrassCureCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFIErrorAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFIPageSubHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HFISuccessAlert.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HeaderRowCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/IntensityGroupCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/LastUpdatedHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/LoadingBackdrop.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/PrepLevelCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/RequiredDataCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StaticCells.tsx (97%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StationDataHeaderCells.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StationSelectCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StatusCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledFireComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/StyledTableComponents.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ViewSwitcher.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WeeklyROSCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WeeklyViewTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/WindDirectionCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/dailyHFICell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/emptyFireCentre.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/grassCureCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/headerRowCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/intensityGroupCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/prepLevelCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/staticCells.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx (92%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/stationSelectCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/statusCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/testHelpers.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/components/weeklyRosCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/constants.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiReadySlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/hfiReadySlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/slices/stationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/util.ts (100%) rename web/{ => apps/wps-web}/src/features/hfiCalculator/validation.ts (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/BetaTag.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Footer.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Sidebar.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/SidebarToolList.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/Subheading.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/ToolCard.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/components/ToolCards.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/images/collaboardIcon.svg (100%) rename web/{ => apps/wps-web}/src/features/landingPage/images/msTeams.svg (100%) rename web/{ => apps/wps-web}/src/features/landingPage/pages/LandingPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/landingPage/toolInfo.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/Map.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/TileLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/map/VectorLayer.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ActualCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ColumnDefBuilder.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/DataGridColumns.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/EditInputCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/GridComponentRenderer.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/GroupHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/InvalidCellToolTip.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ModelHeader.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2Column.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MoreCast2Snackbar.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/MorecastAboutDataContent.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ResetForecastButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/SaveForecastButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/SelectableButton.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/StationGroupDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/StationPanel.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/TabbedDataGrid.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/WeatherModelDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/colDefBuilder.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/editInputCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/forecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/forecastHeader.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/gridComponentRenderer.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/modelHeader.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/moreCast2Column.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/resetForecastButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/saveForecastButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/selectableButton.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/stationGroupsDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/stationPanel.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/tabbedDataGrid.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/testHelper.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/components/weatherModelDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/forecastDraft.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/forecastDraft.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/interfaces.ts (92%) rename web/{ => apps/wps-web}/src/features/moreCast2/pages/MoreCast2Page.tsx (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/rowFilters.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/rowFilters.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/saveForecast.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/saveForecasts.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/dataSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/dataSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/selectedStationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/validInputSlice.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/slices/validInputSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/util.test.ts (100%) rename web/{ => apps/wps-web}/src/features/moreCast2/util.ts (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileActionButtons.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileResults.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileSnackbar.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileStationResultTable.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/PercentileTextfield.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/TimeRangeSlider.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/components/WxStationDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx (100%) rename web/{ => apps/wps-web}/src/features/percentileCalculator/slices/percentilesSlice.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/RasterTypeDropdown.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterLegend.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/RasterTooltip.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/SFMSMap.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerDefinitions.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerDefinitions.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerManager.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/layerManager.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterConfig.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/components/map/sfmsMap.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx (100%) rename web/{ => apps/wps-web}/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx (100%) rename web/{ => apps/wps-web}/src/features/stations/slices/stationsSlice.ts (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Bold.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Bold.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-BoldItalic.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-BoldItalic.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Italic.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Italic.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Regular.woff (100%) rename web/{ => apps/wps-web}/src/fonts/BCSans-Regular.woff2 (100%) rename web/{ => apps/wps-web}/src/fonts/FONTLOG_README.txt (100%) rename web/{ => apps/wps-web}/src/fonts/LICENSE_OFL.txt (100%) rename web/{ => apps/wps-web}/src/index.css (100%) rename web/{ => apps/wps-web}/src/index.tsx (100%) rename web/{ => apps/wps-web}/src/react-app-env.d.ts (100%) rename web/{ => apps/wps-web}/src/setupTests.ts (100%) rename web/{ => apps/wps-web}/src/test/testUtils.ts (100%) rename web/{ => apps/wps-web}/src/types/global.d.ts (100%) rename web/{ => apps/wps-web}/src/whatwg-fetch.d.ts (100%) create mode 100644 web/apps/wps-web/tsconfig.app.json create mode 100644 web/apps/wps-web/tsconfig.json rename web/{ => apps/wps-web}/tsconfig.node.json (100%) rename web/{ => apps/wps-web}/vite.config.ts (55%) rename web/{ => apps/wps-web}/vitest.config.ts (100%) create mode 100644 web/packages/api/package.json rename web/{src/api => packages/api/src}/axios.ts (100%) rename web/{src/api => packages/api/src}/cHainesAPI.ts (100%) rename web/{src/api => packages/api/src}/fbaAPI.ts (99%) rename web/{src/api => packages/api/src}/fbaCalcAPI.ts (100%) rename web/{src/api => packages/api/src}/forecastAPI.ts (100%) rename web/{src/api => packages/api/src}/hfiCalculatorAPI.ts (97%) rename web/{src/api => packages/api/src}/modelAPI.ts (100%) rename web/{src/api => packages/api/src}/moreCast2API.test.ts (100%) rename web/{src/api => packages/api/src}/moreCast2API.ts (94%) rename web/{src/api => packages/api/src}/observationAPI.ts (100%) rename web/{src/api => packages/api/src}/percentileAPI.ts (100%) rename web/{src/api => packages/api/src}/snow.ts (100%) rename web/{src/api => packages/api/src}/stationAPI.test.ts (100%) rename web/{src/api => packages/api/src}/stationAPI.ts (100%) create mode 100644 web/packages/api/tsconfig.json create mode 100644 web/packages/tsconfig/base.json create mode 100644 web/packages/tsconfig/package.json create mode 100644 web/packages/tsconfig/react-app.json create mode 100644 web/packages/types/package.json rename web/{src/types => packages/types/src}/window.d.ts (100%) create mode 100644 web/packages/ui/package.json rename web/{src/components => packages/ui/src}/AboutDataPopover.tsx (100%) rename web/{src/components => packages/ui/src}/Button.tsx (100%) rename web/{src/components => packages/ui/src}/Container.tsx (100%) rename web/{src/components => packages/ui/src}/DateRangeSelector.tsx (100%) rename web/{src/components => packages/ui/src}/ErrorBoundary.tsx (100%) rename web/{src/components => packages/ui/src}/ErrorMessage.tsx (100%) rename web/{src/components => packages/ui/src}/FeedbackButton.tsx (100%) rename web/{src/components => packages/ui/src}/FireCenterDropdown.tsx (100%) rename web/{src/components => packages/ui/src}/FireTable.tsx (100%) rename web/{src/components => packages/ui/src}/GeneralHeader.tsx (100%) rename web/{src/components => packages/ui/src}/Grid.tsx (100%) rename web/{src/components => packages/ui/src}/HeaderImage.tsx (100%) rename web/{src/components => packages/ui/src}/PageTitle.tsx (100%) rename web/{src/components => packages/ui/src}/ResetDialog.tsx (100%) rename web/{src/components => packages/ui/src}/Slider.tsx (100%) rename web/{src/components => packages/ui/src}/StickyCell.tsx (100%) rename web/{src/components => packages/ui/src}/StyledFormControl.tsx (100%) rename web/{src/components => packages/ui/src}/WPSDatePicker.tsx (100%) rename web/{src/components => packages/ui/src}/aboutDataPopover.test.tsx (85%) rename web/{src/components => packages/ui/src}/dateRangePicker/DateRangePicker.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/DateRangePickerWrapper.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Day.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Header.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/LICENSE (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Menu.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/Month.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/README.md (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/dateRangePickerWrapper.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/menu.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/month.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/types.ts (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/utils.test.tsx (100%) rename web/{src/components => packages/ui/src}/dateRangePicker/utils.ts (100%) rename web/{src/components => packages/ui/src}/fireTable.test.tsx (100%) rename web/{src/components => packages/ui/src}/index.ts (100%) rename web/{src/components => packages/ui/src}/resetDialog.test.tsx (97%) rename web/{src/components => packages/ui/src}/stickyCell.test.tsx (100%) rename web/{src/app => packages/ui/src}/theme.ts (100%) create mode 100644 web/packages/ui/tsconfig.json create mode 100644 web/packages/utils/package.json rename web/{src/utils => packages/utils/src}/constants.ts (100%) rename web/{src/utils => packages/utils/src}/date.test.ts (100%) rename web/{src/utils => packages/utils/src}/date.ts (100%) rename web/{src/utils => packages/utils/src}/dropdown.test.ts (100%) rename web/{src/utils => packages/utils/src}/dropdown.ts (100%) rename web/{src/utils => packages/utils/src}/env.ts (100%) rename web/{src/utils => packages/utils/src}/error.ts (100%) rename web/{src/utils => packages/utils/src}/format.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/bui.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/dc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/dmc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/ffmc.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/fwi.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/index.ts (100%) rename web/{src/utils => packages/utils/src}/fwi/isi.ts (100%) rename web/{src/utils => packages/utils/src}/getError.test.ts (100%) rename web/{src/utils => packages/utils/src}/getError.ts (100%) rename web/{src/utils => packages/utils/src}/strings.ts (100%) rename web/{src/utils => packages/utils/src}/url.test.ts (100%) rename web/{src/utils => packages/utils/src}/url.ts (100%) rename web/{src/utils => packages/utils/src}/vectorLayerUtils.test.ts (98%) rename web/{src/utils => packages/utils/src}/vectorLayerUtils.ts (100%) create mode 100644 web/packages/utils/tsconfig.json delete mode 100644 web/tsconfig.app.json create mode 100644 web/turbo.json diff --git a/web/.gitignore b/web/.gitignore index cb55ef7359..99ac23a217 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -3,6 +3,7 @@ .sentryclirc .pnp.* .yarn/* +.turbo/* !.yarn/patches !.yarn/plugins !.yarn/releases diff --git a/web/.env.cypress b/web/apps/wps-web/.env.cypress similarity index 100% rename from web/.env.cypress rename to web/apps/wps-web/.env.cypress diff --git a/web/.env.example b/web/apps/wps-web/.env.example similarity index 100% rename from web/.env.example rename to web/apps/wps-web/.env.example diff --git a/web/Dockerfile b/web/apps/wps-web/Dockerfile similarity index 100% rename from web/Dockerfile rename to web/apps/wps-web/Dockerfile diff --git a/web/README.md b/web/apps/wps-web/README.md similarity index 100% rename from web/README.md rename to web/apps/wps-web/README.md diff --git a/web/cypress.config.cjs b/web/apps/wps-web/cypress.config.cjs similarity index 100% rename from web/cypress.config.cjs rename to web/apps/wps-web/cypress.config.cjs diff --git a/web/apps/wps-web/cypress/downloads/downloads.html b/web/apps/wps-web/cypress/downloads/downloads.html new file mode 100644 index 0000000000000000000000000000000000000000..a73e07468767d645b3a90052bc165dbb3f3bdfe9 GIT binary patch literal 118577 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

{Oe>>DQT0`DtSu`qW{wUh_}N{8OytS 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 literal 0 HcmV?d00001 diff --git a/web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts diff --git a/web/cypress/e2e/hfi-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/hfi-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts diff --git a/web/cypress/e2e/morecast-2-page.cy.ts b/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts similarity index 100% rename from web/cypress/e2e/morecast-2-page.cy.ts rename to web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts diff --git a/web/cypress/e2e/not-found-page.cy.ts b/web/apps/wps-web/cypress/e2e/not-found-page.cy.ts similarity index 100% rename from web/cypress/e2e/not-found-page.cy.ts rename to web/apps/wps-web/cypress/e2e/not-found-page.cy.ts diff --git a/web/cypress/e2e/percentile-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts similarity index 100% rename from web/cypress/e2e/percentile-calculator-page.cy.ts rename to web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts diff --git a/web/cypress/fixtures/fba-calc/322.json b/web/apps/wps-web/cypress/fixtures/fba-calc/322.json similarity index 100% rename from web/cypress/fixtures/fba-calc/322.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/322.json diff --git a/web/cypress/fixtures/fba-calc/322_209_response.json b/web/apps/wps-web/cypress/fixtures/fba-calc/322_209_response.json similarity index 100% rename from web/cypress/fixtures/fba-calc/322_209_response.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/322_209_response.json diff --git a/web/cypress/fixtures/fba-calc/328.json b/web/apps/wps-web/cypress/fixtures/fba-calc/328.json similarity index 100% rename from web/cypress/fixtures/fba-calc/328.json rename to web/apps/wps-web/cypress/fixtures/fba-calc/328.json diff --git a/web/cypress/fixtures/fba-calc/export.csv b/web/apps/wps-web/cypress/fixtures/fba-calc/export.csv similarity index 99% rename from web/cypress/fixtures/fba-calc/export.csv rename to web/apps/wps-web/cypress/fixtures/fba-calc/export.csv index 405b31451c..e74222850b 100644 --- a/web/cypress/fixtures/fba-calc/export.csv +++ b/web/apps/wps-web/cypress/fixtures/fba-calc/export.csv @@ -1,3 +1,3 @@ -"Zone","Weather Station","Elevation","FBP Fuel Type","Grass Cure","Status","Temp","RH","Wind Dir","Wind Speed (km/h)","Precip (mm)","FFMC","DMC","DC","ISI","BUI","FWI","HFI","Critical Hours (4000 kW/m)","Critical Hours (10000 kW/m)","ROS (m/min)","Fire Type","CFB (%)","Flame Length (m)","30 min fire size (ha)","60 min fire size (ha)" -"K5","PENTICTON RS (328)","427","O1A","80","ACTUAL","25.9","30","302","7.3","0","91.932","122.665","1002.44","8.156","187.86","33.709","1468.3296228910988","","","13.984091646581893","S","0.0","2.212336338874282","5.1009941188966925","28.273388410171016" +"Zone","Weather Station","Elevation","FBP Fuel Type","Grass Cure","Status","Temp","RH","Wind Dir","Wind Speed (km/h)","Precip (mm)","FFMC","DMC","DC","ISI","BUI","FWI","HFI","Critical Hours (4000 kW/m)","Critical Hours (10000 kW/m)","ROS (m/min)","Fire Type","CFB (%)","Flame Length (m)","30 min fire size (ha)","60 min fire size (ha)" +"K5","PENTICTON RS (328)","427","O1A","80","ACTUAL","25.9","30","302","7.3","0","91.932","122.665","1002.44","8.156","187.86","33.709","1468.3296228910988","","","13.984091646581893","S","0.0","2.212336338874282","5.1009941188966925","28.273388410171016" "K2","AFTON (322)","780","C5","","ACTUAL","20.5","38","310","9.2","0","89.579","90.588","858.106","6.417","143.344","26.922","629.1355440376345","","","0.5728888963554044","S","0.0","1.4481431145178463","0.009328024522166307","0.0522691463588831" \ No newline at end of file diff --git a/web/cypress/fixtures/fba/fire-centers.json b/web/apps/wps-web/cypress/fixtures/fba/fire-centers.json similarity index 100% rename from web/cypress/fixtures/fba/fire-centers.json rename to web/apps/wps-web/cypress/fixtures/fba/fire-centers.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-disable-station.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-disable-station.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-disable-station.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-disable-station.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-high-intensity.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-high-intensity.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-high-intensity.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-high-intensity.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-missing.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-missing.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-missing.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-missing.json diff --git a/web/cypress/fixtures/hfi-calc/dailies-saved.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-saved.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies-saved.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies-saved.json diff --git a/web/cypress/fixtures/hfi-calc/dailies.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/dailies.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/dailies.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/dailies.json diff --git a/web/cypress/fixtures/hfi-calc/fire-centres-grass.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-grass.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire-centres-grass.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-grass.json diff --git a/web/cypress/fixtures/hfi-calc/fire-centres-minimal.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-minimal.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire-centres-minimal.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire-centres-minimal.json diff --git a/web/cypress/fixtures/hfi-calc/fire_centres.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fire_centres.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fire_centres.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fire_centres.json diff --git a/web/cypress/fixtures/hfi-calc/fuel_types.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/fuel_types.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/fuel_types.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/fuel_types.json diff --git a/web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_cariboo.json diff --git a/web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/hfi_result_kamloops.json diff --git a/web/cypress/fixtures/hfi-calc/ready-states.json b/web/apps/wps-web/cypress/fixtures/hfi-calc/ready-states.json similarity index 100% rename from web/cypress/fixtures/hfi-calc/ready-states.json rename to web/apps/wps-web/cypress/fixtures/hfi-calc/ready-states.json diff --git a/web/cypress/fixtures/percentiles/percentile-result.json b/web/apps/wps-web/cypress/fixtures/percentiles/percentile-result.json similarity index 100% rename from web/cypress/fixtures/percentiles/percentile-result.json rename to web/apps/wps-web/cypress/fixtures/percentiles/percentile-result.json diff --git a/web/cypress/fixtures/percentiles/two-percentiles-result.json b/web/apps/wps-web/cypress/fixtures/percentiles/two-percentiles-result.json similarity index 100% rename from web/cypress/fixtures/percentiles/two-percentiles-result.json rename to web/apps/wps-web/cypress/fixtures/percentiles/two-percentiles-result.json diff --git a/web/cypress/fixtures/weather-data/high-res-model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/high-res-model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/high-res-model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/high-res-model-summaries.json diff --git a/web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/hr-models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-data/model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/model-summaries.json diff --git a/web/cypress/fixtures/weather-data/models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-data/noon-forecast-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/noon-forecast-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/noon-forecast-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/noon-forecast-summaries.json diff --git a/web/cypress/fixtures/weather-data/noon-forecasts.json b/web/apps/wps-web/cypress/fixtures/weather-data/noon-forecasts.json similarity index 100% rename from web/cypress/fixtures/weather-data/noon-forecasts.json rename to web/apps/wps-web/cypress/fixtures/weather-data/noon-forecasts.json diff --git a/web/cypress/fixtures/weather-data/observations.json b/web/apps/wps-web/cypress/fixtures/weather-data/observations.json similarity index 100% rename from web/cypress/fixtures/weather-data/observations.json rename to web/apps/wps-web/cypress/fixtures/weather-data/observations.json diff --git a/web/cypress/fixtures/weather-data/regional-model-summaries.json b/web/apps/wps-web/cypress/fixtures/weather-data/regional-model-summaries.json similarity index 100% rename from web/cypress/fixtures/weather-data/regional-model-summaries.json rename to web/apps/wps-web/cypress/fixtures/weather-data/regional-model-summaries.json diff --git a/web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json b/web/apps/wps-web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json similarity index 100% rename from web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json rename to web/apps/wps-web/cypress/fixtures/weather-data/regional-models-with-bias-adjusted.json diff --git a/web/cypress/fixtures/weather-stations-details.json b/web/apps/wps-web/cypress/fixtures/weather-stations-details.json similarity index 100% rename from web/cypress/fixtures/weather-stations-details.json rename to web/apps/wps-web/cypress/fixtures/weather-stations-details.json diff --git a/web/cypress/fixtures/weather-stations.json b/web/apps/wps-web/cypress/fixtures/weather-stations.json similarity index 100% rename from web/cypress/fixtures/weather-stations.json rename to web/apps/wps-web/cypress/fixtures/weather-stations.json diff --git a/web/cypress/support/commands.ts b/web/apps/wps-web/cypress/support/commands.ts similarity index 100% rename from web/cypress/support/commands.ts rename to web/apps/wps-web/cypress/support/commands.ts diff --git a/web/cypress/support/e2e.ts b/web/apps/wps-web/cypress/support/e2e.ts similarity index 100% rename from web/cypress/support/e2e.ts rename to web/apps/wps-web/cypress/support/e2e.ts diff --git a/web/cypress/support/fba-commands.ts b/web/apps/wps-web/cypress/support/fba-commands.ts similarity index 100% rename from web/cypress/support/fba-commands.ts rename to web/apps/wps-web/cypress/support/fba-commands.ts diff --git a/web/cypress/support/hfi-commands.ts b/web/apps/wps-web/cypress/support/hfi-commands.ts similarity index 100% rename from web/cypress/support/hfi-commands.ts rename to web/apps/wps-web/cypress/support/hfi-commands.ts diff --git a/web/cypress/support/percentile-commands.ts b/web/apps/wps-web/cypress/support/percentile-commands.ts similarity index 100% rename from web/cypress/support/percentile-commands.ts rename to web/apps/wps-web/cypress/support/percentile-commands.ts diff --git a/web/cypress/tsconfig.json b/web/apps/wps-web/cypress/tsconfig.json similarity index 100% rename from web/cypress/tsconfig.json rename to web/apps/wps-web/cypress/tsconfig.json diff --git a/web/eslint.config.cjs b/web/apps/wps-web/eslint.config.cjs similarity index 100% rename from web/eslint.config.cjs rename to web/apps/wps-web/eslint.config.cjs diff --git a/web/index.html b/web/apps/wps-web/index.html similarity index 100% rename from web/index.html rename to web/apps/wps-web/index.html diff --git a/web/manifest.json b/web/apps/wps-web/manifest.json similarity index 100% rename from web/manifest.json rename to web/apps/wps-web/manifest.json diff --git a/web/mergeCoverage.cjs b/web/apps/wps-web/mergeCoverage.cjs similarity index 100% rename from web/mergeCoverage.cjs rename to web/apps/wps-web/mergeCoverage.cjs diff --git a/web/apps/wps-web/package.json b/web/apps/wps-web/package.json new file mode 100644 index 0000000000..def3986807 --- /dev/null +++ b/web/apps/wps-web/package.json @@ -0,0 +1,127 @@ +{ + "name": "@wps/wps-web", + "version": "0.1.0", + "engines": { + "node": ">=20", + "npm": ">=10.7.0" + }, + "type": "module", + "license": "Apache-2.0", + "licenses": [ + { + "type": "Apache-2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + } + ], + "dependencies": { + "@emotion/react": "^11.8.2", + "@emotion/styled": "^11.8.1", + "@mui/icons-material": "^5.5.1", + "@mui/material": "5.15.20", + "@mui/system": "^5.15.14", + "@mui/x-data-grid-pro": "^6.0.0", + "@mui/x-date-pickers": "^7.29.4", + "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51", + "@reduxjs/toolkit": "^2.2.7", + "@sentry/react": "^10.0.0", + "@sentry/vite-plugin": "^5.0.0", + "@types/esri-leaflet": "^3.0.0", + "@types/leaflet": "^1.7.0", + "@types/lodash": "^4.14.173", + "@types/luxon": "^3.0.2", + "@types/react": "18.3.3", + "@types/react-dom": "^18.3.0", + "@types/react-plotly.js": "^2.2.4", + "@types/react-router-dom": "^5.3.3", + "@types/webpack-env": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitest/coverage-v8": "^4.0.8", + "axios": "1.8.2", + "date-fns": "^4.0.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.4", + "esri-leaflet": "3.0.12", + "filefy": "^0.1.11", + "jsdom": "^26.0.0", + "jwt-decode": "^4.0.0", + "keycloak-js": "^25.0.0", + "leaflet": "^1.7.1", + "lodash": "^4.17.21", + "luxon": "^3.0.2", + "match-sorter": "^8.0.0", + "nyc": "^17.0.0", + "ol": "10.0.0", + "ol-mapbox-style": "^13.1.1", + "ol-pmtiles": "^2.0.0", + "prettier": "^3.3.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-is": "^19.2.4", + "react-redux": "^9.1.2", + "react-router-dom": "^7.6.2", + "recharts": "^3.0.0", + "typescript": "^5.2.2", + "vitest": "^4.0.0", + "whatwg-fetch": "^3.6.20" + }, + "scripts": { + "start": "vite", + "dev": "vite", + "start:cypress": "export $(cat .env.cypress | xargs) && yarn start", + "build": "tsc -b && vite build", + "build:prod": "tsc -b && vite build", + "test": "VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest", + "test:ci": "CI=true npm test", + "coverage": "npm test -- --coverage --watchAll=false", + "coverage:ci": "CI=true VITE_KEYCLOAK_CLIENT=wps-web VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest run --coverage", + "cy:open": "cypress open", + "cy:run": "cypress run --browser chrome --config watchForFileChanges=false", + "cypress:ci": "start-server-and-test start:cypress http://localhost:3030 'cy:run'", + "lint": "eslint", + "lint:fix": "eslint --fix", + "format": "prettier --write \"**/*.+(js|jsx|json|yml|yaml|css|md)\"", + "finalizeCoverage": "yarn node mergeCoverage.cjs", + "preview": "vite preview" + }, + "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.0", + "@cypress/code-coverage": "^4.0.0", + "@eslint/compat": "^2.0.0", + "@testing-library/dom": "^10.1.0", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.5.2", + "@types/babel__core": "^7", + "@types/babel__preset-env": "^7", + "@types/jest": "^30.0.0", + "@types/react-is": "^19", + "@types/recharts": "^1.8.23", + "@vitejs/plugin-react": "^4.3.1", + "@wps/tsconfig": "workspace:*", + "babel-loader": "^10.1.1", + "cypress": "^15.10.0", + "eslint": "^9.7.0", + "eslint-plugin-react-hooks": "^7.0.0", + "eslint-plugin-react-refresh": "^0.4.7", + "globals": "^17.0.0", + "rollup": "^4.59.0", + "start-server-and-test": "^2.0.0", + "ts-sinon": "^2.0.2", + "vite": "^7.0.0", + "vite-plugin-istanbul": "^7.0.0", + "vite-plugin-svgr": "^4.2.0", + "webpack": "^5.105.4" + }, + "nyc": { + "report-dir": "coverage-cypress", + "excludeAfterRemap": true, + "exclude": [ + "src/serviceWorker.ts", + "src/app/store.ts" + ] + }, + "_comment": "packageManager is defined at workspace root" +} diff --git a/web/public/images/BCID_H_rgb_rev.svg b/web/apps/wps-web/public/images/BCID_H_rgb_rev.svg similarity index 100% rename from web/public/images/BCID_H_rgb_rev.svg rename to web/apps/wps-web/public/images/BCID_H_rgb_rev.svg diff --git a/web/public/images/bc-wilderfire-service-logo.png b/web/apps/wps-web/public/images/bc-wilderfire-service-logo.png similarity index 100% rename from web/public/images/bc-wilderfire-service-logo.png rename to web/apps/wps-web/public/images/bc-wilderfire-service-logo.png diff --git a/web/public/images/bcid-192x192.png b/web/apps/wps-web/public/images/bcid-192x192.png similarity index 100% rename from web/public/images/bcid-192x192.png rename to web/apps/wps-web/public/images/bcid-192x192.png diff --git a/web/public/images/bcid-512x512.png b/web/apps/wps-web/public/images/bcid-512x512.png similarity index 100% rename from web/public/images/bcid-512x512.png rename to web/apps/wps-web/public/images/bcid-512x512.png diff --git a/web/public/images/bcid-apple-icon.svg b/web/apps/wps-web/public/images/bcid-apple-icon.svg similarity index 100% rename from web/public/images/bcid-apple-icon.svg rename to web/apps/wps-web/public/images/bcid-apple-icon.svg diff --git a/web/public/images/bcid-apple-touch-icon.png b/web/apps/wps-web/public/images/bcid-apple-touch-icon.png similarity index 100% rename from web/public/images/bcid-apple-touch-icon.png rename to web/apps/wps-web/public/images/bcid-apple-touch-icon.png diff --git a/web/public/images/bcid-favicon-16x16.png b/web/apps/wps-web/public/images/bcid-favicon-16x16.png similarity index 100% rename from web/public/images/bcid-favicon-16x16.png rename to web/apps/wps-web/public/images/bcid-favicon-16x16.png diff --git a/web/public/images/bcid-favicon-32x32.png b/web/apps/wps-web/public/images/bcid-favicon-32x32.png similarity index 100% rename from web/public/images/bcid-favicon-32x32.png rename to web/apps/wps-web/public/images/bcid-favicon-32x32.png diff --git a/web/public/images/bcid-logo-en.svg b/web/apps/wps-web/public/images/bcid-logo-en.svg similarity index 100% rename from web/public/images/bcid-logo-en.svg rename to web/apps/wps-web/public/images/bcid-logo-en.svg diff --git a/web/public/images/bcid-logo-fr.svg b/web/apps/wps-web/public/images/bcid-logo-fr.svg similarity index 100% rename from web/public/images/bcid-logo-fr.svg rename to web/apps/wps-web/public/images/bcid-logo-fr.svg diff --git a/web/public/images/bcid-logo-rev-en.svg b/web/apps/wps-web/public/images/bcid-logo-rev-en.svg similarity index 100% rename from web/public/images/bcid-logo-rev-en.svg rename to web/apps/wps-web/public/images/bcid-logo-rev-en.svg diff --git a/web/public/images/bcid-logo-rev-fr.svg b/web/apps/wps-web/public/images/bcid-logo-rev-fr.svg similarity index 100% rename from web/public/images/bcid-logo-rev-fr.svg rename to web/apps/wps-web/public/images/bcid-logo-rev-fr.svg diff --git a/web/public/images/bcid-symbol-rev.svg b/web/apps/wps-web/public/images/bcid-symbol-rev.svg similarity index 100% rename from web/public/images/bcid-symbol-rev.svg rename to web/apps/wps-web/public/images/bcid-symbol-rev.svg diff --git a/web/public/images/bcid-symbol.svg b/web/apps/wps-web/public/images/bcid-symbol.svg similarity index 100% rename from web/public/images/bcid-symbol.svg rename to web/apps/wps-web/public/images/bcid-symbol.svg diff --git a/web/public/images/fbpgo_maskable.png b/web/apps/wps-web/public/images/fbpgo_maskable.png similarity index 100% rename from web/public/images/fbpgo_maskable.png rename to web/apps/wps-web/public/images/fbpgo_maskable.png diff --git a/web/public/images/logo-banner.svg b/web/apps/wps-web/public/images/logo-banner.svg similarity index 100% rename from web/public/images/logo-banner.svg rename to web/apps/wps-web/public/images/logo-banner.svg diff --git a/web/public/images/redMarker.png b/web/apps/wps-web/public/images/redMarker.png similarity index 100% rename from web/public/images/redMarker.png rename to web/apps/wps-web/public/images/redMarker.png diff --git a/web/src/app/App.tsx b/web/apps/wps-web/src/app/App.tsx similarity index 100% rename from web/src/app/App.tsx rename to web/apps/wps-web/src/app/App.tsx diff --git a/web/src/app/Routes.tsx b/web/apps/wps-web/src/app/Routes.tsx similarity index 100% rename from web/src/app/Routes.tsx rename to web/apps/wps-web/src/app/Routes.tsx diff --git a/web/src/app/rootReducer.ts b/web/apps/wps-web/src/app/rootReducer.ts similarity index 100% rename from web/src/app/rootReducer.ts rename to web/apps/wps-web/src/app/rootReducer.ts diff --git a/web/src/app/store.ts b/web/apps/wps-web/src/app/store.ts similarity index 100% rename from web/src/app/store.ts rename to web/apps/wps-web/src/app/store.ts diff --git a/web/src/commonSlices/fireCentersSlice.ts b/web/apps/wps-web/src/commonSlices/fireCentersSlice.ts similarity index 100% rename from web/src/commonSlices/fireCentersSlice.ts rename to web/apps/wps-web/src/commonSlices/fireCentersSlice.ts diff --git a/web/src/commonSlices/selectedStationGroupMembers.test.ts b/web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.test.ts similarity index 100% rename from web/src/commonSlices/selectedStationGroupMembers.test.ts rename to web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.test.ts diff --git a/web/src/commonSlices/selectedStationGroupMembers.ts b/web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.ts similarity index 100% rename from web/src/commonSlices/selectedStationGroupMembers.ts rename to web/apps/wps-web/src/commonSlices/selectedStationGroupMembers.ts diff --git a/web/src/commonSlices/stationGroupsSlice.ts b/web/apps/wps-web/src/commonSlices/stationGroupsSlice.ts similarity index 100% rename from web/src/commonSlices/stationGroupsSlice.ts rename to web/apps/wps-web/src/commonSlices/stationGroupsSlice.ts diff --git a/web/src/documents/90th_percentile_calculator_rationale.pdf b/web/apps/wps-web/src/documents/90th_percentile_calculator_rationale.pdf similarity index 100% rename from web/src/documents/90th_percentile_calculator_rationale.pdf rename to web/apps/wps-web/src/documents/90th_percentile_calculator_rationale.pdf diff --git a/web/src/features/NoMatchPage.tsx b/web/apps/wps-web/src/features/NoMatchPage.tsx similarity index 100% rename from web/src/features/NoMatchPage.tsx rename to web/apps/wps-web/src/features/NoMatchPage.tsx diff --git a/web/src/features/auth/components/AuthWrapper.tsx b/web/apps/wps-web/src/features/auth/components/AuthWrapper.tsx similarity index 100% rename from web/src/features/auth/components/AuthWrapper.tsx rename to web/apps/wps-web/src/features/auth/components/AuthWrapper.tsx diff --git a/web/src/features/auth/keycloak.ts b/web/apps/wps-web/src/features/auth/keycloak.ts similarity index 100% rename from web/src/features/auth/keycloak.ts rename to web/apps/wps-web/src/features/auth/keycloak.ts diff --git a/web/src/features/auth/roles.ts b/web/apps/wps-web/src/features/auth/roles.ts similarity index 100% rename from web/src/features/auth/roles.ts rename to web/apps/wps-web/src/features/auth/roles.ts diff --git a/web/src/features/auth/slices/authenticationSlice.test.ts b/web/apps/wps-web/src/features/auth/slices/authenticationSlice.test.ts similarity index 100% rename from web/src/features/auth/slices/authenticationSlice.test.ts rename to web/apps/wps-web/src/features/auth/slices/authenticationSlice.test.ts diff --git a/web/src/features/auth/slices/authenticationSlice.ts b/web/apps/wps-web/src/features/auth/slices/authenticationSlice.ts similarity index 100% rename from web/src/features/auth/slices/authenticationSlice.ts rename to web/apps/wps-web/src/features/auth/slices/authenticationSlice.ts diff --git a/web/src/features/cHaines/pages/CHainesPage.tsx b/web/apps/wps-web/src/features/cHaines/pages/CHainesPage.tsx similarity index 100% rename from web/src/features/cHaines/pages/CHainesPage.tsx rename to web/apps/wps-web/src/features/cHaines/pages/CHainesPage.tsx diff --git a/web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx b/web/apps/wps-web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx similarity index 100% rename from web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx rename to web/apps/wps-web/src/features/cHaines/slices/cHainesModelRunsSlice.tsx diff --git a/web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx b/web/apps/wps-web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx similarity index 100% rename from web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx rename to web/apps/wps-web/src/features/cHaines/slices/cHainesPredictionsSlice.tsx diff --git a/web/src/features/fba/calculateZoneStatus.test.ts b/web/apps/wps-web/src/features/fba/calculateZoneStatus.test.ts similarity index 100% rename from web/src/features/fba/calculateZoneStatus.test.ts rename to web/apps/wps-web/src/features/fba/calculateZoneStatus.test.ts diff --git a/web/src/features/fba/calculateZoneStatus.ts b/web/apps/wps-web/src/features/fba/calculateZoneStatus.ts similarity index 100% rename from web/src/features/fba/calculateZoneStatus.ts rename to web/apps/wps-web/src/features/fba/calculateZoneStatus.ts diff --git a/web/src/features/fba/components/ASAAboutDataContent.tsx b/web/apps/wps-web/src/features/fba/components/ASAAboutDataContent.tsx similarity index 100% rename from web/src/features/fba/components/ASAAboutDataContent.tsx rename to web/apps/wps-web/src/features/fba/components/ASAAboutDataContent.tsx diff --git a/web/src/features/fba/components/ASADatePicker.test.tsx b/web/apps/wps-web/src/features/fba/components/ASADatePicker.test.tsx similarity index 100% rename from web/src/features/fba/components/ASADatePicker.test.tsx rename to web/apps/wps-web/src/features/fba/components/ASADatePicker.test.tsx diff --git a/web/src/features/fba/components/ASADatePicker.tsx b/web/apps/wps-web/src/features/fba/components/ASADatePicker.tsx similarity index 100% rename from web/src/features/fba/components/ASADatePicker.tsx rename to web/apps/wps-web/src/features/fba/components/ASADatePicker.tsx diff --git a/web/src/features/fba/components/ActualForecastControl.tsx b/web/apps/wps-web/src/features/fba/components/ActualForecastControl.tsx similarity index 100% rename from web/src/features/fba/components/ActualForecastControl.tsx rename to web/apps/wps-web/src/features/fba/components/ActualForecastControl.tsx diff --git a/web/src/features/fba/components/actualForecastControl.test.tsx b/web/apps/wps-web/src/features/fba/components/actualForecastControl.test.tsx similarity index 100% rename from web/src/features/fba/components/actualForecastControl.test.tsx rename to web/apps/wps-web/src/features/fba/components/actualForecastControl.test.tsx diff --git a/web/src/features/fba/components/infoPanel/AdvisoryReport.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryReport.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/AdvisoryReport.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryReport.tsx diff --git a/web/src/features/fba/components/infoPanel/AdvisoryText.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryText.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/AdvisoryText.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/AdvisoryText.tsx diff --git a/web/src/features/fba/components/infoPanel/FireCentreInfo.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireCentreInfo.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireCentreInfo.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireCentreInfo.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitInfo.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitSummary.tsx diff --git a/web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/FireZoneUnitTabs.tsx diff --git a/web/src/features/fba/components/infoPanel/InfoAccordion.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/InfoAccordion.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/InfoAccordion.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/InfoAccordion.tsx diff --git a/web/src/features/fba/components/infoPanel/ProvincialSummary.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/ProvincialSummary.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/ProvincialSummary.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/ProvincialSummary.tsx diff --git a/web/src/features/fba/components/infoPanel/TabPanel.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/TabPanel.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/TabPanel.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/TabPanel.tsx diff --git a/web/src/features/fba/components/infoPanel/advisoryReport.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/advisoryReport.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/advisoryReport.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/advisoryReport.test.tsx diff --git a/web/src/features/fba/components/infoPanel/advisoryText.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/advisoryText.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/advisoryText.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/advisoryText.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireCentreInfo.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitInfo.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitSummary.test.tsx diff --git a/web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/fireZoneUnitTabs.test.tsx diff --git a/web/src/features/fba/components/infoPanel/infoAccordion.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/infoAccordion.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/infoAccordion.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/infoAccordion.test.tsx diff --git a/web/src/features/fba/components/infoPanel/provincialSummary.test.tsx b/web/apps/wps-web/src/features/fba/components/infoPanel/provincialSummary.test.tsx similarity index 100% rename from web/src/features/fba/components/infoPanel/provincialSummary.test.tsx rename to web/apps/wps-web/src/features/fba/components/infoPanel/provincialSummary.test.tsx diff --git a/web/src/features/fba/components/map/FBAMap.tsx b/web/apps/wps-web/src/features/fba/components/map/FBAMap.tsx similarity index 100% rename from web/src/features/fba/components/map/FBAMap.tsx rename to web/apps/wps-web/src/features/fba/components/map/FBAMap.tsx diff --git a/web/src/features/fba/components/map/Legend.tsx b/web/apps/wps-web/src/features/fba/components/map/Legend.tsx similarity index 100% rename from web/src/features/fba/components/map/Legend.tsx rename to web/apps/wps-web/src/features/fba/components/map/Legend.tsx diff --git a/web/src/features/fba/components/map/ScaleBarContainer.tsx b/web/apps/wps-web/src/features/fba/components/map/ScaleBarContainer.tsx similarity index 100% rename from web/src/features/fba/components/map/ScaleBarContainer.tsx rename to web/apps/wps-web/src/features/fba/components/map/ScaleBarContainer.tsx diff --git a/web/src/features/fba/components/map/fbaMap.test.tsx b/web/apps/wps-web/src/features/fba/components/map/fbaMap.test.tsx similarity index 100% rename from web/src/features/fba/components/map/fbaMap.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/fbaMap.test.tsx diff --git a/web/src/features/fba/components/map/featureStylers.ts b/web/apps/wps-web/src/features/fba/components/map/featureStylers.ts similarity index 100% rename from web/src/features/fba/components/map/featureStylers.ts rename to web/apps/wps-web/src/features/fba/components/map/featureStylers.ts diff --git a/web/src/features/fba/components/map/legend.test.tsx b/web/apps/wps-web/src/features/fba/components/map/legend.test.tsx similarity index 100% rename from web/src/features/fba/components/map/legend.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/legend.test.tsx diff --git a/web/src/features/fba/components/map/scalebarContainer.test.tsx b/web/apps/wps-web/src/features/fba/components/map/scalebarContainer.test.tsx similarity index 100% rename from web/src/features/fba/components/map/scalebarContainer.test.tsx rename to web/apps/wps-web/src/features/fba/components/map/scalebarContainer.test.tsx diff --git a/web/src/features/fba/components/viz/CriticalHours.tsx b/web/apps/wps-web/src/features/fba/components/viz/CriticalHours.tsx similarity index 100% rename from web/src/features/fba/components/viz/CriticalHours.tsx rename to web/apps/wps-web/src/features/fba/components/viz/CriticalHours.tsx diff --git a/web/src/features/fba/components/viz/ElevationFlag.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationFlag.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationFlag.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationFlag.tsx diff --git a/web/src/features/fba/components/viz/ElevationInfoViz.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationInfoViz.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationInfoViz.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationInfoViz.tsx diff --git a/web/src/features/fba/components/viz/ElevationLabel.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationLabel.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationLabel.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationLabel.tsx diff --git a/web/src/features/fba/components/viz/ElevationStatus.tsx b/web/apps/wps-web/src/features/fba/components/viz/ElevationStatus.tsx similarity index 100% rename from web/src/features/fba/components/viz/ElevationStatus.tsx rename to web/apps/wps-web/src/features/fba/components/viz/ElevationStatus.tsx diff --git a/web/src/features/fba/components/viz/FillableFlag.tsx b/web/apps/wps-web/src/features/fba/components/viz/FillableFlag.tsx similarity index 100% rename from web/src/features/fba/components/viz/FillableFlag.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FillableFlag.tsx diff --git a/web/src/features/fba/components/viz/FuelDistribution.tsx b/web/apps/wps-web/src/features/fba/components/viz/FuelDistribution.tsx similarity index 100% rename from web/src/features/fba/components/viz/FuelDistribution.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FuelDistribution.tsx diff --git a/web/src/features/fba/components/viz/FuelSummary.tsx b/web/apps/wps-web/src/features/fba/components/viz/FuelSummary.tsx similarity index 100% rename from web/src/features/fba/components/viz/FuelSummary.tsx rename to web/apps/wps-web/src/features/fba/components/viz/FuelSummary.tsx diff --git a/web/src/features/fba/components/viz/color.test.ts b/web/apps/wps-web/src/features/fba/components/viz/color.test.ts similarity index 100% rename from web/src/features/fba/components/viz/color.test.ts rename to web/apps/wps-web/src/features/fba/components/viz/color.test.ts diff --git a/web/src/features/fba/components/viz/color.ts b/web/apps/wps-web/src/features/fba/components/viz/color.ts similarity index 100% rename from web/src/features/fba/components/viz/color.ts rename to web/apps/wps-web/src/features/fba/components/viz/color.ts diff --git a/web/src/features/fba/components/viz/criticalHours.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/criticalHours.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/criticalHours.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/criticalHours.test.tsx diff --git a/web/src/features/fba/components/viz/elevationFlag.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/elevationFlag.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/elevationFlag.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/elevationFlag.test.tsx diff --git a/web/src/features/fba/components/viz/elevationStatus.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/elevationStatus.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/elevationStatus.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/elevationStatus.test.tsx diff --git a/web/src/features/fba/components/viz/fillableFlag.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/fillableFlag.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/fillableFlag.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/fillableFlag.test.tsx diff --git a/web/src/features/fba/components/viz/fuelDistribution.test.tsx b/web/apps/wps-web/src/features/fba/components/viz/fuelDistribution.test.tsx similarity index 100% rename from web/src/features/fba/components/viz/fuelDistribution.test.tsx rename to web/apps/wps-web/src/features/fba/components/viz/fuelDistribution.test.tsx diff --git a/web/src/features/fba/context/MapContext.tsx b/web/apps/wps-web/src/features/fba/context/MapContext.tsx similarity index 100% rename from web/src/features/fba/context/MapContext.tsx rename to web/apps/wps-web/src/features/fba/context/MapContext.tsx diff --git a/web/src/features/fba/cqlBuilder.ts b/web/apps/wps-web/src/features/fba/cqlBuilder.ts similarity index 100% rename from web/src/features/fba/cqlBuilder.ts rename to web/apps/wps-web/src/features/fba/cqlBuilder.ts diff --git a/web/src/features/fba/criticalHoursStartEndTime.test.ts b/web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.test.ts similarity index 100% rename from web/src/features/fba/criticalHoursStartEndTime.test.ts rename to web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.test.ts diff --git a/web/src/features/fba/criticalHoursStartEndTime.ts b/web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.ts similarity index 100% rename from web/src/features/fba/criticalHoursStartEndTime.ts rename to web/apps/wps-web/src/features/fba/criticalHoursStartEndTime.ts diff --git a/web/src/features/fba/fireCentreExtents.ts b/web/apps/wps-web/src/features/fba/fireCentreExtents.ts similarity index 100% rename from web/src/features/fba/fireCentreExtents.ts rename to web/apps/wps-web/src/features/fba/fireCentreExtents.ts diff --git a/web/src/features/fba/fireZoneUnitExtents.ts b/web/apps/wps-web/src/features/fba/fireZoneUnitExtents.ts similarity index 100% rename from web/src/features/fba/fireZoneUnitExtents.ts rename to web/apps/wps-web/src/features/fba/fireZoneUnitExtents.ts diff --git a/web/src/features/fba/hfiStatsUtils.test.ts b/web/apps/wps-web/src/features/fba/hfiStatsUtils.test.ts similarity index 100% rename from web/src/features/fba/hfiStatsUtils.test.ts rename to web/apps/wps-web/src/features/fba/hfiStatsUtils.test.ts diff --git a/web/src/features/fba/hfiStatsUtils.ts b/web/apps/wps-web/src/features/fba/hfiStatsUtils.ts similarity index 100% rename from web/src/features/fba/hfiStatsUtils.ts rename to web/apps/wps-web/src/features/fba/hfiStatsUtils.ts diff --git a/web/src/features/fba/hooks/useFireCentreDetails.ts b/web/apps/wps-web/src/features/fba/hooks/useFireCentreDetails.ts similarity index 100% rename from web/src/features/fba/hooks/useFireCentreDetails.ts rename to web/apps/wps-web/src/features/fba/hooks/useFireCentreDetails.ts diff --git a/web/src/features/fba/hooks/useLoading.test.tsx b/web/apps/wps-web/src/features/fba/hooks/useLoading.test.tsx similarity index 100% rename from web/src/features/fba/hooks/useLoading.test.tsx rename to web/apps/wps-web/src/features/fba/hooks/useLoading.test.tsx diff --git a/web/src/features/fba/hooks/useLoading.ts b/web/apps/wps-web/src/features/fba/hooks/useLoading.ts similarity index 100% rename from web/src/features/fba/hooks/useLoading.ts rename to web/apps/wps-web/src/features/fba/hooks/useLoading.ts diff --git a/web/src/features/fba/images/mountain.png b/web/apps/wps-web/src/features/fba/images/mountain.png similarity index 100% rename from web/src/features/fba/images/mountain.png rename to web/apps/wps-web/src/features/fba/images/mountain.png diff --git a/web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx b/web/apps/wps-web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx similarity index 100% rename from web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx rename to web/apps/wps-web/src/features/fba/pages/FireBehaviourAdvisoryPage.tsx diff --git a/web/src/features/fba/pmtilesBuilder.ts b/web/apps/wps-web/src/features/fba/pmtilesBuilder.ts similarity index 100% rename from web/src/features/fba/pmtilesBuilder.ts rename to web/apps/wps-web/src/features/fba/pmtilesBuilder.ts diff --git a/web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.test.ts diff --git a/web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreHFIFuelStatsSlice.ts diff --git a/web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.test.ts diff --git a/web/src/features/fba/slices/fireCentreTPIStatsSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireCentreTPIStatsSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireCentreTPIStatsSlice.ts diff --git a/web/src/features/fba/slices/fireZoneElevationInfoSlice.ts b/web/apps/wps-web/src/features/fba/slices/fireZoneElevationInfoSlice.ts similarity index 100% rename from web/src/features/fba/slices/fireZoneElevationInfoSlice.ts rename to web/apps/wps-web/src/features/fba/slices/fireZoneElevationInfoSlice.ts diff --git a/web/src/features/fba/slices/provincialSummarySlice.ts b/web/apps/wps-web/src/features/fba/slices/provincialSummarySlice.ts similarity index 100% rename from web/src/features/fba/slices/provincialSummarySlice.ts rename to web/apps/wps-web/src/features/fba/slices/provincialSummarySlice.ts diff --git a/web/src/features/fba/slices/runDatesSlice.test.ts b/web/apps/wps-web/src/features/fba/slices/runDatesSlice.test.ts similarity index 100% rename from web/src/features/fba/slices/runDatesSlice.test.ts rename to web/apps/wps-web/src/features/fba/slices/runDatesSlice.test.ts diff --git a/web/src/features/fba/slices/runDatesSlice.ts b/web/apps/wps-web/src/features/fba/slices/runDatesSlice.ts similarity index 100% rename from web/src/features/fba/slices/runDatesSlice.ts rename to web/apps/wps-web/src/features/fba/slices/runDatesSlice.ts diff --git a/web/src/features/fba/slices/valueAtCoordinateSlice.ts b/web/apps/wps-web/src/features/fba/slices/valueAtCoordinateSlice.ts similarity index 100% rename from web/src/features/fba/slices/valueAtCoordinateSlice.ts rename to web/apps/wps-web/src/features/fba/slices/valueAtCoordinateSlice.ts diff --git a/web/src/features/fbaCalculator/RowManager.ts b/web/apps/wps-web/src/features/fbaCalculator/RowManager.ts similarity index 100% rename from web/src/features/fbaCalculator/RowManager.ts rename to web/apps/wps-web/src/features/fbaCalculator/RowManager.ts diff --git a/web/src/features/fbaCalculator/components/CriticalHoursCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/CriticalHoursCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/CriticalHoursCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/CriticalHoursCell.tsx diff --git a/web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/CrownFractionBurnedCell.tsx diff --git a/web/src/features/fbaCalculator/components/ErrorAlert.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/ErrorAlert.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/ErrorAlert.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/ErrorAlert.tsx diff --git a/web/src/features/fbaCalculator/components/FBAProgressRow.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBAProgressRow.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBAProgressRow.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBAProgressRow.tsx diff --git a/web/src/features/fbaCalculator/components/FBATable.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx similarity index 99% rename from web/src/features/fbaCalculator/components/FBATable.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx index 24b93b75cd..09c8f59d9c 100644 --- a/web/src/features/fbaCalculator/components/FBATable.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/FBATable.tsx @@ -30,7 +30,7 @@ import { useLocation, useNavigate } from 'react-router-dom' import { rowShouldUpdate, isWindSpeedInvalid, isPrecipInvalid } from 'features/fbaCalculator/validation' import TextDisplayCell from 'features/fbaCalculator/components/TextDisplayCell' import FixedDecimalNumberCell from 'features/fbaCalculator/components/FixedDecimalNumberCell' -import HFICell from 'components/HFICell' +import HFICell from './HFICell' import CrownFractionBurnedCell from 'features/fbaCalculator/components/CrownFractionBurnedCell' import CriticalHoursCell from 'features/fbaCalculator/components/CriticalHoursCell' import StatusCell from 'features/fbaCalculator/components/StatusCell' @@ -41,7 +41,7 @@ import StickyCell from 'components/StickyCell' import FBATableHead from 'features/fbaCalculator/components/FBATableHead' import FireTable from 'components/FireTable' import FBATableInstructions from 'features/fbaCalculator/components/FBATableInstructions' -import FilterColumnsModal from 'components/FilterColumnsModal' +import FilterColumnsModal from './FilterColumnsModal' import WPSDatePicker from 'components/WPSDatePicker' import { AppDispatch } from 'app/store' import { DataTableCell } from 'features/hfiCalculator/components/StyledPlanningAreaComponents' diff --git a/web/src/features/fbaCalculator/components/FBATableHead.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATableHead.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBATableHead.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATableHead.tsx diff --git a/web/src/features/fbaCalculator/components/FBATableInstructions.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FBATableInstructions.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FBATableInstructions.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FBATableInstructions.tsx diff --git a/web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FbaAboutDataContent.tsx diff --git a/web/src/components/FilterColumnsModal.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FilterColumnsModal.tsx similarity index 100% rename from web/src/components/FilterColumnsModal.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FilterColumnsModal.tsx diff --git a/web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FixedDecimalNumberCell.tsx diff --git a/web/src/features/fbaCalculator/components/FuelTypeCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/FuelTypeCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/FuelTypeCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/FuelTypeCell.tsx diff --git a/web/src/features/fbaCalculator/components/GrassCureCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/GrassCureCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/GrassCureCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/GrassCureCell.tsx diff --git a/web/src/components/HFICell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx similarity index 94% rename from web/src/components/HFICell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx index 344a4d52c8..40064678ae 100644 --- a/web/src/components/HFICell.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/HFICell.tsx @@ -1,7 +1,7 @@ import { TableCell } from '@mui/material' import { styled } from '@mui/material/styles' import React from 'react' -import FixedDecimalNumberCell from 'features/fbaCalculator/components/FixedDecimalNumberCell' +import FixedDecimalNumberCell from './FixedDecimalNumberCell' import { isNull, isUndefined } from 'lodash' const PREFIX = 'HFICell' diff --git a/web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/LoadingIndicatorCell.tsx diff --git a/web/src/features/fbaCalculator/components/PrecipCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/PrecipCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/PrecipCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/PrecipCell.tsx diff --git a/web/src/features/fbaCalculator/components/SelectionCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/SelectionCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/SelectionCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/SelectionCell.tsx diff --git a/web/src/features/fbaCalculator/components/StatusCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/StatusCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/StatusCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/StatusCell.tsx diff --git a/web/src/features/fbaCalculator/components/TableHeader.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/TableHeader.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/TableHeader.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/TableHeader.tsx diff --git a/web/src/features/fbaCalculator/components/TextDisplayCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/TextDisplayCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/TextDisplayCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/TextDisplayCell.tsx diff --git a/web/src/features/fbaCalculator/components/WeatherStationCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/WeatherStationCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/WeatherStationCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/WeatherStationCell.tsx diff --git a/web/src/features/fbaCalculator/components/WindSpeedCell.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/WindSpeedCell.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/WindSpeedCell.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/WindSpeedCell.tsx diff --git a/web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/fbaProgressRow.test.tsx diff --git a/web/src/features/fbaCalculator/components/grassCureCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/grassCureCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/grassCureCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/grassCureCell.test.tsx diff --git a/web/src/components/hfiCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx similarity index 98% rename from web/src/components/hfiCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx index 94ec2fb14d..9e29b06d1e 100644 --- a/web/src/components/hfiCell.test.tsx +++ b/web/apps/wps-web/src/features/fbaCalculator/components/hfiCell.test.tsx @@ -1,6 +1,6 @@ import { TableContainer, Table, TableBody, TableRow } from '@mui/material' import { render } from '@testing-library/react' -import HFICell from 'components/HFICell' +import HFICell from './HFICell' describe('HFICell', () => { it('should render without color when HFI is undefined', () => { diff --git a/web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/loadingIndicatorCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/precipCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/precipCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/precipCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/precipCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/selectionCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/selectionCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/selectionCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/selectionCell.test.tsx diff --git a/web/src/features/fbaCalculator/components/windSpeedCell.test.tsx b/web/apps/wps-web/src/features/fbaCalculator/components/windSpeedCell.test.tsx similarity index 100% rename from web/src/features/fbaCalculator/components/windSpeedCell.test.tsx rename to web/apps/wps-web/src/features/fbaCalculator/components/windSpeedCell.test.tsx diff --git a/web/src/features/fbaCalculator/fuelTypes.ts b/web/apps/wps-web/src/features/fbaCalculator/fuelTypes.ts similarity index 100% rename from web/src/features/fbaCalculator/fuelTypes.ts rename to web/apps/wps-web/src/features/fbaCalculator/fuelTypes.ts diff --git a/web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx b/web/apps/wps-web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx similarity index 100% rename from web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx rename to web/apps/wps-web/src/features/fbaCalculator/pages/FireBehaviourCalculatorPage.tsx diff --git a/web/src/features/fbaCalculator/rowManager.test.ts b/web/apps/wps-web/src/features/fbaCalculator/rowManager.test.ts similarity index 100% rename from web/src/features/fbaCalculator/rowManager.test.ts rename to web/apps/wps-web/src/features/fbaCalculator/rowManager.test.ts diff --git a/web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts b/web/apps/wps-web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts similarity index 100% rename from web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts rename to web/apps/wps-web/src/features/fbaCalculator/slices/fbaCalculatorSlice.ts diff --git a/web/src/features/fbaCalculator/tableState.ts b/web/apps/wps-web/src/features/fbaCalculator/tableState.ts similarity index 100% rename from web/src/features/fbaCalculator/tableState.ts rename to web/apps/wps-web/src/features/fbaCalculator/tableState.ts diff --git a/web/src/features/fbaCalculator/utils.ts b/web/apps/wps-web/src/features/fbaCalculator/utils.ts similarity index 100% rename from web/src/features/fbaCalculator/utils.ts rename to web/apps/wps-web/src/features/fbaCalculator/utils.ts diff --git a/web/src/features/fbaCalculator/validation.ts b/web/apps/wps-web/src/features/fbaCalculator/validation.ts similarity index 100% rename from web/src/features/fbaCalculator/validation.ts rename to web/apps/wps-web/src/features/fbaCalculator/validation.ts diff --git a/web/src/features/fireWatch/components/CreateFireWatch.tsx b/web/apps/wps-web/src/features/fireWatch/components/CreateFireWatch.tsx similarity index 100% rename from web/src/features/fireWatch/components/CreateFireWatch.tsx rename to web/apps/wps-web/src/features/fireWatch/components/CreateFireWatch.tsx diff --git a/web/src/features/fireWatch/components/DetailPanelContent.tsx b/web/apps/wps-web/src/features/fireWatch/components/DetailPanelContent.tsx similarity index 100% rename from web/src/features/fireWatch/components/DetailPanelContent.tsx rename to web/apps/wps-web/src/features/fireWatch/components/DetailPanelContent.tsx diff --git a/web/src/features/fireWatch/components/FireWatchDashboard.tsx b/web/apps/wps-web/src/features/fireWatch/components/FireWatchDashboard.tsx similarity index 100% rename from web/src/features/fireWatch/components/FireWatchDashboard.tsx rename to web/apps/wps-web/src/features/fireWatch/components/FireWatchDashboard.tsx diff --git a/web/src/features/fireWatch/components/FireWatchDetailsModal.tsx b/web/apps/wps-web/src/features/fireWatch/components/FireWatchDetailsModal.tsx similarity index 100% rename from web/src/features/fireWatch/components/FireWatchDetailsModal.tsx rename to web/apps/wps-web/src/features/fireWatch/components/FireWatchDetailsModal.tsx diff --git a/web/src/features/fireWatch/components/MenuHeader.tsx b/web/apps/wps-web/src/features/fireWatch/components/MenuHeader.tsx similarity index 100% rename from web/src/features/fireWatch/components/MenuHeader.tsx rename to web/apps/wps-web/src/features/fireWatch/components/MenuHeader.tsx diff --git a/web/src/features/fireWatch/components/NavigationDrawer.tsx b/web/apps/wps-web/src/features/fireWatch/components/NavigationDrawer.tsx similarity index 100% rename from web/src/features/fireWatch/components/NavigationDrawer.tsx rename to web/apps/wps-web/src/features/fireWatch/components/NavigationDrawer.tsx diff --git a/web/src/features/fireWatch/components/OptionalHeading.tsx b/web/apps/wps-web/src/features/fireWatch/components/OptionalHeading.tsx similarity index 100% rename from web/src/features/fireWatch/components/OptionalHeading.tsx rename to web/apps/wps-web/src/features/fireWatch/components/OptionalHeading.tsx diff --git a/web/src/features/fireWatch/components/detailPanelContent.test.tsx b/web/apps/wps-web/src/features/fireWatch/components/detailPanelContent.test.tsx similarity index 100% rename from web/src/features/fireWatch/components/detailPanelContent.test.tsx rename to web/apps/wps-web/src/features/fireWatch/components/detailPanelContent.test.tsx diff --git a/web/src/features/fireWatch/components/fireWatchDashboard.test.tsx b/web/apps/wps-web/src/features/fireWatch/components/fireWatchDashboard.test.tsx similarity index 100% rename from web/src/features/fireWatch/components/fireWatchDashboard.test.tsx rename to web/apps/wps-web/src/features/fireWatch/components/fireWatchDashboard.test.tsx diff --git a/web/src/features/fireWatch/components/steps/CompleteStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/CompleteStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/CompleteStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/CompleteStep.tsx diff --git a/web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/FireBehaviourIndicesStep.tsx diff --git a/web/src/features/fireWatch/components/steps/FuelStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/FuelStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/FuelStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/FuelStep.tsx diff --git a/web/src/features/fireWatch/components/steps/InfoStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/InfoStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/InfoStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/InfoStep.tsx diff --git a/web/src/features/fireWatch/components/steps/LocationStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/LocationStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/LocationStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/LocationStep.tsx diff --git a/web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/ReviewSubmitStep.tsx diff --git a/web/src/features/fireWatch/components/steps/SummaryTextLine.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/SummaryTextLine.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/SummaryTextLine.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/SummaryTextLine.tsx diff --git a/web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx b/web/apps/wps-web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx similarity index 100% rename from web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx rename to web/apps/wps-web/src/features/fireWatch/components/steps/WeatherParametersStep.tsx diff --git a/web/src/features/fireWatch/constants.ts b/web/apps/wps-web/src/features/fireWatch/constants.ts similarity index 100% rename from web/src/features/fireWatch/constants.ts rename to web/apps/wps-web/src/features/fireWatch/constants.ts diff --git a/web/src/features/fireWatch/fireWatchApi.ts b/web/apps/wps-web/src/features/fireWatch/fireWatchApi.ts similarity index 100% rename from web/src/features/fireWatch/fireWatchApi.ts rename to web/apps/wps-web/src/features/fireWatch/fireWatchApi.ts diff --git a/web/src/features/fireWatch/interfaces.ts b/web/apps/wps-web/src/features/fireWatch/interfaces.ts similarity index 100% rename from web/src/features/fireWatch/interfaces.ts rename to web/apps/wps-web/src/features/fireWatch/interfaces.ts diff --git a/web/src/features/fireWatch/pages/FireWatchPage.tsx b/web/apps/wps-web/src/features/fireWatch/pages/FireWatchPage.tsx similarity index 100% rename from web/src/features/fireWatch/pages/FireWatchPage.tsx rename to web/apps/wps-web/src/features/fireWatch/pages/FireWatchPage.tsx diff --git a/web/src/features/fireWatch/slices/burnForecastSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/burnForecastSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/burnForecastSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/burnForecastSlice.ts diff --git a/web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/fireWatchFireCentresSlice.ts diff --git a/web/src/features/fireWatch/slices/fireWatchSlice.ts b/web/apps/wps-web/src/features/fireWatch/slices/fireWatchSlice.ts similarity index 100% rename from web/src/features/fireWatch/slices/fireWatchSlice.ts rename to web/apps/wps-web/src/features/fireWatch/slices/fireWatchSlice.ts diff --git a/web/src/features/fireWatch/utils.ts b/web/apps/wps-web/src/features/fireWatch/utils.ts similarity index 100% rename from web/src/features/fireWatch/utils.ts rename to web/apps/wps-web/src/features/fireWatch/utils.ts diff --git a/web/src/features/fireWeather/components/AccuracyVariablePicker.tsx b/web/apps/wps-web/src/features/fireWeather/components/AccuracyVariablePicker.tsx similarity index 100% rename from web/src/features/fireWeather/components/AccuracyVariablePicker.tsx rename to web/apps/wps-web/src/features/fireWeather/components/AccuracyVariablePicker.tsx diff --git a/web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx b/web/apps/wps-web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx similarity index 100% rename from web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx rename to web/apps/wps-web/src/features/fireWeather/components/maps/FireIndicesVectorLayer.tsx diff --git a/web/src/features/fireWeather/components/maps/WeatherMap.tsx b/web/apps/wps-web/src/features/fireWeather/components/maps/WeatherMap.tsx similarity index 100% rename from web/src/features/fireWeather/components/maps/WeatherMap.tsx rename to web/apps/wps-web/src/features/fireWeather/components/maps/WeatherMap.tsx diff --git a/web/src/features/fireWeather/components/maps/constants.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/constants.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/constants.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/constants.ts diff --git a/web/src/features/fireWeather/components/maps/stationAccuracy.test.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.test.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/stationAccuracy.test.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.test.ts diff --git a/web/src/features/fireWeather/components/maps/stationAccuracy.ts b/web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.ts similarity index 100% rename from web/src/features/fireWeather/components/maps/stationAccuracy.ts rename to web/apps/wps-web/src/features/fireWeather/components/maps/stationAccuracy.ts diff --git a/web/src/features/hfiCalculator/components/AboutDataModal.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/AboutDataModal.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/AboutDataModal.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/AboutDataModal.tsx diff --git a/web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/BaseStationAttributeCells.tsx diff --git a/web/src/features/hfiCalculator/components/CalculatedCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/CalculatedCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/CalculatedCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/CalculatedCell.tsx diff --git a/web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/CalculatedPlanningAreaCells.tsx diff --git a/web/src/features/hfiCalculator/components/DailyHFICell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx similarity index 87% rename from web/src/features/hfiCalculator/components/DailyHFICell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx index 08e2a0092f..7ed221265c 100644 --- a/web/src/features/hfiCalculator/components/DailyHFICell.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/DailyHFICell.tsx @@ -1,4 +1,4 @@ -import HFICell from 'components/HFICell' +import HFICell from 'features/fbaCalculator/components/HFICell' import CalculatedCell from 'features/hfiCalculator/components/CalculatedCell' import React from 'react' diff --git a/web/src/features/hfiCalculator/components/DailyViewTable.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DailyViewTable.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DailyViewTable.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DailyViewTable.tsx diff --git a/web/src/features/hfiCalculator/components/DangerClassCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DangerClassCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DangerClassCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DangerClassCell.tsx diff --git a/web/src/features/hfiCalculator/components/DayHeaders.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayHeaders.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.test.tsx diff --git a/web/src/features/hfiCalculator/components/DayHeaders.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayHeaders.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayHeaders.tsx diff --git a/web/src/features/hfiCalculator/components/DayIndexHeaders.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DayIndexHeaders.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DayIndexHeaders.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DayIndexHeaders.tsx diff --git a/web/src/features/hfiCalculator/components/DownloadPDFButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/DownloadPDFButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/DownloadPDFButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/DownloadPDFButton.tsx diff --git a/web/src/features/hfiCalculator/components/EmptyFireCentre.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/EmptyFireCentre.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/EmptyFireCentre.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/EmptyFireCentre.tsx diff --git a/web/src/features/hfiCalculator/components/EmptyStaticCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/EmptyStaticCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/EmptyStaticCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/EmptyStaticCells.tsx diff --git a/web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ErrorIconWithTooltip.tsx diff --git a/web/src/features/hfiCalculator/components/FireCentreCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireCentreCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireCentreCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireCentreCell.tsx diff --git a/web/src/features/hfiCalculator/components/FireCentreDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireCentreDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireCentreDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireCentreDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/FireStartsCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireStartsCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireStartsCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireStartsCell.tsx diff --git a/web/src/features/hfiCalculator/components/FireStartsDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FireStartsDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FireStartsDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FireStartsDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/FuelTypeDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/GrassCureCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/GrassCureCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/GrassCureCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/GrassCureCell.tsx diff --git a/web/src/features/hfiCalculator/components/HFIErrorAlert.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFIErrorAlert.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFIErrorAlert.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFIErrorAlert.tsx diff --git a/web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFILoadingDataContainer.tsx diff --git a/web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFIPageSubHeader.tsx diff --git a/web/src/features/hfiCalculator/components/HFISuccessAlert.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HFISuccessAlert.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HFISuccessAlert.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HFISuccessAlert.tsx diff --git a/web/src/features/hfiCalculator/components/HeaderRowCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HeaderRowCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HeaderRowCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HeaderRowCell.tsx diff --git a/web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/HighestDailyFIGCell.tsx diff --git a/web/src/features/hfiCalculator/components/IntensityGroupCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/IntensityGroupCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/IntensityGroupCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/IntensityGroupCell.tsx diff --git a/web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/LastUpdatedHeader.tsx diff --git a/web/src/features/hfiCalculator/components/LoadingBackdrop.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/LoadingBackdrop.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/LoadingBackdrop.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/LoadingBackdrop.tsx diff --git a/web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/MeanIntensityGroupRollup.tsx diff --git a/web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/MeanPrepLevelCell.tsx diff --git a/web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PlanningAreaReadyToggle.tsx diff --git a/web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PrepDateRangeSelector.tsx diff --git a/web/src/features/hfiCalculator/components/PrepLevelCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/PrepLevelCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/PrepLevelCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/PrepLevelCell.tsx diff --git a/web/src/features/hfiCalculator/components/RequiredDataCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/RequiredDataCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/RequiredDataCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/RequiredDataCell.tsx diff --git a/web/src/features/hfiCalculator/components/StaticCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx similarity index 97% rename from web/src/features/hfiCalculator/components/StaticCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx index 5e4fb9c9c7..8310d43a7f 100644 --- a/web/src/features/hfiCalculator/components/StaticCells.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/StaticCells.tsx @@ -1,6 +1,6 @@ import { TableCell } from '@mui/material' import { FuelType, StationDaily, WeatherStation } from 'api/hfiCalculatorAPI' -import HFICell from 'components/HFICell' +import HFICell from 'features/fbaCalculator/components/HFICell' import EmptyStaticCells from 'features/hfiCalculator/components/EmptyStaticCells' import HighestDailyFIGCell from 'features/hfiCalculator/components/HighestDailyFIGCell' import IntensityGroupCell from 'features/hfiCalculator/components/IntensityGroupCell' diff --git a/web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StationDataHeaderCells.tsx diff --git a/web/src/features/hfiCalculator/components/StationSelectCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StationSelectCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StationSelectCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StationSelectCell.tsx diff --git a/web/src/features/hfiCalculator/components/StatusCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StatusCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StatusCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StatusCell.tsx diff --git a/web/src/features/hfiCalculator/components/StyledFireComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledFireComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledFireComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledFireComponents.tsx diff --git a/web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledPlanningAreaComponents.tsx diff --git a/web/src/features/hfiCalculator/components/StyledTableComponents.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/StyledTableComponents.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/StyledTableComponents.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/StyledTableComponents.tsx diff --git a/web/src/features/hfiCalculator/components/ViewSwitcher.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcher.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ViewSwitcher.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcher.tsx diff --git a/web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/ViewSwitcherToggles.tsx diff --git a/web/src/features/hfiCalculator/components/WeeklyROSCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WeeklyROSCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WeeklyROSCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WeeklyROSCell.tsx diff --git a/web/src/features/hfiCalculator/components/WeeklyViewTable.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WeeklyViewTable.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WeeklyViewTable.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WeeklyViewTable.tsx diff --git a/web/src/features/hfiCalculator/components/WindDirectionCell.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/WindDirectionCell.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/WindDirectionCell.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/WindDirectionCell.tsx diff --git a/web/src/features/hfiCalculator/components/dailyHFICell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/dailyHFICell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/dailyHFICell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/dailyHFICell.test.tsx diff --git a/web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/dayIndexHeaders.test.tsx diff --git a/web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/emptyFireCentre.test.tsx diff --git a/web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/fireStartsDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/fuelTypeDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/grassCureCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/grassCureCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/grassCureCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/grassCureCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/headerRowCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/headerRowCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/headerRowCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/headerRowCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/hfiErrorAlert.test.tsx diff --git a/web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/hfiLoadingDataView.test.tsx diff --git a/web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/intensityGroupCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/meanIntensityGroupRollup.test.tsx diff --git a/web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/meanPrepLevelCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/planningAreaReadyToggle.test.tsx diff --git a/web/src/features/hfiCalculator/components/prepLevelCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/prepLevelCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/prepLevelCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/prepLevelCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/staticCells.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/staticCells.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/staticCells.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/staticCells.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminCancelButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminFuelTypesDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminRemoveButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/AdminStationDropdown.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ExistingStationList.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/LoggedInStatus.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx similarity index 92% rename from web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx index f22df0e8c0..1fef5f8cd5 100644 --- a/web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx +++ b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/ManageStationsModal.tsx @@ -6,7 +6,8 @@ import { useDispatch, useSelector } from 'react-redux' import { selectFireWeatherStations, selectHFICalculatorState } from 'app/rootReducer' import { setStationsUpdatedFailed, StationInfo } from 'features/hfiCalculator/slices/hfiCalculatorSlice' import { AppDispatch } from 'app/store' -import { FuelType, PlanningArea } from 'api/hfiCalculatorAPI' +import { BasicPlanningArea, BasicWFWXStation, FuelType, PlanningArea, StationAdminRow } from 'api/hfiCalculatorAPI' +export type { BasicPlanningArea, BasicWFWXStation, StationAdminRow } from 'api/hfiCalculatorAPI' import { groupBy, isNull, isUndefined, sortBy } from 'lodash' import { fetchWxStations } from 'features/stations/slices/stationsSlice' import { getStations, StationSource } from 'api/stationAPI' @@ -23,28 +24,12 @@ const CloseIconButton = styled(IconButton, { right: '0px' }) -export interface BasicPlanningArea { - id: number - name: string -} -export interface BasicWFWXStation { - code: number - name: string -} - export interface AddStationOptions { planningAreaOptions: BasicPlanningArea[] stationOptions: BasicWFWXStation[] fuelTypeOptions: FuelType[] } -export interface StationAdminRow { - planningAreaId: number - rowId: number - station?: BasicWFWXStation - fuelType?: Pick -} - export interface AddStationModalProps { testId?: string planningAreas?: PlanningArea[] diff --git a/web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/NewStationList.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/PlanningAreaAdmin.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/SaveStationUpdatesButton.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/StationListAdmin.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminFuelTypeDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminRemoveButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/adminStationDropdown.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/loggedInStatus.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/manageStationsButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/planningAreaAdmin.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationAdmin/saveStationUpdatesButton.test.tsx diff --git a/web/src/features/hfiCalculator/components/stationSelectCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/stationSelectCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/stationSelectCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/stationSelectCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/statusCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/statusCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/statusCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/statusCell.test.tsx diff --git a/web/src/features/hfiCalculator/components/testHelpers.ts b/web/apps/wps-web/src/features/hfiCalculator/components/testHelpers.ts similarity index 100% rename from web/src/features/hfiCalculator/components/testHelpers.ts rename to web/apps/wps-web/src/features/hfiCalculator/components/testHelpers.ts diff --git a/web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx b/web/apps/wps-web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx similarity index 100% rename from web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx rename to web/apps/wps-web/src/features/hfiCalculator/components/weeklyRosCell.test.tsx diff --git a/web/src/features/hfiCalculator/constants.ts b/web/apps/wps-web/src/features/hfiCalculator/constants.ts similarity index 100% rename from web/src/features/hfiCalculator/constants.ts rename to web/apps/wps-web/src/features/hfiCalculator/constants.ts diff --git a/web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx b/web/apps/wps-web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx similarity index 100% rename from web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx rename to web/apps/wps-web/src/features/hfiCalculator/pages/HfiCalculatorPage.tsx diff --git a/web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.test.ts diff --git a/web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiCalculatorSlice.ts diff --git a/web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.test.ts diff --git a/web/src/features/hfiCalculator/slices/hfiReadySlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/hfiReadySlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/hfiReadySlice.ts diff --git a/web/src/features/hfiCalculator/slices/stationsSlice.ts b/web/apps/wps-web/src/features/hfiCalculator/slices/stationsSlice.ts similarity index 100% rename from web/src/features/hfiCalculator/slices/stationsSlice.ts rename to web/apps/wps-web/src/features/hfiCalculator/slices/stationsSlice.ts diff --git a/web/src/features/hfiCalculator/util.ts b/web/apps/wps-web/src/features/hfiCalculator/util.ts similarity index 100% rename from web/src/features/hfiCalculator/util.ts rename to web/apps/wps-web/src/features/hfiCalculator/util.ts diff --git a/web/src/features/hfiCalculator/validation.ts b/web/apps/wps-web/src/features/hfiCalculator/validation.ts similarity index 100% rename from web/src/features/hfiCalculator/validation.ts rename to web/apps/wps-web/src/features/hfiCalculator/validation.ts diff --git a/web/src/features/landingPage/components/BetaTag.tsx b/web/apps/wps-web/src/features/landingPage/components/BetaTag.tsx similarity index 100% rename from web/src/features/landingPage/components/BetaTag.tsx rename to web/apps/wps-web/src/features/landingPage/components/BetaTag.tsx diff --git a/web/src/features/landingPage/components/Footer.tsx b/web/apps/wps-web/src/features/landingPage/components/Footer.tsx similarity index 100% rename from web/src/features/landingPage/components/Footer.tsx rename to web/apps/wps-web/src/features/landingPage/components/Footer.tsx diff --git a/web/src/features/landingPage/components/Sidebar.tsx b/web/apps/wps-web/src/features/landingPage/components/Sidebar.tsx similarity index 100% rename from web/src/features/landingPage/components/Sidebar.tsx rename to web/apps/wps-web/src/features/landingPage/components/Sidebar.tsx diff --git a/web/src/features/landingPage/components/SidebarToolList.tsx b/web/apps/wps-web/src/features/landingPage/components/SidebarToolList.tsx similarity index 100% rename from web/src/features/landingPage/components/SidebarToolList.tsx rename to web/apps/wps-web/src/features/landingPage/components/SidebarToolList.tsx diff --git a/web/src/features/landingPage/components/Subheading.tsx b/web/apps/wps-web/src/features/landingPage/components/Subheading.tsx similarity index 100% rename from web/src/features/landingPage/components/Subheading.tsx rename to web/apps/wps-web/src/features/landingPage/components/Subheading.tsx diff --git a/web/src/features/landingPage/components/ToolCard.tsx b/web/apps/wps-web/src/features/landingPage/components/ToolCard.tsx similarity index 100% rename from web/src/features/landingPage/components/ToolCard.tsx rename to web/apps/wps-web/src/features/landingPage/components/ToolCard.tsx diff --git a/web/src/features/landingPage/components/ToolCards.tsx b/web/apps/wps-web/src/features/landingPage/components/ToolCards.tsx similarity index 100% rename from web/src/features/landingPage/components/ToolCards.tsx rename to web/apps/wps-web/src/features/landingPage/components/ToolCards.tsx diff --git a/web/src/features/landingPage/images/collaboardIcon.svg b/web/apps/wps-web/src/features/landingPage/images/collaboardIcon.svg similarity index 100% rename from web/src/features/landingPage/images/collaboardIcon.svg rename to web/apps/wps-web/src/features/landingPage/images/collaboardIcon.svg diff --git a/web/src/features/landingPage/images/msTeams.svg b/web/apps/wps-web/src/features/landingPage/images/msTeams.svg similarity index 100% rename from web/src/features/landingPage/images/msTeams.svg rename to web/apps/wps-web/src/features/landingPage/images/msTeams.svg diff --git a/web/src/features/landingPage/pages/LandingPage.tsx b/web/apps/wps-web/src/features/landingPage/pages/LandingPage.tsx similarity index 100% rename from web/src/features/landingPage/pages/LandingPage.tsx rename to web/apps/wps-web/src/features/landingPage/pages/LandingPage.tsx diff --git a/web/src/features/landingPage/toolInfo.tsx b/web/apps/wps-web/src/features/landingPage/toolInfo.tsx similarity index 100% rename from web/src/features/landingPage/toolInfo.tsx rename to web/apps/wps-web/src/features/landingPage/toolInfo.tsx diff --git a/web/src/features/map/Map.tsx b/web/apps/wps-web/src/features/map/Map.tsx similarity index 100% rename from web/src/features/map/Map.tsx rename to web/apps/wps-web/src/features/map/Map.tsx diff --git a/web/src/features/map/TileLayer.tsx b/web/apps/wps-web/src/features/map/TileLayer.tsx similarity index 100% rename from web/src/features/map/TileLayer.tsx rename to web/apps/wps-web/src/features/map/TileLayer.tsx diff --git a/web/src/features/map/VectorLayer.tsx b/web/apps/wps-web/src/features/map/VectorLayer.tsx similarity index 100% rename from web/src/features/map/VectorLayer.tsx rename to web/apps/wps-web/src/features/map/VectorLayer.tsx diff --git a/web/src/features/moreCast2/components/ActualCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ActualCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ActualCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ActualCell.tsx diff --git a/web/src/features/moreCast2/components/ColumnDefBuilder.tsx b/web/apps/wps-web/src/features/moreCast2/components/ColumnDefBuilder.tsx similarity index 100% rename from web/src/features/moreCast2/components/ColumnDefBuilder.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ColumnDefBuilder.tsx diff --git a/web/src/features/moreCast2/components/DataGridColumns.tsx b/web/apps/wps-web/src/features/moreCast2/components/DataGridColumns.tsx similarity index 100% rename from web/src/features/moreCast2/components/DataGridColumns.tsx rename to web/apps/wps-web/src/features/moreCast2/components/DataGridColumns.tsx diff --git a/web/src/features/moreCast2/components/EditInputCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/EditInputCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/EditInputCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/EditInputCell.tsx diff --git a/web/src/features/moreCast2/components/ForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ForecastDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastDataGrid.tsx diff --git a/web/src/features/moreCast2/components/ForecastHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastHeader.tsx diff --git a/web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ForecastSummaryDataGrid.tsx diff --git a/web/src/features/moreCast2/components/GridComponentRenderer.tsx b/web/apps/wps-web/src/features/moreCast2/components/GridComponentRenderer.tsx similarity index 100% rename from web/src/features/moreCast2/components/GridComponentRenderer.tsx rename to web/apps/wps-web/src/features/moreCast2/components/GridComponentRenderer.tsx diff --git a/web/src/features/moreCast2/components/GroupHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/GroupHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/GroupHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/GroupHeader.tsx diff --git a/web/src/features/moreCast2/components/InvalidCellToolTip.tsx b/web/apps/wps-web/src/features/moreCast2/components/InvalidCellToolTip.tsx similarity index 100% rename from web/src/features/moreCast2/components/InvalidCellToolTip.tsx rename to web/apps/wps-web/src/features/moreCast2/components/InvalidCellToolTip.tsx diff --git a/web/src/features/moreCast2/components/ModelHeader.tsx b/web/apps/wps-web/src/features/moreCast2/components/ModelHeader.tsx similarity index 100% rename from web/src/features/moreCast2/components/ModelHeader.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ModelHeader.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2Column.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2Column.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2Column.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2Column.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2DateRangePicker.tsx diff --git a/web/src/features/moreCast2/components/MoreCast2Snackbar.tsx b/web/apps/wps-web/src/features/moreCast2/components/MoreCast2Snackbar.tsx similarity index 100% rename from web/src/features/moreCast2/components/MoreCast2Snackbar.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MoreCast2Snackbar.tsx diff --git a/web/src/features/moreCast2/components/MorecastAboutDataContent.tsx b/web/apps/wps-web/src/features/moreCast2/components/MorecastAboutDataContent.tsx similarity index 100% rename from web/src/features/moreCast2/components/MorecastAboutDataContent.tsx rename to web/apps/wps-web/src/features/moreCast2/components/MorecastAboutDataContent.tsx diff --git a/web/src/features/moreCast2/components/ResetForecastButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/ResetForecastButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/ResetForecastButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ResetForecastButton.tsx diff --git a/web/src/features/moreCast2/components/SaveForecastButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/SaveForecastButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/SaveForecastButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/SaveForecastButton.tsx diff --git a/web/src/features/moreCast2/components/SelectableButton.tsx b/web/apps/wps-web/src/features/moreCast2/components/SelectableButton.tsx similarity index 100% rename from web/src/features/moreCast2/components/SelectableButton.tsx rename to web/apps/wps-web/src/features/moreCast2/components/SelectableButton.tsx diff --git a/web/src/features/moreCast2/components/StationGroupDropdown.tsx b/web/apps/wps-web/src/features/moreCast2/components/StationGroupDropdown.tsx similarity index 100% rename from web/src/features/moreCast2/components/StationGroupDropdown.tsx rename to web/apps/wps-web/src/features/moreCast2/components/StationGroupDropdown.tsx diff --git a/web/src/features/moreCast2/components/StationPanel.tsx b/web/apps/wps-web/src/features/moreCast2/components/StationPanel.tsx similarity index 100% rename from web/src/features/moreCast2/components/StationPanel.tsx rename to web/apps/wps-web/src/features/moreCast2/components/StationPanel.tsx diff --git a/web/src/features/moreCast2/components/TabbedDataGrid.tsx b/web/apps/wps-web/src/features/moreCast2/components/TabbedDataGrid.tsx similarity index 100% rename from web/src/features/moreCast2/components/TabbedDataGrid.tsx rename to web/apps/wps-web/src/features/moreCast2/components/TabbedDataGrid.tsx diff --git a/web/src/features/moreCast2/components/ValidatedCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedGrassCureForecastCell.tsx diff --git a/web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx b/web/apps/wps-web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx similarity index 100% rename from web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx rename to web/apps/wps-web/src/features/moreCast2/components/ValidatedWindDirectionForecastCell.tsx diff --git a/web/src/features/moreCast2/components/WeatherModelDropdown.tsx b/web/apps/wps-web/src/features/moreCast2/components/WeatherModelDropdown.tsx similarity index 100% rename from web/src/features/moreCast2/components/WeatherModelDropdown.tsx rename to web/apps/wps-web/src/features/moreCast2/components/WeatherModelDropdown.tsx diff --git a/web/src/features/moreCast2/components/colDefBuilder.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/colDefBuilder.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/colDefBuilder.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/colDefBuilder.test.tsx diff --git a/web/src/features/moreCast2/components/editInputCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/editInputCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/editInputCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/editInputCell.test.tsx diff --git a/web/src/features/moreCast2/components/forecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/forecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/forecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/forecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/forecastHeader.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/forecastHeader.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/forecastHeader.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/forecastHeader.test.tsx diff --git a/web/src/features/moreCast2/components/gridComponentRenderer.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/gridComponentRenderer.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/gridComponentRenderer.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/gridComponentRenderer.test.tsx diff --git a/web/src/features/moreCast2/components/modelHeader.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/modelHeader.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/modelHeader.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/modelHeader.test.tsx diff --git a/web/src/features/moreCast2/components/moreCast2Column.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/moreCast2Column.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/moreCast2Column.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/moreCast2Column.test.tsx diff --git a/web/src/features/moreCast2/components/resetForecastButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/resetForecastButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/resetForecastButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/resetForecastButton.test.tsx diff --git a/web/src/features/moreCast2/components/saveForecastButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/saveForecastButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/saveForecastButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/saveForecastButton.test.tsx diff --git a/web/src/features/moreCast2/components/selectableButton.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/selectableButton.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/selectableButton.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/selectableButton.test.tsx diff --git a/web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/stationGroupsDropdown.test.tsx diff --git a/web/src/features/moreCast2/components/stationPanel.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/stationPanel.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/stationPanel.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/stationPanel.test.tsx diff --git a/web/src/features/moreCast2/components/tabbedDataGrid.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/tabbedDataGrid.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/tabbedDataGrid.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/tabbedDataGrid.test.tsx diff --git a/web/src/features/moreCast2/components/testHelper.tsx b/web/apps/wps-web/src/features/moreCast2/components/testHelper.tsx similarity index 100% rename from web/src/features/moreCast2/components/testHelper.tsx rename to web/apps/wps-web/src/features/moreCast2/components/testHelper.tsx diff --git a/web/src/features/moreCast2/components/validatedForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedGrassCureForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/validatedWindDirectionForecastCell.test.tsx diff --git a/web/src/features/moreCast2/components/weatherModelDropdown.test.tsx b/web/apps/wps-web/src/features/moreCast2/components/weatherModelDropdown.test.tsx similarity index 100% rename from web/src/features/moreCast2/components/weatherModelDropdown.test.tsx rename to web/apps/wps-web/src/features/moreCast2/components/weatherModelDropdown.test.tsx diff --git a/web/src/features/moreCast2/forecastDraft.test.ts b/web/apps/wps-web/src/features/moreCast2/forecastDraft.test.ts similarity index 100% rename from web/src/features/moreCast2/forecastDraft.test.ts rename to web/apps/wps-web/src/features/moreCast2/forecastDraft.test.ts diff --git a/web/src/features/moreCast2/forecastDraft.ts b/web/apps/wps-web/src/features/moreCast2/forecastDraft.ts similarity index 100% rename from web/src/features/moreCast2/forecastDraft.ts rename to web/apps/wps-web/src/features/moreCast2/forecastDraft.ts diff --git a/web/src/features/moreCast2/interfaces.ts b/web/apps/wps-web/src/features/moreCast2/interfaces.ts similarity index 92% rename from web/src/features/moreCast2/interfaces.ts rename to web/apps/wps-web/src/features/moreCast2/interfaces.ts index 8c5c88bbc0..32fa4d1d6f 100644 --- a/web/src/features/moreCast2/interfaces.ts +++ b/web/apps/wps-web/src/features/moreCast2/interfaces.ts @@ -1,24 +1,13 @@ import { DateTime } from 'luxon' import { ModelType } from 'api/moreCast2API' +export type { MoreCast2ForecastRow } from 'api/moreCast2API' + export interface PredictionItem { choice: ModelType value: number } -export interface MoreCast2ForecastRow { - id: string - forDate: DateTime - precip: PredictionItem - rh: PredictionItem - stationCode: number - stationName: string - temp: PredictionItem - windDirection: PredictionItem - windSpeed: PredictionItem - grassCuring: PredictionItem -} - export interface BaseRow { // Identity and date properties id: string diff --git a/web/src/features/moreCast2/pages/MoreCast2Page.tsx b/web/apps/wps-web/src/features/moreCast2/pages/MoreCast2Page.tsx similarity index 100% rename from web/src/features/moreCast2/pages/MoreCast2Page.tsx rename to web/apps/wps-web/src/features/moreCast2/pages/MoreCast2Page.tsx diff --git a/web/src/features/moreCast2/rowFilters.test.ts b/web/apps/wps-web/src/features/moreCast2/rowFilters.test.ts similarity index 100% rename from web/src/features/moreCast2/rowFilters.test.ts rename to web/apps/wps-web/src/features/moreCast2/rowFilters.test.ts diff --git a/web/src/features/moreCast2/rowFilters.ts b/web/apps/wps-web/src/features/moreCast2/rowFilters.ts similarity index 100% rename from web/src/features/moreCast2/rowFilters.ts rename to web/apps/wps-web/src/features/moreCast2/rowFilters.ts diff --git a/web/src/features/moreCast2/saveForecast.test.ts b/web/apps/wps-web/src/features/moreCast2/saveForecast.test.ts similarity index 100% rename from web/src/features/moreCast2/saveForecast.test.ts rename to web/apps/wps-web/src/features/moreCast2/saveForecast.test.ts diff --git a/web/src/features/moreCast2/saveForecasts.ts b/web/apps/wps-web/src/features/moreCast2/saveForecasts.ts similarity index 100% rename from web/src/features/moreCast2/saveForecasts.ts rename to web/apps/wps-web/src/features/moreCast2/saveForecasts.ts diff --git a/web/src/features/moreCast2/slices/dataSlice.test.ts b/web/apps/wps-web/src/features/moreCast2/slices/dataSlice.test.ts similarity index 100% rename from web/src/features/moreCast2/slices/dataSlice.test.ts rename to web/apps/wps-web/src/features/moreCast2/slices/dataSlice.test.ts diff --git a/web/src/features/moreCast2/slices/dataSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/dataSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/dataSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/dataSlice.ts diff --git a/web/src/features/moreCast2/slices/selectedStationsSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/selectedStationsSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/selectedStationsSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/selectedStationsSlice.ts diff --git a/web/src/features/moreCast2/slices/validInputSlice.test.ts b/web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.test.ts similarity index 100% rename from web/src/features/moreCast2/slices/validInputSlice.test.ts rename to web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.test.ts diff --git a/web/src/features/moreCast2/slices/validInputSlice.ts b/web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.ts similarity index 100% rename from web/src/features/moreCast2/slices/validInputSlice.ts rename to web/apps/wps-web/src/features/moreCast2/slices/validInputSlice.ts diff --git a/web/src/features/moreCast2/util.test.ts b/web/apps/wps-web/src/features/moreCast2/util.test.ts similarity index 100% rename from web/src/features/moreCast2/util.test.ts rename to web/apps/wps-web/src/features/moreCast2/util.test.ts diff --git a/web/src/features/moreCast2/util.ts b/web/apps/wps-web/src/features/moreCast2/util.ts similarity index 100% rename from web/src/features/moreCast2/util.ts rename to web/apps/wps-web/src/features/moreCast2/util.ts diff --git a/web/src/features/percentileCalculator/components/PercentileActionButtons.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileActionButtons.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileActionButtons.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileActionButtons.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileCalcDocumentation.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileMeanResultTable.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileResults.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileResults.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileResults.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileResults.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileSnackbar.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileSnackbar.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileSnackbar.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileSnackbar.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileStationResultTable.tsx diff --git a/web/src/features/percentileCalculator/components/PercentileTextfield.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/PercentileTextfield.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/PercentileTextfield.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/PercentileTextfield.tsx diff --git a/web/src/features/percentileCalculator/components/TimeRangeSlider.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/TimeRangeSlider.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/TimeRangeSlider.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/TimeRangeSlider.tsx diff --git a/web/src/features/percentileCalculator/components/WxStationDropdown.tsx b/web/apps/wps-web/src/features/percentileCalculator/components/WxStationDropdown.tsx similarity index 100% rename from web/src/features/percentileCalculator/components/WxStationDropdown.tsx rename to web/apps/wps-web/src/features/percentileCalculator/components/WxStationDropdown.tsx diff --git a/web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx b/web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx similarity index 100% rename from web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx rename to web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPage.tsx diff --git a/web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx b/web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx similarity index 100% rename from web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx rename to web/apps/wps-web/src/features/percentileCalculator/pages/PercentileCalculatorPageWithDisclaimer.tsx diff --git a/web/src/features/percentileCalculator/slices/percentilesSlice.ts b/web/apps/wps-web/src/features/percentileCalculator/slices/percentilesSlice.ts similarity index 100% rename from web/src/features/percentileCalculator/slices/percentilesSlice.ts rename to web/apps/wps-web/src/features/percentileCalculator/slices/percentilesSlice.ts diff --git a/web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.test.tsx diff --git a/web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/RasterTypeDropdown.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.test.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterErrorNotification.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterLegend.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterLegend.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterLegend.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterLegend.tsx diff --git a/web/src/features/sfmsInsights/components/map/RasterTooltip.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/RasterTooltip.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/RasterTooltip.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/RasterTooltip.tsx diff --git a/web/src/features/sfmsInsights/components/map/SFMSMap.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/SFMSMap.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/SFMSMap.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/SFMSMap.tsx diff --git a/web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.test.ts diff --git a/web/src/features/sfmsInsights/components/map/layerDefinitions.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerDefinitions.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerDefinitions.ts diff --git a/web/src/features/sfmsInsights/components/map/layerManager.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerManager.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.test.ts diff --git a/web/src/features/sfmsInsights/components/map/layerManager.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/layerManager.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/layerManager.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterConfig.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterConfig.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterConfig.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterConfig.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.test.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipHandler.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.test.ts diff --git a/web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/rasterTooltipInteraction.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.test.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsFeatureStylers.ts diff --git a/web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/components/map/sfmsMap.test.tsx diff --git a/web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx b/web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx similarity index 100% rename from web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx rename to web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.test.tsx diff --git a/web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx b/web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx similarity index 100% rename from web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx rename to web/apps/wps-web/src/features/sfmsInsights/pages/SFMSInsightsPage.tsx diff --git a/web/src/features/stations/slices/stationsSlice.ts b/web/apps/wps-web/src/features/stations/slices/stationsSlice.ts similarity index 100% rename from web/src/features/stations/slices/stationsSlice.ts rename to web/apps/wps-web/src/features/stations/slices/stationsSlice.ts diff --git a/web/src/fonts/BCSans-Bold.woff b/web/apps/wps-web/src/fonts/BCSans-Bold.woff similarity index 100% rename from web/src/fonts/BCSans-Bold.woff rename to web/apps/wps-web/src/fonts/BCSans-Bold.woff diff --git a/web/src/fonts/BCSans-Bold.woff2 b/web/apps/wps-web/src/fonts/BCSans-Bold.woff2 similarity index 100% rename from web/src/fonts/BCSans-Bold.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Bold.woff2 diff --git a/web/src/fonts/BCSans-BoldItalic.woff b/web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff similarity index 100% rename from web/src/fonts/BCSans-BoldItalic.woff rename to web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff diff --git a/web/src/fonts/BCSans-BoldItalic.woff2 b/web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff2 similarity index 100% rename from web/src/fonts/BCSans-BoldItalic.woff2 rename to web/apps/wps-web/src/fonts/BCSans-BoldItalic.woff2 diff --git a/web/src/fonts/BCSans-Italic.woff b/web/apps/wps-web/src/fonts/BCSans-Italic.woff similarity index 100% rename from web/src/fonts/BCSans-Italic.woff rename to web/apps/wps-web/src/fonts/BCSans-Italic.woff diff --git a/web/src/fonts/BCSans-Italic.woff2 b/web/apps/wps-web/src/fonts/BCSans-Italic.woff2 similarity index 100% rename from web/src/fonts/BCSans-Italic.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Italic.woff2 diff --git a/web/src/fonts/BCSans-Regular.woff b/web/apps/wps-web/src/fonts/BCSans-Regular.woff similarity index 100% rename from web/src/fonts/BCSans-Regular.woff rename to web/apps/wps-web/src/fonts/BCSans-Regular.woff diff --git a/web/src/fonts/BCSans-Regular.woff2 b/web/apps/wps-web/src/fonts/BCSans-Regular.woff2 similarity index 100% rename from web/src/fonts/BCSans-Regular.woff2 rename to web/apps/wps-web/src/fonts/BCSans-Regular.woff2 diff --git a/web/src/fonts/FONTLOG_README.txt b/web/apps/wps-web/src/fonts/FONTLOG_README.txt similarity index 100% rename from web/src/fonts/FONTLOG_README.txt rename to web/apps/wps-web/src/fonts/FONTLOG_README.txt diff --git a/web/src/fonts/LICENSE_OFL.txt b/web/apps/wps-web/src/fonts/LICENSE_OFL.txt similarity index 100% rename from web/src/fonts/LICENSE_OFL.txt rename to web/apps/wps-web/src/fonts/LICENSE_OFL.txt diff --git a/web/src/index.css b/web/apps/wps-web/src/index.css similarity index 100% rename from web/src/index.css rename to web/apps/wps-web/src/index.css diff --git a/web/src/index.tsx b/web/apps/wps-web/src/index.tsx similarity index 100% rename from web/src/index.tsx rename to web/apps/wps-web/src/index.tsx diff --git a/web/src/react-app-env.d.ts b/web/apps/wps-web/src/react-app-env.d.ts similarity index 100% rename from web/src/react-app-env.d.ts rename to web/apps/wps-web/src/react-app-env.d.ts diff --git a/web/src/setupTests.ts b/web/apps/wps-web/src/setupTests.ts similarity index 100% rename from web/src/setupTests.ts rename to web/apps/wps-web/src/setupTests.ts diff --git a/web/src/test/testUtils.ts b/web/apps/wps-web/src/test/testUtils.ts similarity index 100% rename from web/src/test/testUtils.ts rename to web/apps/wps-web/src/test/testUtils.ts diff --git a/web/src/types/global.d.ts b/web/apps/wps-web/src/types/global.d.ts similarity index 100% rename from web/src/types/global.d.ts rename to web/apps/wps-web/src/types/global.d.ts diff --git a/web/src/whatwg-fetch.d.ts b/web/apps/wps-web/src/whatwg-fetch.d.ts similarity index 100% rename from web/src/whatwg-fetch.d.ts rename to web/apps/wps-web/src/whatwg-fetch.d.ts diff --git a/web/apps/wps-web/tsconfig.app.json b/web/apps/wps-web/tsconfig.app.json new file mode 100644 index 0000000000..368a30db5a --- /dev/null +++ b/web/apps/wps-web/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "extends": "@wps/tsconfig/react-app.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client", "node", "vitest/globals", "@testing-library/jest-dom"], + "noUnusedLocals": false, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@/app/theme": ["../../packages/ui/src/theme"], + "@/api/*": ["../../packages/api/src/*"], + "@/utils/*": ["../../packages/utils/src/*"], + "@/components/*": ["../../packages/ui/src/*"], + "#root/*": ["./*"], + "app/theme": ["../../packages/ui/src/theme"], + "app/*": ["./src/app/*"], + "utils/*": ["../../packages/utils/src/*"], + "api/*": ["../../packages/api/src/*"], + "features/*": ["./src/features/*"], + "components/*": ["../../packages/ui/src/*"], + "components": ["../../packages/ui/src/index"], + "commonSlices/*": ["./src/commonSlices/*"] + } + }, + "include": ["src", "../../packages/ui/src", "../../packages/api/src", "../../packages/utils/src"] +} diff --git a/web/apps/wps-web/tsconfig.json b/web/apps/wps-web/tsconfig.json new file mode 100644 index 0000000000..fcf5db7f84 --- /dev/null +++ b/web/apps/wps-web/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], +} \ No newline at end of file diff --git a/web/tsconfig.node.json b/web/apps/wps-web/tsconfig.node.json similarity index 100% rename from web/tsconfig.node.json rename to web/apps/wps-web/tsconfig.node.json diff --git a/web/vite.config.ts b/web/apps/wps-web/vite.config.ts similarity index 55% rename from web/vite.config.ts rename to web/apps/wps-web/vite.config.ts index 8acf9505c2..d35a2d11c7 100644 --- a/web/vite.config.ts +++ b/web/apps/wps-web/vite.config.ts @@ -64,16 +64,25 @@ export default defineConfig({ } }, resolve: { - alias: { - '@': path.resolve(__dirname, './src'), - app: resolve(__dirname, 'src', 'app'), - features: resolve(__dirname, 'src', 'features'), - utils: resolve(__dirname, 'src', 'utils'), - commonSlices: resolve(__dirname, 'src', 'commonSlices'), - components: resolve(__dirname, 'src', 'components'), - api: resolve(__dirname, 'src', 'api'), - documents: resolve(__dirname, 'src', 'documents'), - '#root': resolve(__dirname) - } + alias: [ + // @/app/theme remapped to ui package (must come before @/app/ and @/) + { find: '@/app/theme', replacement: resolve(__dirname, '../../packages/ui/src/theme') }, + // @/api, @/utils, @/components remapped to extracted packages + { find: /^@\/api\/(.*)/, replacement: resolve(__dirname, '../../packages/api/src/$1') }, + { find: /^@\/utils\/(.*)/, replacement: resolve(__dirname, '../../packages/utils/src/$1') }, + { find: /^@\/components\/(.*)/, replacement: resolve(__dirname, '../../packages/ui/src/$1') }, + // bare aliases + { find: '@', replacement: path.resolve(__dirname, './src') }, + // app/theme specifically remapped to ui package (must come before app) + { find: 'app/theme', replacement: resolve(__dirname, '../../packages/ui/src/theme') }, + { find: 'app', replacement: resolve(__dirname, 'src/app') }, + { find: 'features', replacement: resolve(__dirname, 'src/features') }, + { find: 'utils', replacement: resolve(__dirname, '../../packages/utils/src') }, + { find: 'commonSlices', replacement: resolve(__dirname, 'src/commonSlices') }, + { find: 'components', replacement: resolve(__dirname, '../../packages/ui/src') }, + { find: 'api', replacement: resolve(__dirname, '../../packages/api/src') }, + { find: 'documents', replacement: resolve(__dirname, 'src/documents') }, + { find: '#root', replacement: resolve(__dirname) } + ] } }) diff --git a/web/vitest.config.ts b/web/apps/wps-web/vitest.config.ts similarity index 100% rename from web/vitest.config.ts rename to web/apps/wps-web/vitest.config.ts diff --git a/web/package.json b/web/package.json index 63e529de70..4e78cc331a 100644 --- a/web/package.json +++ b/web/package.json @@ -1,125 +1,18 @@ { - "name": "wps-web", - "version": "0.1.0", - "engines": { - "node": ">=20", - "npm": ">=10.7.0" - }, - "type": "module", - "license": "Apache-2.0", - "licenses": [ - { - "type": "Apache-2.0", - "url": "https://www.apache.org/licenses/LICENSE-2.0" - } + "name": "wps-frontend", + "private": true, + "workspaces": [ + "apps/*", + "packages/*" ], - "dependencies": { - "@emotion/react": "^11.8.2", - "@emotion/styled": "^11.8.1", - "@mui/icons-material": "^5.5.1", - "@mui/material": "5.15.20", - "@mui/system": "^5.15.14", - "@mui/x-data-grid-pro": "^6.0.0", - "@mui/x-date-pickers": "^7.29.4", - "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51", - "@reduxjs/toolkit": "^2.2.7", - "@sentry/react": "^10.0.0", - "@sentry/vite-plugin": "^5.0.0", - "@types/esri-leaflet": "^3.0.0", - "@types/leaflet": "^1.7.0", - "@types/lodash": "^4.14.173", - "@types/luxon": "^3.0.2", - "@types/react": "18.3.3", - "@types/react-dom": "^18.3.0", - "@types/react-plotly.js": "^2.2.4", - "@types/react-router-dom": "^5.3.3", - "@types/webpack-env": "^1.15.1", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "@vitest/coverage-v8": "^4.0.8", - "axios": "1.8.2", - "date-fns": "^4.0.0", - "eslint-config-prettier": "^10.0.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.4", - "esri-leaflet": "3.0.12", - "filefy": "^0.1.11", - "jsdom": "^26.0.0", - "jwt-decode": "^4.0.0", - "keycloak-js": "^25.0.0", - "leaflet": "^1.7.1", - "lodash": "^4.17.21", - "luxon": "^3.0.2", - "match-sorter": "^8.0.0", - "nyc": "^17.0.0", - "ol": "10.0.0", - "ol-mapbox-style": "^13.1.1", - "ol-pmtiles": "^2.0.0", - "prettier": "^3.3.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-is": "^19.2.4", - "react-redux": "^9.1.2", - "react-router-dom": "^7.6.2", - "recharts": "^3.0.0", - "typescript": "^5.2.2", - "vitest": "^4.0.0", - "whatwg-fetch": "^3.6.20" - }, + "packageManager": "yarn@4.13.0", "scripts": { - "start": "vite", - "start:cypress": "export $(cat .env.cypress | xargs) && yarn start", - "build": "tsc -b && vite build", - "build:prod": "tsc -b && vite build", - "test": "VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest", - "test:ci": "CI=true npm test", - "coverage": "npm test -- --coverage --watchAll=false", - "coverage:ci": "CI=true VITE_KEYCLOAK_CLIENT=wps-web VITE_PMTILES_BUCKET=https://nrs.objectstore.gov.bc.ca/gpdqha/psu/pmtiles/ vitest run --coverage", - "cy:open": "cypress open", - "cy:run": "cypress run --browser chrome --config watchForFileChanges=false", - "cypress:ci": "start-server-and-test start:cypress http://localhost:3030 'cy:run'", - "lint": "eslint", - "lint:fix": "eslint --fix", - "format": "prettier --write \"**/*.+(js|jsx|json|yml|yaml|css|md)\"", - "finalizeCoverage": "yarn node mergeCoverage.cjs", - "preview": "vite preview" + "build": "turbo build", + "test": "turbo test", + "lint": "turbo lint", + "dev": "turbo dev" }, "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "@cypress/code-coverage": "^4.0.0", - "@eslint/compat": "^2.0.0", - "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^16.0.0", - "@testing-library/user-event": "^14.5.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/jest": "^30.0.0", - "@types/react-is": "^19", - "@types/recharts": "^1.8.23", - "@vitejs/plugin-react": "^4.3.1", - "babel-loader": "^10.1.1", - "cypress": "^15.10.0", - "eslint": "^9.7.0", - "eslint-plugin-react-hooks": "^7.0.0", - "eslint-plugin-react-refresh": "^0.4.7", - "globals": "^17.0.0", - "rollup": "^4.59.0", - "start-server-and-test": "^2.0.0", - "ts-sinon": "^2.0.2", - "vite": "^7.0.0", - "vite-plugin-istanbul": "^7.0.0", - "vite-plugin-svgr": "^4.2.0", - "webpack": "^5.105.4" - }, - "nyc": { - "report-dir": "coverage-cypress", - "excludeAfterRemap": true, - "exclude": [ - "src/serviceWorker.ts", - "src/app/store.ts" - ] - }, - "packageManager": "yarn@4.13.0" + "turbo": "^2.0.0" + } } diff --git a/web/packages/api/package.json b/web/packages/api/package.json new file mode 100644 index 0000000000..f0c559c365 --- /dev/null +++ b/web/packages/api/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/api", + "version": "0.0.0", + "private": true +} diff --git a/web/src/api/axios.ts b/web/packages/api/src/axios.ts similarity index 100% rename from web/src/api/axios.ts rename to web/packages/api/src/axios.ts diff --git a/web/src/api/cHainesAPI.ts b/web/packages/api/src/cHainesAPI.ts similarity index 100% rename from web/src/api/cHainesAPI.ts rename to web/packages/api/src/cHainesAPI.ts diff --git a/web/src/api/fbaAPI.ts b/web/packages/api/src/fbaAPI.ts similarity index 99% rename from web/src/api/fbaAPI.ts rename to web/packages/api/src/fbaAPI.ts index 6213f1ec57..fcd3ddea61 100644 --- a/web/src/api/fbaAPI.ts +++ b/web/packages/api/src/fbaAPI.ts @@ -1,4 +1,4 @@ -import { AdvisoryStatus } from '@/utils/constants' +import { AdvisoryStatus } from 'utils/constants' import axios, { raster } from 'api/axios' import { DateTime } from 'luxon' diff --git a/web/src/api/fbaCalcAPI.ts b/web/packages/api/src/fbaCalcAPI.ts similarity index 100% rename from web/src/api/fbaCalcAPI.ts rename to web/packages/api/src/fbaCalcAPI.ts diff --git a/web/src/api/forecastAPI.ts b/web/packages/api/src/forecastAPI.ts similarity index 100% rename from web/src/api/forecastAPI.ts rename to web/packages/api/src/forecastAPI.ts diff --git a/web/src/api/hfiCalculatorAPI.ts b/web/packages/api/src/hfiCalculatorAPI.ts similarity index 97% rename from web/src/api/hfiCalculatorAPI.ts rename to web/packages/api/src/hfiCalculatorAPI.ts index 60d3f717ef..3b4c4d7c7f 100644 --- a/web/src/api/hfiCalculatorAPI.ts +++ b/web/packages/api/src/hfiCalculatorAPI.ts @@ -1,5 +1,4 @@ import axios from 'api/axios' -import { StationAdminRow } from 'features/hfiCalculator/components/stationAdmin/ManageStationsModal' import { HFIResultResponse, PlanningAreaResult, @@ -147,6 +146,22 @@ export interface HFIAdminStationUpdateRequest { date_range?: PrepDateRange } +export interface BasicPlanningArea { + id: number + name: string +} +export interface BasicWFWXStation { + code: number + name: string +} + +export interface StationAdminRow { + planningAreaId: number + rowId: number + station?: BasicWFWXStation + fuelType?: Pick +} + const baseUrl = '/hfi-calc/' export async function getHFIStations(): Promise { diff --git a/web/src/api/modelAPI.ts b/web/packages/api/src/modelAPI.ts similarity index 100% rename from web/src/api/modelAPI.ts rename to web/packages/api/src/modelAPI.ts diff --git a/web/src/api/moreCast2API.test.ts b/web/packages/api/src/moreCast2API.test.ts similarity index 100% rename from web/src/api/moreCast2API.test.ts rename to web/packages/api/src/moreCast2API.test.ts diff --git a/web/src/api/moreCast2API.ts b/web/packages/api/src/moreCast2API.ts similarity index 94% rename from web/src/api/moreCast2API.ts rename to web/packages/api/src/moreCast2API.ts index 8d88c8aa80..70f25c27aa 100644 --- a/web/src/api/moreCast2API.ts +++ b/web/packages/api/src/moreCast2API.ts @@ -1,7 +1,24 @@ import axios from 'api/axios' import { isEqual } from 'lodash' import { DateTime } from 'luxon' -import { MoreCast2ForecastRow } from 'features/moreCast2/interfaces' + +export interface PredictionItem { + choice: ModelType + value: number +} + +export interface MoreCast2ForecastRow { + id: string + forDate: DateTime + precip: PredictionItem + rh: PredictionItem + stationCode: number + stationName: string + temp: PredictionItem + windDirection: PredictionItem + windSpeed: PredictionItem + grassCuring: PredictionItem +} export enum ModelChoice { ACTUAL = 'ACTUAL', diff --git a/web/src/api/observationAPI.ts b/web/packages/api/src/observationAPI.ts similarity index 100% rename from web/src/api/observationAPI.ts rename to web/packages/api/src/observationAPI.ts diff --git a/web/src/api/percentileAPI.ts b/web/packages/api/src/percentileAPI.ts similarity index 100% rename from web/src/api/percentileAPI.ts rename to web/packages/api/src/percentileAPI.ts diff --git a/web/src/api/snow.ts b/web/packages/api/src/snow.ts similarity index 100% rename from web/src/api/snow.ts rename to web/packages/api/src/snow.ts diff --git a/web/src/api/stationAPI.test.ts b/web/packages/api/src/stationAPI.test.ts similarity index 100% rename from web/src/api/stationAPI.test.ts rename to web/packages/api/src/stationAPI.test.ts diff --git a/web/src/api/stationAPI.ts b/web/packages/api/src/stationAPI.ts similarity index 100% rename from web/src/api/stationAPI.ts rename to web/packages/api/src/stationAPI.ts diff --git a/web/packages/api/tsconfig.json b/web/packages/api/tsconfig.json new file mode 100644 index 0000000000..849e7c477d --- /dev/null +++ b/web/packages/api/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@wps/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler", + "module": "esnext", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "noEmit": true, + "baseUrl": ".", + "paths": { + "api/*": ["./src/*"], + "utils/*": ["../utils/src/*"] + } + }, + "include": ["src"] +} diff --git a/web/packages/tsconfig/base.json b/web/packages/tsconfig/base.json new file mode 100644 index 0000000000..49b3d05209 --- /dev/null +++ b/web/packages/tsconfig/base.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/web/packages/tsconfig/package.json b/web/packages/tsconfig/package.json new file mode 100644 index 0000000000..54cac9a370 --- /dev/null +++ b/web/packages/tsconfig/package.json @@ -0,0 +1,9 @@ +{ + "name": "@wps/tsconfig", + "version": "0.0.0", + "private": true, + "exports": { + "./base.json": "./base.json", + "./react-app.json": "./react-app.json" + } +} diff --git a/web/packages/tsconfig/react-app.json b/web/packages/tsconfig/react-app.json new file mode 100644 index 0000000000..8ca1a9f502 --- /dev/null +++ b/web/packages/tsconfig/react-app.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "composite": true, + "useDefineForClassFields": true, + "moduleResolution": "bundler", + "jsxImportSource": "@emotion/react", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "module": "esnext" + } +} diff --git a/web/packages/types/package.json b/web/packages/types/package.json new file mode 100644 index 0000000000..90919c3355 --- /dev/null +++ b/web/packages/types/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/types", + "version": "0.0.0", + "private": true +} diff --git a/web/src/types/window.d.ts b/web/packages/types/src/window.d.ts similarity index 100% rename from web/src/types/window.d.ts rename to web/packages/types/src/window.d.ts diff --git a/web/packages/ui/package.json b/web/packages/ui/package.json new file mode 100644 index 0000000000..91c7f5f305 --- /dev/null +++ b/web/packages/ui/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/ui", + "version": "0.0.0", + "private": true +} diff --git a/web/src/components/AboutDataPopover.tsx b/web/packages/ui/src/AboutDataPopover.tsx similarity index 100% rename from web/src/components/AboutDataPopover.tsx rename to web/packages/ui/src/AboutDataPopover.tsx diff --git a/web/src/components/Button.tsx b/web/packages/ui/src/Button.tsx similarity index 100% rename from web/src/components/Button.tsx rename to web/packages/ui/src/Button.tsx diff --git a/web/src/components/Container.tsx b/web/packages/ui/src/Container.tsx similarity index 100% rename from web/src/components/Container.tsx rename to web/packages/ui/src/Container.tsx diff --git a/web/src/components/DateRangeSelector.tsx b/web/packages/ui/src/DateRangeSelector.tsx similarity index 100% rename from web/src/components/DateRangeSelector.tsx rename to web/packages/ui/src/DateRangeSelector.tsx diff --git a/web/src/components/ErrorBoundary.tsx b/web/packages/ui/src/ErrorBoundary.tsx similarity index 100% rename from web/src/components/ErrorBoundary.tsx rename to web/packages/ui/src/ErrorBoundary.tsx diff --git a/web/src/components/ErrorMessage.tsx b/web/packages/ui/src/ErrorMessage.tsx similarity index 100% rename from web/src/components/ErrorMessage.tsx rename to web/packages/ui/src/ErrorMessage.tsx diff --git a/web/src/components/FeedbackButton.tsx b/web/packages/ui/src/FeedbackButton.tsx similarity index 100% rename from web/src/components/FeedbackButton.tsx rename to web/packages/ui/src/FeedbackButton.tsx diff --git a/web/src/components/FireCenterDropdown.tsx b/web/packages/ui/src/FireCenterDropdown.tsx similarity index 100% rename from web/src/components/FireCenterDropdown.tsx rename to web/packages/ui/src/FireCenterDropdown.tsx diff --git a/web/src/components/FireTable.tsx b/web/packages/ui/src/FireTable.tsx similarity index 100% rename from web/src/components/FireTable.tsx rename to web/packages/ui/src/FireTable.tsx diff --git a/web/src/components/GeneralHeader.tsx b/web/packages/ui/src/GeneralHeader.tsx similarity index 100% rename from web/src/components/GeneralHeader.tsx rename to web/packages/ui/src/GeneralHeader.tsx diff --git a/web/src/components/Grid.tsx b/web/packages/ui/src/Grid.tsx similarity index 100% rename from web/src/components/Grid.tsx rename to web/packages/ui/src/Grid.tsx diff --git a/web/src/components/HeaderImage.tsx b/web/packages/ui/src/HeaderImage.tsx similarity index 100% rename from web/src/components/HeaderImage.tsx rename to web/packages/ui/src/HeaderImage.tsx diff --git a/web/src/components/PageTitle.tsx b/web/packages/ui/src/PageTitle.tsx similarity index 100% rename from web/src/components/PageTitle.tsx rename to web/packages/ui/src/PageTitle.tsx diff --git a/web/src/components/ResetDialog.tsx b/web/packages/ui/src/ResetDialog.tsx similarity index 100% rename from web/src/components/ResetDialog.tsx rename to web/packages/ui/src/ResetDialog.tsx diff --git a/web/src/components/Slider.tsx b/web/packages/ui/src/Slider.tsx similarity index 100% rename from web/src/components/Slider.tsx rename to web/packages/ui/src/Slider.tsx diff --git a/web/src/components/StickyCell.tsx b/web/packages/ui/src/StickyCell.tsx similarity index 100% rename from web/src/components/StickyCell.tsx rename to web/packages/ui/src/StickyCell.tsx diff --git a/web/src/components/StyledFormControl.tsx b/web/packages/ui/src/StyledFormControl.tsx similarity index 100% rename from web/src/components/StyledFormControl.tsx rename to web/packages/ui/src/StyledFormControl.tsx diff --git a/web/src/components/WPSDatePicker.tsx b/web/packages/ui/src/WPSDatePicker.tsx similarity index 100% rename from web/src/components/WPSDatePicker.tsx rename to web/packages/ui/src/WPSDatePicker.tsx diff --git a/web/src/components/aboutDataPopover.test.tsx b/web/packages/ui/src/aboutDataPopover.test.tsx similarity index 85% rename from web/src/components/aboutDataPopover.test.tsx rename to web/packages/ui/src/aboutDataPopover.test.tsx index fb72f44dca..23a7d80424 100644 --- a/web/src/components/aboutDataPopover.test.tsx +++ b/web/packages/ui/src/aboutDataPopover.test.tsx @@ -1,8 +1,8 @@ import React from 'react' import { fireEvent, render, screen, waitFor } from '@testing-library/react' -import AboutDataPopover from '@/components/AboutDataPopover' -import { FBAAboutDataContent } from '@/features/fbaCalculator/components/FbaAboutDataContent' -import { ADVISORY_THRESHOLD, ASAAboutDataContent } from '@/features/fba/components/ASAAboutDataContent' +import AboutDataPopover from './AboutDataPopover' +import { FBAAboutDataContent } from 'features/fbaCalculator/components/FbaAboutDataContent' +import { ADVISORY_THRESHOLD, ASAAboutDataContent } from 'features/fba/components/ASAAboutDataContent' describe('AboutDataPopover', () => { it('should render the About Data Popover with static content', () => { diff --git a/web/src/components/dateRangePicker/DateRangePicker.tsx b/web/packages/ui/src/dateRangePicker/DateRangePicker.tsx similarity index 100% rename from web/src/components/dateRangePicker/DateRangePicker.tsx rename to web/packages/ui/src/dateRangePicker/DateRangePicker.tsx diff --git a/web/src/components/dateRangePicker/DateRangePickerWrapper.tsx b/web/packages/ui/src/dateRangePicker/DateRangePickerWrapper.tsx similarity index 100% rename from web/src/components/dateRangePicker/DateRangePickerWrapper.tsx rename to web/packages/ui/src/dateRangePicker/DateRangePickerWrapper.tsx diff --git a/web/src/components/dateRangePicker/Day.tsx b/web/packages/ui/src/dateRangePicker/Day.tsx similarity index 100% rename from web/src/components/dateRangePicker/Day.tsx rename to web/packages/ui/src/dateRangePicker/Day.tsx diff --git a/web/src/components/dateRangePicker/Header.tsx b/web/packages/ui/src/dateRangePicker/Header.tsx similarity index 100% rename from web/src/components/dateRangePicker/Header.tsx rename to web/packages/ui/src/dateRangePicker/Header.tsx diff --git a/web/src/components/dateRangePicker/LICENSE b/web/packages/ui/src/dateRangePicker/LICENSE similarity index 100% rename from web/src/components/dateRangePicker/LICENSE rename to web/packages/ui/src/dateRangePicker/LICENSE diff --git a/web/src/components/dateRangePicker/Menu.tsx b/web/packages/ui/src/dateRangePicker/Menu.tsx similarity index 100% rename from web/src/components/dateRangePicker/Menu.tsx rename to web/packages/ui/src/dateRangePicker/Menu.tsx diff --git a/web/src/components/dateRangePicker/Month.tsx b/web/packages/ui/src/dateRangePicker/Month.tsx similarity index 100% rename from web/src/components/dateRangePicker/Month.tsx rename to web/packages/ui/src/dateRangePicker/Month.tsx diff --git a/web/src/components/dateRangePicker/README.md b/web/packages/ui/src/dateRangePicker/README.md similarity index 100% rename from web/src/components/dateRangePicker/README.md rename to web/packages/ui/src/dateRangePicker/README.md diff --git a/web/src/components/dateRangePicker/dateRangePickerWrapper.test.tsx b/web/packages/ui/src/dateRangePicker/dateRangePickerWrapper.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/dateRangePickerWrapper.test.tsx rename to web/packages/ui/src/dateRangePicker/dateRangePickerWrapper.test.tsx diff --git a/web/src/components/dateRangePicker/menu.test.tsx b/web/packages/ui/src/dateRangePicker/menu.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/menu.test.tsx rename to web/packages/ui/src/dateRangePicker/menu.test.tsx diff --git a/web/src/components/dateRangePicker/month.test.tsx b/web/packages/ui/src/dateRangePicker/month.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/month.test.tsx rename to web/packages/ui/src/dateRangePicker/month.test.tsx diff --git a/web/src/components/dateRangePicker/types.ts b/web/packages/ui/src/dateRangePicker/types.ts similarity index 100% rename from web/src/components/dateRangePicker/types.ts rename to web/packages/ui/src/dateRangePicker/types.ts diff --git a/web/src/components/dateRangePicker/utils.test.tsx b/web/packages/ui/src/dateRangePicker/utils.test.tsx similarity index 100% rename from web/src/components/dateRangePicker/utils.test.tsx rename to web/packages/ui/src/dateRangePicker/utils.test.tsx diff --git a/web/src/components/dateRangePicker/utils.ts b/web/packages/ui/src/dateRangePicker/utils.ts similarity index 100% rename from web/src/components/dateRangePicker/utils.ts rename to web/packages/ui/src/dateRangePicker/utils.ts diff --git a/web/src/components/fireTable.test.tsx b/web/packages/ui/src/fireTable.test.tsx similarity index 100% rename from web/src/components/fireTable.test.tsx rename to web/packages/ui/src/fireTable.test.tsx diff --git a/web/src/components/index.ts b/web/packages/ui/src/index.ts similarity index 100% rename from web/src/components/index.ts rename to web/packages/ui/src/index.ts diff --git a/web/src/components/resetDialog.test.tsx b/web/packages/ui/src/resetDialog.test.tsx similarity index 97% rename from web/src/components/resetDialog.test.tsx rename to web/packages/ui/src/resetDialog.test.tsx index f9a6b7d171..088496def2 100644 --- a/web/src/components/resetDialog.test.tsx +++ b/web/packages/ui/src/resetDialog.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react' -import ResetDialog from '@/components/ResetDialog' +import ResetDialog from './ResetDialog' import { vi } from 'vitest' const MESSAGE = "Test" diff --git a/web/src/components/stickyCell.test.tsx b/web/packages/ui/src/stickyCell.test.tsx similarity index 100% rename from web/src/components/stickyCell.test.tsx rename to web/packages/ui/src/stickyCell.test.tsx diff --git a/web/src/app/theme.ts b/web/packages/ui/src/theme.ts similarity index 100% rename from web/src/app/theme.ts rename to web/packages/ui/src/theme.ts diff --git a/web/packages/ui/tsconfig.json b/web/packages/ui/tsconfig.json new file mode 100644 index 0000000000..675f529035 --- /dev/null +++ b/web/packages/ui/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@wps/tsconfig/react-app.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/theme": ["./src/theme"], + "api/*": ["../api/src/*"], + "utils/*": ["../utils/src/*"], + "components/*": ["./src/*"], + "components": ["./src/index"] + } + }, + "include": ["src"] +} diff --git a/web/packages/utils/package.json b/web/packages/utils/package.json new file mode 100644 index 0000000000..bb0c64d1b8 --- /dev/null +++ b/web/packages/utils/package.json @@ -0,0 +1,5 @@ +{ + "name": "@wps/utils", + "version": "0.0.0", + "private": true +} diff --git a/web/src/utils/constants.ts b/web/packages/utils/src/constants.ts similarity index 100% rename from web/src/utils/constants.ts rename to web/packages/utils/src/constants.ts diff --git a/web/src/utils/date.test.ts b/web/packages/utils/src/date.test.ts similarity index 100% rename from web/src/utils/date.test.ts rename to web/packages/utils/src/date.test.ts diff --git a/web/src/utils/date.ts b/web/packages/utils/src/date.ts similarity index 100% rename from web/src/utils/date.ts rename to web/packages/utils/src/date.ts diff --git a/web/src/utils/dropdown.test.ts b/web/packages/utils/src/dropdown.test.ts similarity index 100% rename from web/src/utils/dropdown.test.ts rename to web/packages/utils/src/dropdown.test.ts diff --git a/web/src/utils/dropdown.ts b/web/packages/utils/src/dropdown.ts similarity index 100% rename from web/src/utils/dropdown.ts rename to web/packages/utils/src/dropdown.ts diff --git a/web/src/utils/env.ts b/web/packages/utils/src/env.ts similarity index 100% rename from web/src/utils/env.ts rename to web/packages/utils/src/env.ts diff --git a/web/src/utils/error.ts b/web/packages/utils/src/error.ts similarity index 100% rename from web/src/utils/error.ts rename to web/packages/utils/src/error.ts diff --git a/web/src/utils/format.ts b/web/packages/utils/src/format.ts similarity index 100% rename from web/src/utils/format.ts rename to web/packages/utils/src/format.ts diff --git a/web/src/utils/fwi/bui.ts b/web/packages/utils/src/fwi/bui.ts similarity index 100% rename from web/src/utils/fwi/bui.ts rename to web/packages/utils/src/fwi/bui.ts diff --git a/web/src/utils/fwi/dc.ts b/web/packages/utils/src/fwi/dc.ts similarity index 100% rename from web/src/utils/fwi/dc.ts rename to web/packages/utils/src/fwi/dc.ts diff --git a/web/src/utils/fwi/dmc.ts b/web/packages/utils/src/fwi/dmc.ts similarity index 100% rename from web/src/utils/fwi/dmc.ts rename to web/packages/utils/src/fwi/dmc.ts diff --git a/web/src/utils/fwi/ffmc.ts b/web/packages/utils/src/fwi/ffmc.ts similarity index 100% rename from web/src/utils/fwi/ffmc.ts rename to web/packages/utils/src/fwi/ffmc.ts diff --git a/web/src/utils/fwi/fwi.ts b/web/packages/utils/src/fwi/fwi.ts similarity index 100% rename from web/src/utils/fwi/fwi.ts rename to web/packages/utils/src/fwi/fwi.ts diff --git a/web/src/utils/fwi/index.ts b/web/packages/utils/src/fwi/index.ts similarity index 100% rename from web/src/utils/fwi/index.ts rename to web/packages/utils/src/fwi/index.ts diff --git a/web/src/utils/fwi/isi.ts b/web/packages/utils/src/fwi/isi.ts similarity index 100% rename from web/src/utils/fwi/isi.ts rename to web/packages/utils/src/fwi/isi.ts diff --git a/web/src/utils/getError.test.ts b/web/packages/utils/src/getError.test.ts similarity index 100% rename from web/src/utils/getError.test.ts rename to web/packages/utils/src/getError.test.ts diff --git a/web/src/utils/getError.ts b/web/packages/utils/src/getError.ts similarity index 100% rename from web/src/utils/getError.ts rename to web/packages/utils/src/getError.ts diff --git a/web/src/utils/strings.ts b/web/packages/utils/src/strings.ts similarity index 100% rename from web/src/utils/strings.ts rename to web/packages/utils/src/strings.ts diff --git a/web/src/utils/url.test.ts b/web/packages/utils/src/url.test.ts similarity index 100% rename from web/src/utils/url.test.ts rename to web/packages/utils/src/url.test.ts diff --git a/web/src/utils/url.ts b/web/packages/utils/src/url.ts similarity index 100% rename from web/src/utils/url.ts rename to web/packages/utils/src/url.ts diff --git a/web/src/utils/vectorLayerUtils.test.ts b/web/packages/utils/src/vectorLayerUtils.test.ts similarity index 98% rename from web/src/utils/vectorLayerUtils.test.ts rename to web/packages/utils/src/vectorLayerUtils.test.ts index efcd40fece..b32215b2f9 100644 --- a/web/src/utils/vectorLayerUtils.test.ts +++ b/web/packages/utils/src/vectorLayerUtils.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import { createHillshadeVectorTileLayer, createVectorTileLayer, getStyleJson } from '@/utils/vectorLayerUtils' +import { createHillshadeVectorTileLayer, createVectorTileLayer, getStyleJson } from './vectorLayerUtils' import axios from 'axios' import { applyStyle } from 'ol-mapbox-style' diff --git a/web/src/utils/vectorLayerUtils.ts b/web/packages/utils/src/vectorLayerUtils.ts similarity index 100% rename from web/src/utils/vectorLayerUtils.ts rename to web/packages/utils/src/vectorLayerUtils.ts diff --git a/web/packages/utils/tsconfig.json b/web/packages/utils/tsconfig.json new file mode 100644 index 0000000000..50ca98c882 --- /dev/null +++ b/web/packages/utils/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@wps/tsconfig/base.json", + "compilerOptions": { + "moduleResolution": "bundler", + "module": "esnext", + "target": "es2015", + "lib": ["dom", "dom.iterable", "esnext"], + "jsx": "react-jsx", + "noEmit": true, + "types": ["vite/client"], + "baseUrl": ".", + "paths": { + "utils/*": ["./src/*"], + "api/*": ["../api/src/*"] + } + }, + "include": ["src", "../types/src"] +} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json deleted file mode 100644 index c2a432d091..0000000000 --- a/web/tsconfig.app.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "useDefineForClassFields": true, - /* Bundler mode */ - "moduleResolution": "bundler", - "jsxImportSource": "@emotion/react", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - /* Linting */ - "strict": true, - "types": ["vite/client", "node", "vitest/globals", "@testing-library/jest-dom"], - "noUnusedLocals": false, - // "noUnusedParameters": , - "noFallthroughCasesInSwitch": true, - //from old - "target": "es2015", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"], - "#root/*": ["./*"], - "app/*": ["./src/app/*"], - "utils/*": ["./src/utils/*"], - "api/*": ["./src/api/*"], - "features/*": ["./src/features/*"], - "components/*": ["src/components/*"], - "components": ["./src/components/index"], - "commonSlices/*": ["./src/commonSlices/*"] - } - }, - "include": ["src"] -} diff --git a/web/tsconfig.json b/web/tsconfig.json index fcf5db7f84..17159e82bc 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -1,11 +1,10 @@ { "files": [], "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.node.json" - } - ], -} \ No newline at end of file + { "path": "apps/wps-web" }, + { "path": "packages/api" }, + { "path": "packages/utils" }, + { "path": "packages/ui" }, + { "path": "packages/types" } + ] +} diff --git a/web/turbo.json b/web/turbo.json new file mode 100644 index 0000000000..23166104d0 --- /dev/null +++ b/web/turbo.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**", "build/**"], + "passThroughEnv": ["SENTRY_AUTH_TOKEN"] + }, + "test": { + "dependsOn": ["^build"], + "outputs": ["coverage/**"] + }, + "lint": { + "outputs": [] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} diff --git a/web/yarn.lock b/web/yarn.lock index 756032ccff..601e216d05 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -4019,6 +4019,98 @@ __metadata: languageName: node linkType: hard +"@wps/tsconfig@workspace:*, @wps/tsconfig@workspace:packages/tsconfig": + version: 0.0.0-use.local + resolution: "@wps/tsconfig@workspace:packages/tsconfig" + languageName: unknown + linkType: soft + +"@wps/wps-web@workspace:apps/wps-web": + version: 0.0.0-use.local + resolution: "@wps/wps-web@workspace:apps/wps-web" + dependencies: + "@babel/core": "npm:^7.29.0" + "@babel/preset-env": "npm:^7.29.0" + "@cypress/code-coverage": "npm:^4.0.0" + "@emotion/react": "npm:^11.8.2" + "@emotion/styled": "npm:^11.8.1" + "@eslint/compat": "npm:^2.0.0" + "@mui/icons-material": "npm:^5.5.1" + "@mui/material": "npm:5.15.20" + "@mui/system": "npm:^5.15.14" + "@mui/x-data-grid-pro": "npm:^6.0.0" + "@mui/x-date-pickers": "npm:^7.29.4" + "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51" + "@reduxjs/toolkit": "npm:^2.2.7" + "@sentry/react": "npm:^10.0.0" + "@sentry/vite-plugin": "npm:^5.0.0" + "@testing-library/dom": "npm:^10.1.0" + "@testing-library/jest-dom": "npm:^6.4.2" + "@testing-library/react": "npm:^16.0.0" + "@testing-library/user-event": "npm:^14.5.2" + "@types/babel__core": "npm:^7" + "@types/babel__preset-env": "npm:^7" + "@types/esri-leaflet": "npm:^3.0.0" + "@types/jest": "npm:^30.0.0" + "@types/leaflet": "npm:^1.7.0" + "@types/lodash": "npm:^4.14.173" + "@types/luxon": "npm:^3.0.2" + "@types/react": "npm:18.3.3" + "@types/react-dom": "npm:^18.3.0" + "@types/react-is": "npm:^19" + "@types/react-plotly.js": "npm:^2.2.4" + "@types/react-router-dom": "npm:^5.3.3" + "@types/recharts": "npm:^1.8.23" + "@types/webpack-env": "npm:^1.15.1" + "@typescript-eslint/eslint-plugin": "npm:^8.0.0" + "@typescript-eslint/parser": "npm:^8.0.0" + "@vitejs/plugin-react": "npm:^4.3.1" + "@vitest/coverage-v8": "npm:^4.0.8" + "@wps/tsconfig": "workspace:*" + axios: "npm:1.8.2" + babel-loader: "npm:^10.1.1" + cypress: "npm:^15.10.0" + date-fns: "npm:^4.0.0" + eslint: "npm:^9.7.0" + eslint-config-prettier: "npm:^10.0.0" + eslint-plugin-prettier: "npm:^5.1.3" + eslint-plugin-react: "npm:^7.34.4" + eslint-plugin-react-hooks: "npm:^7.0.0" + eslint-plugin-react-refresh: "npm:^0.4.7" + esri-leaflet: "npm:3.0.12" + filefy: "npm:^0.1.11" + globals: "npm:^17.0.0" + jsdom: "npm:^26.0.0" + jwt-decode: "npm:^4.0.0" + keycloak-js: "npm:^25.0.0" + leaflet: "npm:^1.7.1" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.2" + match-sorter: "npm:^8.0.0" + nyc: "npm:^17.0.0" + ol: "npm:10.0.0" + ol-mapbox-style: "npm:^13.1.1" + ol-pmtiles: "npm:^2.0.0" + prettier: "npm:^3.3.3" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + react-is: "npm:^19.2.4" + react-redux: "npm:^9.1.2" + react-router-dom: "npm:^7.6.2" + recharts: "npm:^3.0.0" + rollup: "npm:^4.59.0" + start-server-and-test: "npm:^2.0.0" + ts-sinon: "npm:^2.0.2" + typescript: "npm:^5.2.2" + vite: "npm:^7.0.0" + vite-plugin-istanbul: "npm:^7.0.0" + vite-plugin-svgr: "npm:^4.2.0" + vitest: "npm:^4.0.0" + webpack: "npm:^5.105.4" + whatwg-fetch: "npm:^3.6.20" + languageName: unknown + linkType: soft + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -10543,6 +10635,77 @@ __metadata: languageName: node linkType: hard +"turbo-darwin-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-darwin-64@npm:2.8.16" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"turbo-darwin-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-darwin-arm64@npm:2.8.16" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"turbo-linux-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-linux-64@npm:2.8.16" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"turbo-linux-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-linux-arm64@npm:2.8.16" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"turbo-windows-64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-windows-64@npm:2.8.16" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"turbo-windows-arm64@npm:2.8.16": + version: 2.8.16 + resolution: "turbo-windows-arm64@npm:2.8.16" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"turbo@npm:^2.0.0": + version: 2.8.16 + resolution: "turbo@npm:2.8.16" + dependencies: + turbo-darwin-64: "npm:2.8.16" + turbo-darwin-arm64: "npm:2.8.16" + turbo-linux-64: "npm:2.8.16" + turbo-linux-arm64: "npm:2.8.16" + turbo-windows-64: "npm:2.8.16" + turbo-windows-arm64: "npm:2.8.16" + dependenciesMeta: + turbo-darwin-64: + optional: true + turbo-darwin-arm64: + optional: true + turbo-linux-64: + optional: true + turbo-linux-arm64: + optional: true + turbo-windows-64: + optional: true + turbo-windows-arm64: + optional: true + bin: + turbo: bin/turbo + checksum: 10c0/5ac16e61a723f45e8ab265d7bbeb932f8843e982d8b9eca07d8df4778d5c2152d96d2a54ddca761588c5a538178333cce5b55ba765a32c2cb4c5be07609c25de + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -11222,88 +11385,11 @@ __metadata: languageName: node linkType: hard -"wps-web@workspace:.": +"wps-frontend@workspace:.": version: 0.0.0-use.local - resolution: "wps-web@workspace:." + resolution: "wps-frontend@workspace:." dependencies: - "@babel/core": "npm:^7.29.0" - "@babel/preset-env": "npm:^7.29.0" - "@cypress/code-coverage": "npm:^4.0.0" - "@emotion/react": "npm:^11.8.2" - "@emotion/styled": "npm:^11.8.1" - "@eslint/compat": "npm:^2.0.0" - "@mui/icons-material": "npm:^5.5.1" - "@mui/material": "npm:5.15.20" - "@mui/system": "npm:^5.15.14" - "@mui/x-data-grid-pro": "npm:^6.0.0" - "@mui/x-date-pickers": "npm:^7.29.4" - "@psu/cffdrs_ts": "git+https://github.com/cffdrs/cffdrs_ts#b9afdabc89dd4bdf04ccf1e406a4a5d8d552ff51" - "@reduxjs/toolkit": "npm:^2.2.7" - "@sentry/react": "npm:^10.0.0" - "@sentry/vite-plugin": "npm:^5.0.0" - "@testing-library/dom": "npm:^10.1.0" - "@testing-library/jest-dom": "npm:^6.4.2" - "@testing-library/react": "npm:^16.0.0" - "@testing-library/user-event": "npm:^14.5.2" - "@types/babel__core": "npm:^7" - "@types/babel__preset-env": "npm:^7" - "@types/esri-leaflet": "npm:^3.0.0" - "@types/jest": "npm:^30.0.0" - "@types/leaflet": "npm:^1.7.0" - "@types/lodash": "npm:^4.14.173" - "@types/luxon": "npm:^3.0.2" - "@types/react": "npm:18.3.3" - "@types/react-dom": "npm:^18.3.0" - "@types/react-is": "npm:^19" - "@types/react-plotly.js": "npm:^2.2.4" - "@types/react-router-dom": "npm:^5.3.3" - "@types/recharts": "npm:^1.8.23" - "@types/webpack-env": "npm:^1.15.1" - "@typescript-eslint/eslint-plugin": "npm:^8.0.0" - "@typescript-eslint/parser": "npm:^8.0.0" - "@vitejs/plugin-react": "npm:^4.3.1" - "@vitest/coverage-v8": "npm:^4.0.8" - axios: "npm:1.8.2" - babel-loader: "npm:^10.1.1" - cypress: "npm:^15.10.0" - date-fns: "npm:^4.0.0" - eslint: "npm:^9.7.0" - eslint-config-prettier: "npm:^10.0.0" - eslint-plugin-prettier: "npm:^5.1.3" - eslint-plugin-react: "npm:^7.34.4" - eslint-plugin-react-hooks: "npm:^7.0.0" - eslint-plugin-react-refresh: "npm:^0.4.7" - esri-leaflet: "npm:3.0.12" - filefy: "npm:^0.1.11" - globals: "npm:^17.0.0" - jsdom: "npm:^26.0.0" - jwt-decode: "npm:^4.0.0" - keycloak-js: "npm:^25.0.0" - leaflet: "npm:^1.7.1" - lodash: "npm:^4.17.21" - luxon: "npm:^3.0.2" - match-sorter: "npm:^8.0.0" - nyc: "npm:^17.0.0" - ol: "npm:10.0.0" - ol-mapbox-style: "npm:^13.1.1" - ol-pmtiles: "npm:^2.0.0" - prettier: "npm:^3.3.3" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-is: "npm:^19.2.4" - react-redux: "npm:^9.1.2" - react-router-dom: "npm:^7.6.2" - recharts: "npm:^3.0.0" - rollup: "npm:^4.59.0" - start-server-and-test: "npm:^2.0.0" - ts-sinon: "npm:^2.0.2" - typescript: "npm:^5.2.2" - vite: "npm:^7.0.0" - vite-plugin-istanbul: "npm:^7.0.0" - vite-plugin-svgr: "npm:^4.2.0" - vitest: "npm:^4.0.0" - webpack: "npm:^5.105.4" - whatwg-fetch: "npm:^3.6.20" + turbo: "npm:^2.0.0" languageName: unknown linkType: soft From c0d7b434c77358cece164c5c8dad5269a169b5a5 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Thu, 12 Mar 2026 14:32:07 -0700 Subject: [PATCH 04/13] update docker builds --- Dockerfile.web | 26 ++++++++++++++++++-------- web/.dockerignore | 7 ++++++- web/Dockerfile | 24 ++++++++++++++++++++++++ web/apps/wps-web/Dockerfile | 16 ---------------- 4 files changed, 48 insertions(+), 25 deletions(-) create mode 100644 web/Dockerfile delete mode 100644 web/apps/wps-web/Dockerfile diff --git a/Dockerfile.web b/Dockerfile.web index 3347c4f779..21722331c8 100644 --- a/Dockerfile.web +++ b/Dockerfile.web @@ -6,20 +6,30 @@ ARG NODE_OPTIONS="--v8-pool-size=4" # PHASE 1 - build frontend. -FROM docker.io/library/node:20-alpine AS static +FROM docker.io/library/node:22-alpine AS static # Switch to root user for package installs USER 0 WORKDIR /app -COPY web/package.json . -COPY web/yarn.lock . -COPY web/.yarnrc.yml . +COPY web/package.json web/yarn.lock web/.yarnrc.yml web/turbo.json ./ + +# Copy package manifests before source for better layer caching +COPY web/packages/tsconfig/package.json packages/tsconfig/ +COPY web/packages/types/package.json packages/types/ +COPY web/packages/utils/package.json packages/utils/ +COPY web/packages/api/package.json packages/api/ +COPY web/packages/ui/package.json packages/ui/ +COPY web/apps/wps-web/package.json apps/wps-web/ + # do install first so it will be cached RUN corepack enable \ - && yarn set version berry \ && CYPRESS_INSTALL_BINARY=0 yarn install --immutable -COPY web . -RUN yarn run build:prod + +# Copy all source +COPY web/packages/ packages/ +COPY web/apps/wps-web/ apps/wps-web/ + +RUN yarn turbo build # PHASE 2 - prepare hosting. FROM docker.io/library/nginx:stable-alpine @@ -28,7 +38,7 @@ FROM docker.io/library/nginx:stable-alpine COPY ./openshift/nginx.conf /etc/nginx/nginx.conf # Copy the static content: -COPY --from=static /app/build . +COPY --from=static /app/apps/wps-web/build . RUN mkdir -p /tmp/nginx/client_temp RUN chmod -R 755 /tmp/nginx diff --git a/web/.dockerignore b/web/.dockerignore index 2938ba3854..546ccb1215 100644 --- a/web/.dockerignore +++ b/web/.dockerignore @@ -1,3 +1,8 @@ **/.gitignore **/node_modules -**/Dockerfile* \ No newline at end of file +**/Dockerfile* +**/build +**/dist +**/.turbo +**/coverage +**/coverage-cypress \ No newline at end of file diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000000..9399ccb2b2 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,24 @@ +FROM node:22-alpine AS builder +WORKDIR /app + +# Copy workspace config first (better layer caching) +COPY package.json yarn.lock .yarnrc.yml turbo.json ./ + +# Copy package manifests before source (layer cache for yarn install) +COPY packages/tsconfig/package.json packages/tsconfig/ +COPY packages/types/package.json packages/types/ +COPY packages/utils/package.json packages/utils/ +COPY packages/api/package.json packages/api/ +COPY packages/ui/package.json packages/ui/ +COPY apps/wps-web/package.json apps/wps-web/ + +RUN yarn install --immutable + +# Copy all source +COPY packages/ packages/ +COPY apps/wps-web/ apps/wps-web/ + +RUN yarn turbo build + +FROM nginx:alpine +COPY --from=builder /app/apps/wps-web/build /usr/share/nginx/html diff --git a/web/apps/wps-web/Dockerfile b/web/apps/wps-web/Dockerfile deleted file mode 100644 index 133ac0c828..0000000000 --- a/web/apps/wps-web/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM node:20 - -# Set working directory -WORKDIR /app - -# A wildcard is used to ensure both package.json AND package-lock.json are copied -COPY package*.json ./ - -RUN npm install yarn --no-package-lock && yarn - -# Copy the contents of the project to the image -COPY . . - -EXPOSE 3000 - -CMD ["npm", "start"] \ No newline at end of file From 461a4624ba53930c3a2fd039c703834bd8a41759 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Thu, 12 Mar 2026 14:33:18 -0700 Subject: [PATCH 05/13] bump to node 24 lts --- Dockerfile.web | 2 +- web/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.web b/Dockerfile.web index 21722331c8..b8852ac648 100644 --- a/Dockerfile.web +++ b/Dockerfile.web @@ -6,7 +6,7 @@ ARG NODE_OPTIONS="--v8-pool-size=4" # PHASE 1 - build frontend. -FROM docker.io/library/node:22-alpine AS static +FROM docker.io/library/node:24-alpine AS static # Switch to root user for package installs USER 0 WORKDIR /app diff --git a/web/Dockerfile b/web/Dockerfile index 9399ccb2b2..f1937dbb9e 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine AS builder +FROM node:24-alpine AS builder WORKDIR /app # Copy workspace config first (better layer caching) From d9d65ae2322d6021adef065cad5b9e670edad562 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 13:25:32 -0700 Subject: [PATCH 06/13] Remove accidentally committed Cypress download artifact --- .../wps-web/cypress/downloads/downloads.html | Bin 118577 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 web/apps/wps-web/cypress/downloads/downloads.html diff --git a/web/apps/wps-web/cypress/downloads/downloads.html b/web/apps/wps-web/cypress/downloads/downloads.html deleted file mode 100644 index a73e07468767d645b3a90052bc165dbb3f3bdfe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118577 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

{Oe>>DQT0`DtSu`qW{wUh_}N{8OytS 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 From dae5d9be18afecdd256f9ba9257ac08fb2c5b9f9 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 13:26:05 -0700 Subject: [PATCH 07/13] Fix cypress/downloads gitignore path after monorepo restructure --- web/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/.gitignore b/web/.gitignore index 99ac23a217..849342292f 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -9,4 +9,4 @@ !.yarn/releases !.yarn/sdks !.yarn/versions -cypress/downloads \ No newline at end of file +apps/wps-web/cypress/downloads \ No newline at end of file From 3fd2f637effc8bef29c41ce91c2e42ac806c8fa5 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 13:30:27 -0700 Subject: [PATCH 08/13] Fix yarn.lock inconsistency after merge conflict resolution --- web/yarn.lock | 351 +++++++++++++++++++------------------------------- 1 file changed, 134 insertions(+), 217 deletions(-) diff --git a/web/yarn.lock b/web/yarn.lock index ea52b73931..233ab0f181 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -12,36 +12,16 @@ __metadata: languageName: node linkType: hard -"@asamuzakjp/css-color@npm:^5.0.1": - version: 5.0.1 - resolution: "@asamuzakjp/css-color@npm:5.0.1" - dependencies: - "@csstools/css-calc": "npm:^3.1.1" - "@csstools/css-color-parser": "npm:^4.0.2" - "@csstools/css-parser-algorithms": "npm:^4.0.0" - "@csstools/css-tokenizer": "npm:^4.0.0" - lru-cache: "npm:^11.2.6" - checksum: 10c0/3e8d74a3b7f3005a325cb8e7f3da1aa32aeac4cd9ce387826dc25b16eaab4dc0e4a6faded8ccc1895959141f4a4a70e8bc38723347b89667b7b224990d16683c - languageName: node - linkType: hard - -"@asamuzakjp/dom-selector@npm:^7.0.2": - version: 7.0.3 - resolution: "@asamuzakjp/dom-selector@npm:7.0.3" +"@asamuzakjp/css-color@npm:^3.2.0": + version: 3.2.0 + resolution: "@asamuzakjp/css-color@npm:3.2.0" dependencies: - "@asamuzakjp/nwsapi": "npm:^2.3.9" - bidi-js: "npm:^1.0.3" - css-tree: "npm:^3.2.1" - is-potential-custom-element-name: "npm:^1.0.1" - lru-cache: "npm:^11.2.7" - checksum: 10c0/c64b06a23479970ded4f38bec34069e98f4062b4ecb798b81b1fc37b5472ec6110d5bd9d8a267bfc431503f6ee3080c2e94eb3d99e30aaa1b6d9f83fbd2744fa - languageName: node - linkType: hard - -"@asamuzakjp/nwsapi@npm:^2.3.9": - version: 2.3.9 - resolution: "@asamuzakjp/nwsapi@npm:2.3.9" - checksum: 10c0/869b81382e775499c96c45c6dbe0d0766a6da04bcf0abb79f5333535c4e19946851acaa43398f896e2ecc5a1de9cf3db7cf8c4b1afac1ee3d15e21584546d74d + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^10.4.3" + checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092 languageName: node linkType: hard @@ -1179,72 +1159,49 @@ __metadata: languageName: node linkType: hard -"@bramus/specificity@npm:^2.4.2": - version: 2.4.2 - resolution: "@bramus/specificity@npm:2.4.2" - dependencies: - css-tree: "npm:^3.0.0" - bin: - specificity: bin/cli.js - checksum: 10c0/c5f4e04e0bca0d2202598207a5eb0733c8109d12a68a329caa26373bec598d99db5bb785b8865fefa00fc01b08c6068138807ceb11a948fe15e904ed6cf4ba72 - languageName: node - linkType: hard - -"@csstools/color-helpers@npm:^6.0.2": - version: 6.0.2 - resolution: "@csstools/color-helpers@npm:6.0.2" - checksum: 10c0/4c66574563d7c960010c11e41c2673675baff07c427cca6e8dddffa5777de45770d13ff3efce1c0642798089ad55de52870d9d8141f78db3fa5bba012f2d3789 +"@csstools/color-helpers@npm:^5.1.0": + version: 5.1.0 + resolution: "@csstools/color-helpers@npm:5.1.0" + checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db languageName: node linkType: hard -"@csstools/css-calc@npm:^3.1.1": - version: 3.1.1 - resolution: "@csstools/css-calc@npm:3.1.1" +"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4": + version: 2.1.4 + resolution: "@csstools/css-calc@npm:2.1.4" peerDependencies: - "@csstools/css-parser-algorithms": ^4.0.0 - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10c0/6efcc016d988edf66e54c7bad03e352d61752cbd1b56c7557fd013868aab23505052ded8f912cd4034e216943ea1e04c957d81012489e3eddc14a57b386510ef + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/42ce5793e55ec4d772083808a11e9fb2dfe36db3ec168713069a276b4c3882205b3507c4680224c28a5d35fe0bc2d308c77f8f2c39c7c09aad8747708eb8ddd8 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/css-color-parser@npm:4.0.2" +"@csstools/css-color-parser@npm:^3.0.9": + version: 3.1.0 + resolution: "@csstools/css-color-parser@npm:3.1.0" dependencies: - "@csstools/color-helpers": "npm:^6.0.2" - "@csstools/css-calc": "npm:^3.1.1" + "@csstools/color-helpers": "npm:^5.1.0" + "@csstools/css-calc": "npm:^2.1.4" peerDependencies: - "@csstools/css-parser-algorithms": ^4.0.0 - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10c0/487cf507ef4630f74bd67d84298294ed269900b206ade015a968d20047e07ff46f235b72e26fe0c6b949a03f8f9f00a22c363da49c1b06ca60b32d0188e546be + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5 languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/css-parser-algorithms@npm:4.0.0" - peerDependencies: - "@csstools/css-tokenizer": ^4.0.0 - checksum: 10c0/94558c2428d6ef0ddef542e86e0a8376aa1263a12a59770abb13ba50d7b83086822c75433f32aa2e7fef00555e1cc88292f9ca5bce79aed232bb3fed73b1528d - languageName: node - linkType: hard - -"@csstools/css-syntax-patches-for-csstree@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.1" +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.5 + resolution: "@csstools/css-parser-algorithms@npm:3.0.5" peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true - checksum: 10c0/947f82e9e8af0512f1d6600f68da1bbe8d15112fa73435169608a68dcf20262ae517c799202c86a6c3bc889d0e9fab724ad5661a3aa98432390f8f9765b86ddc + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/d9a1c888bd43849ae3437ca39251d5c95d2c8fd6b5ccdb7c45491dfd2c1cbdc3075645e80901d120e4d2c1993db9a5b2d83793b779dbbabcfb132adb142eb7f7 languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/css-tokenizer@npm:4.0.0" - checksum: 10c0/669cf3d0f9c8e1ffdf8c9955ad8beba0c8cfe03197fe29a4fcbd9ee6f7a18856cfa42c62670021a75183d9ab37f5d14a866e6a9df753a6c07f59e36797a9ea9f +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.4 + resolution: "@csstools/css-tokenizer@npm:3.0.4" + checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f languageName: node linkType: hard @@ -1763,18 +1720,6 @@ __metadata: languageName: node linkType: hard -"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.15.0, @exodus/bytes@npm:^1.6.0": - version: 1.15.0 - resolution: "@exodus/bytes@npm:1.15.0" - peerDependencies: - "@noble/hashes": ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - "@noble/hashes": - optional: true - checksum: 10c0/b48aad9729653385d6ed055c28cfcf0b1b1481cf5d83f4375c12abd7988f1d20f69c80b5f95d4a1cc24d9abe32b9efc352a812d53884c26efea172aca8b6356d - languageName: node - linkType: hard - "@floating-ui/core@npm:^1.7.5": version: 1.7.5 resolution: "@floating-ui/core@npm:1.7.5" @@ -4738,15 +4683,6 @@ __metadata: languageName: node linkType: hard -"bidi-js@npm:^1.0.3": - version: 1.0.3 - resolution: "bidi-js@npm:1.0.3" - dependencies: - require-from-string: "npm:^2.0.2" - checksum: 10c0/fdddea4aa4120a34285486f2267526cd9298b6e8b773ad25e765d4f104b6d7437ab4ba542e6939e3ac834a7570bcf121ee2cf6d3ae7cd7082c4b5bedc8f271e1 - languageName: node - linkType: hard - "blob-util@npm:^2.0.2": version: 2.0.2 resolution: "blob-util@npm:2.0.2" @@ -5227,16 +5163,6 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^3.0.0, css-tree@npm:^3.2.1": - version: 3.2.1 - resolution: "css-tree@npm:3.2.1" - dependencies: - mdn-data: "npm:2.27.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/1f65e9ccaa56112a4706d6f003dd43d777f0dbcf848e66fd320f823192533581f8dd58daa906cb80622658332d50284d6be13b87a6ab4556cbbfe9ef535bbf7e - languageName: node - linkType: hard - "css.escape@npm:^1.5.1": version: 1.5.1 resolution: "css.escape@npm:1.5.1" @@ -5244,6 +5170,16 @@ __metadata: languageName: node linkType: hard +"cssstyle@npm:^4.2.1": + version: 4.6.0 + resolution: "cssstyle@npm:4.6.0" + dependencies: + "@asamuzakjp/css-color": "npm:^3.2.0" + rrweb-cssom: "npm:^0.8.0" + checksum: 10c0/71add1b0ffafa1bedbef6855db6189b9523d3320e015a0bf3fbd504760efb9a81e1f1a225228d5fa892ee58e56d06994ca372e7f4e461cda7c4c9985fe075f65 + languageName: node + linkType: hard + "csstype@npm:^3.0.2, csstype@npm:^3.1.3, csstype@npm:^3.2.2": version: 3.2.3 resolution: "csstype@npm:3.2.3" @@ -5406,13 +5342,13 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^7.0.0": - version: 7.0.0 - resolution: "data-urls@npm:7.0.0" +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" dependencies: - whatwg-mimetype: "npm:^5.0.0" - whatwg-url: "npm:^16.0.0" - checksum: 10c0/08d88ef50d8966a070ffdaa703e1e4b29f01bb2da364dfbc1612b1c2a4caa8045802c9532d81347b21781100132addb36a585071c8323b12cce97973961dee9f + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad languageName: node linkType: hard @@ -5510,7 +5446,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.6.0": +"decimal.js@npm:^10.5.0": version: 10.6.0 resolution: "decimal.js@npm:10.6.0" checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa @@ -7044,12 +6980,12 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^6.0.0": - version: 6.0.0 - resolution: "html-encoding-sniffer@npm:6.0.0" +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" dependencies: - "@exodus/bytes": "npm:^1.6.0" - checksum: 10c0/66dc3f6f5539cc3beb814fcbfae7eacf4ec38cf824d6e1425b72039b51a40f4456bd8541ba66f4f4fe09cdf885ab5cd5bae6ec6339d6895a930b2fdb83c53025 + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 languageName: node linkType: hard @@ -7067,7 +7003,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^7.0.0": +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" dependencies: @@ -7098,7 +7034,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" dependencies: @@ -7122,6 +7058,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:0.6.3": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + "iconv-lite@npm:^0.7.2": version: 0.7.2 resolution: "iconv-lite@npm:0.7.2" @@ -7818,37 +7763,36 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^29.0.0": - version: 29.0.0 - resolution: "jsdom@npm:29.0.0" +"jsdom@npm:^26.0.0": + version: 26.1.0 + resolution: "jsdom@npm:26.1.0" dependencies: - "@asamuzakjp/css-color": "npm:^5.0.1" - "@asamuzakjp/dom-selector": "npm:^7.0.2" - "@bramus/specificity": "npm:^2.4.2" - "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.1" - "@exodus/bytes": "npm:^1.15.0" - css-tree: "npm:^3.2.1" - data-urls: "npm:^7.0.0" - decimal.js: "npm:^10.6.0" - html-encoding-sniffer: "npm:^6.0.0" + cssstyle: "npm:^4.2.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.5.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.6" is-potential-custom-element-name: "npm:^1.0.1" - lru-cache: "npm:^11.2.7" - parse5: "npm:^8.0.0" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^6.0.1" - undici: "npm:^7.24.3" + tough-cookie: "npm:^5.1.1" w3c-xmlserializer: "npm:^5.0.0" - webidl-conversions: "npm:^8.0.1" - whatwg-mimetype: "npm:^5.0.0" - whatwg-url: "npm:^16.0.1" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.1.1" + ws: "npm:^8.18.0" xml-name-validator: "npm:^5.0.0" peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - checksum: 10c0/8bbb4f89bfb7013a729bf50419fa5878086b52068a5d3836b51b99be5faf7cf9f871818954d468ce1f2f1c6b86d16af6ed5167f4084f7df7de517b104b451454 + checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4 languageName: node linkType: hard @@ -8164,7 +8108,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.2.0": +"lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb @@ -8178,13 +8122,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^11.2.6, lru-cache@npm:^11.2.7": - version: 11.2.7 - resolution: "lru-cache@npm:11.2.7" - checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 - languageName: node - linkType: hard - "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -8298,13 +8235,6 @@ __metadata: languageName: node linkType: hard -"mdn-data@npm:2.27.1": - version: 2.27.1 - resolution: "mdn-data@npm:2.27.1" - checksum: 10c0/eb8abf5d22e4d1e090346f5e81b67d23cef14c83940e445da5c44541ad874dc8fb9f6ca236e8258c3a489d9fb5884188a4d7d58773adb9089ac2c0b966796393 - languageName: node - linkType: hard - "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -8925,12 +8855,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^8.0.0": - version: 8.0.0 - resolution: "parse5@npm:8.0.0" +"parse5@npm:^7.2.1": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" dependencies: entities: "npm:^6.0.0" - checksum: 10c0/8279892dcd77b2f2229707f60eb039e303adf0288812b2a8fd5acf506a4d432da833c6c5d07a6554bef722c2367a81ef4a1f7e9336564379a7dba3e798bf16b3 + checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 languageName: node linkType: hard @@ -9783,6 +9713,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b + languageName: node + linkType: hard + "rw@npm:^1.3.3": version: 1.3.3 resolution: "rw@npm:1.3.3" @@ -10626,13 +10563,6 @@ __metadata: languageName: node linkType: hard -"tldts-core@npm:^7.0.26": - version: 7.0.26 - resolution: "tldts-core@npm:7.0.26" - checksum: 10c0/3130c4a338bc5fa2463cec199b1b7b610e7dc570e33505c66fcf223ebea76f8e316b4531d2de1eb868488b9f02a92cd8aa610334d0fa3bf97f46bf89e438f856 - languageName: node - linkType: hard - "tldts@npm:^6.1.32": version: 6.1.86 resolution: "tldts@npm:6.1.86" @@ -10644,17 +10574,6 @@ __metadata: languageName: node linkType: hard -"tldts@npm:^7.0.5": - version: 7.0.26 - resolution: "tldts@npm:7.0.26" - dependencies: - tldts-core: "npm:^7.0.26" - bin: - tldts: bin/cli.js - checksum: 10c0/de7df3cfb03517afa09c3f3ad08d5e68d1735d5a65af83d978a4032a5784bbd4171f3d4b029575981f9a3045620152b55fb3c24445d76f7735a5c18f3b0d9c69 - languageName: node - linkType: hard - "tmp@npm:~0.2.4": version: 0.2.5 resolution: "tmp@npm:0.2.5" @@ -10662,7 +10581,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^5.0.0": +"tough-cookie@npm:^5.0.0, tough-cookie@npm:^5.1.1": version: 5.1.2 resolution: "tough-cookie@npm:5.1.2" dependencies: @@ -10671,21 +10590,12 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^6.0.1": - version: 6.0.1 - resolution: "tough-cookie@npm:6.0.1" - dependencies: - tldts: "npm:^7.0.5" - checksum: 10c0/ec70bd6b1215efe4ed31a158f0be3e4c9088fcbd8620edc23a5860d4f3d85c757b77e274baaa700f7b25e409f4181552ed189603c2b2e1a9f88104da3a61a37d - languageName: node - linkType: hard - -"tr46@npm:^6.0.0": - version: 6.0.0 - resolution: "tr46@npm:6.0.0" +"tr46@npm:^5.1.0": + version: 5.1.1 + resolution: "tr46@npm:5.1.1" dependencies: punycode: "npm:^2.3.1" - checksum: 10c0/83130df2f649228aa91c17754b66248030a3af34911d713b5ea417066fa338aa4bc8668d06bd98aa21a2210f43fc0a3db8b9099e7747fb5830e40e39a6a1058e + checksum: 10c0/ae270e194d52ec67ebd695c1a42876e0f19b96e4aca2ab464ab1d9d17dc3acd3e18764f5034c93897db73421563be27c70c98359c4501136a497e46deda5d5ec languageName: node linkType: hard @@ -10965,13 +10875,6 @@ __metadata: languageName: node linkType: hard -"undici@npm:^7.24.3": - version: 7.24.4 - resolution: "undici@npm:7.24.4" - checksum: 10c0/cb302e81fadb7f0b7946ab77595715c0961b46a025ccecae79ba599432d0bc8d1e3da4dfe7ff66bc74f115c1b8ff0f099bc4e9bf313db4562da23995872c6d17 - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.1 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" @@ -11302,10 +11205,10 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^8.0.1": - version: 8.0.1 - resolution: "webidl-conversions@npm:8.0.1" - checksum: 10c0/3f6f327ca5fa0c065ed8ed0ef3b72f33623376e68f958e9b7bd0df49fdb0b908139ac2338d19fb45bd0e05595bda96cb6d1622222a8b413daa38a17aacc4dd46 +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 languageName: node linkType: hard @@ -11370,21 +11273,20 @@ __metadata: languageName: node linkType: hard -"whatwg-mimetype@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-mimetype@npm:5.0.0" - checksum: 10c0/eead164fe73a00dd82f817af6fc0bd22e9c273e1d55bf4bc6bdf2da7ad8127fca82ef00ea6a37892f5f5641f8e34128e09508f92126086baba126b9e0d57feb4 +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df languageName: node linkType: hard -"whatwg-url@npm:^16.0.0, whatwg-url@npm:^16.0.1": - version: 16.0.1 - resolution: "whatwg-url@npm:16.0.1" +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1": + version: 14.2.0 + resolution: "whatwg-url@npm:14.2.0" dependencies: - "@exodus/bytes": "npm:^1.11.0" - tr46: "npm:^6.0.0" - webidl-conversions: "npm:^8.0.1" - checksum: 10c0/e75565566abf3a2cdbd9f06c965dbcccee6ec4e9f0d3728ad5e08ceb9944279848bcaa211d35a29cb6d2df1e467dd05cfb59fbddf8a0adcd7d0bce9ffb703fd2 + tr46: "npm:^5.1.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272 languageName: node linkType: hard @@ -11567,6 +11469,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 + languageName: node + linkType: hard + "xml-name-validator@npm:^5.0.0": version: 5.0.0 resolution: "xml-name-validator@npm:5.0.0" From 430670b1b3da4d6240b466a649a9a4fa9a20b1e9 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 13:38:08 -0700 Subject: [PATCH 09/13] Fix cypress e2e import paths after monorepo restructure --- .../e2e/fire-behaviour-advisory-calculator-page.cy.ts | 2 +- web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts | 2 +- web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts | 2 +- .../wps-web/cypress/e2e/percentile-calculator-page.cy.ts | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts index 80ed6931e9..05b3cd6dea 100644 --- a/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts +++ b/web/apps/wps-web/cypress/e2e/fire-behaviour-advisory-calculator-page.cy.ts @@ -1,4 +1,4 @@ -import { FIRE_BEHAVIOR_CALC_ROUTE } from '../../src/utils/constants' +import { FIRE_BEHAVIOR_CALC_ROUTE } from '../../../../packages/utils/src/constants' import { FuelTypes } from '../../src/features/fbaCalculator/fuelTypes' describe('FireCalc Page', () => { diff --git a/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts index 7cdeede5b9..dc92bfec99 100644 --- a/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts +++ b/web/apps/wps-web/cypress/e2e/hfi-calculator-page.cy.ts @@ -1,4 +1,4 @@ -import { HFI_CALC_ROUTE } from '../../src/utils/constants' +import { HFI_CALC_ROUTE } from '../../../../packages/utils/src/constants' function interceptSelectStationTrue( fire_centre: number, diff --git a/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts b/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts index c38f202344..e503fe8859 100644 --- a/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts +++ b/web/apps/wps-web/cypress/e2e/morecast-2-page.cy.ts @@ -1,4 +1,4 @@ -import { MORE_CAST_2_ROUTE } from '../../src/utils/constants' +import { MORE_CAST_2_ROUTE } from '../../../../packages/utils/src/constants' describe('More Cast 2 Page', () => { beforeEach(() => { diff --git a/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts b/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts index a52ae52247..88dbbaf9f3 100644 --- a/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts +++ b/web/apps/wps-web/cypress/e2e/percentile-calculator-page.cy.ts @@ -1,6 +1,6 @@ -import { NOT_AVAILABLE } from '../../src/utils/strings' -import { PERCENTILE_CALC_ROUTE } from '../../src/utils/constants' -import { stationCodeQueryKey } from '../../src/utils/url' +import { NOT_AVAILABLE } from '../../../../packages/utils/src/strings' +import { PERCENTILE_CALC_ROUTE } from '../../../../packages/utils/src/constants' +import { stationCodeQueryKey } from '../../../../packages/utils/src/url' describe('Percentile Calculator Page', () => { describe('Weather station dropdown', () => { From 30bdbcc1ff8044f699c50782d0692c7fa0c0d674 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 13:47:58 -0700 Subject: [PATCH 10/13] Add CI script pass-throughs to workspace root --- web/package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web/package.json b/web/package.json index 4e78cc331a..fa24503eef 100644 --- a/web/package.json +++ b/web/package.json @@ -10,7 +10,10 @@ "build": "turbo build", "test": "turbo test", "lint": "turbo lint", - "dev": "turbo dev" + "dev": "turbo dev", + "cypress:ci": "yarn workspace @wps/wps-web run cypress:ci", + "coverage:ci": "yarn workspace @wps/wps-web run coverage:ci", + "finalizeCoverage": "yarn workspace @wps/wps-web run finalizeCoverage" }, "devDependencies": { "turbo": "^2.0.0" From 1550be032e437477ecfab96ed928f9555ef01006 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 14:02:09 -0700 Subject: [PATCH 11/13] Update docs --- web/apps/wps-web/README.md | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/web/apps/wps-web/README.md b/web/apps/wps-web/README.md index 139a638e47..77dab46546 100644 --- a/web/apps/wps-web/README.md +++ b/web/apps/wps-web/README.md @@ -10,21 +10,19 @@ Wildfire Predictive Services to support decision making in prevention, preparedn #### [Node.js](https://nodejs.org/en/) -- You’ll need to have Node >= 20.x and yarn on your machine. You can use [nvm](https://github.com/nvm-sh/nvm#installation) (macOS/Linux) or [nvm-windows](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows) to switch Node versions between different projects. -- Note: We are using Node 19 as a base image on our pipeline. -- On ubuntu: `sudo apt install nodejs` +- You’ll need to have Node >= 24.x and yarn on your machine. You can use [nvm](https://github.com/nvm-sh/nvm#installation) (macOS/Linux) or [nvm-windows](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows) to switch Node versions between different projects. #### [yarn](https://yarnpkg.com/) -- `npm install -g yarn` +- `corepack enable` ### Installing -In the project directory, run: +All commands should be run from the `web/` workspace root, not from this directory. -#### `yarn` +#### `yarn install` -Installs all dependencies in the node_modules folder. +Installs all dependencies for all packages in the monorepo. #### Cypress on WSL2 @@ -33,35 +31,35 @@ It's possible to configure cypress to run with an X-server with WSL2 and Windows The short version is: - Launch VcXsrv (remember to check "Disable access control") -- `yarn run cypress` +- `yarn workspace @wps/wps-web run cy:open` ### Executing program -In the project directory, create `.env` file at root using `.env.example` as a sample, then you can run: +From the `web/` workspace root, create `.env` file in `apps/wps-web/` using `apps/wps-web/.env.example` as a sample, then you can run: -#### `yarn start` +#### `yarn dev` Runs the app in the development mode. The page will reload if you make edits. You will also see any lint errors in the console. #### `yarn test` -Launches the jest test runner in the interactive watch mode. +Launches the vitest test runner across all packages. Includes logic only unit tests and [react-testing-library](https://testing-library.com/docs/react-testing-library/intro/) component tests. -#### `yarn cypress` +#### `yarn workspace @wps/wps-web run cy:open` Launches the cypress test runner in the interactive watch mode. Includes end-to-end / integration tests for frontend common path interactions. -#### `yarn run build` +#### `yarn build` -Builds the app for production to the `build` folder. +Builds the app for production to the `apps/wps-web/build` folder. It correctly bundles React in production mode and optimizes the build for the best performance. ##### Running the application in docker: -1. Create `.env` file at root using `.env.example` as a sample +1. Create `.env` file in `apps/wps-web/` using `apps/wps-web/.env.example` as a sample 2. Run `docker compose build` and then `docker compose up` 3. Open [http://localhost:3000](http://localhost:3000) to view it in the browser. From 443be3da36f74a0d27e29af9924cbc73e045b2b9 Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 14:13:22 -0700 Subject: [PATCH 12/13] yarn turbo commands --- web/apps/wps-web/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/apps/wps-web/README.md b/web/apps/wps-web/README.md index 77dab46546..70c43e6385 100644 --- a/web/apps/wps-web/README.md +++ b/web/apps/wps-web/README.md @@ -37,12 +37,14 @@ The short version is: From the `web/` workspace root, create `.env` file in `apps/wps-web/` using `apps/wps-web/.env.example` as a sample, then you can run: -#### `yarn dev` +All of the following commands use [Turbo](https://turbo.build/) to orchestrate tasks across the monorepo. + +#### `yarn turbo dev` Runs the app in the development mode. The page will reload if you make edits. You will also see any lint errors in the console. -#### `yarn test` +#### `yarn turbo test` Launches the vitest test runner across all packages. Includes logic only unit tests and [react-testing-library](https://testing-library.com/docs/react-testing-library/intro/) component tests. @@ -52,7 +54,7 @@ Includes logic only unit tests and [react-testing-library](https://testing-libra Launches the cypress test runner in the interactive watch mode. Includes end-to-end / integration tests for frontend common path interactions. -#### `yarn build` +#### `yarn turbo build` Builds the app for production to the `apps/wps-web/build` folder. It correctly bundles React in production mode and optimizes the build for the best performance. From 48aae5282b499916c3caf9f0ddf62b5a0ec86aaf Mon Sep 17 00:00:00 2001 From: Conor Brady Date: Mon, 16 Mar 2026 14:17:25 -0700 Subject: [PATCH 13/13] update archive path --- .github/workflows/integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 599b9d3c43..931732ea18 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -209,7 +209,7 @@ jobs: uses: actions/upload-artifact@v7 with: name: web-coverage-report - path: ./web/finalCoverage + path: ./web/apps/wps-web/finalCoverage upload-code-coverage: name: Coverage with CodeCov