diff --git a/package-lock.json b/package-lock.json
index d3a9ca558ee8324cf66ff2d569cd8cbd7d51ad64..352a2cf56430fbb9967371f4ffc53129463a3cb5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,10 +24,10 @@
         "@ghsc/nshmp-lib-ng": "^18.1.0",
         "@ghsc/nshmp-template": "^18.0.3",
         "@ghsc/nshmp-utils-ts": "^3.5.1",
-        "@ngrx/effects": "^17.2.0",
-        "@ngrx/router-store": "^17.2.0",
-        "@ngrx/schematics": "^17.2.0",
-        "@ngrx/store": "^17.2.0",
+        "@ngrx/effects": "^18.0.0",
+        "@ngrx/router-store": "^18.0.0",
+        "@ngrx/schematics": "^18.0.0",
+        "@ngrx/store": "^18.0.0",
         "angular-plotly.js": "^5.2.2",
         "d3-array": "^3.2.4",
         "d3-scale-chromatic": "^3.1.0",
@@ -56,7 +56,7 @@
         "@angular/language-service": "18.0.2",
         "@cypress/schematic": "^2.5.2",
         "@cypress/webpack-preprocessor": "^6.0.2",
-        "@ngrx/store-devtools": "^17.2.0",
+        "@ngrx/store-devtools": "^18.0.0",
         "@nx/cypress": "^19.2.2",
         "@nx/workspace": "^19.2.2",
         "@types/aws-sdk": "^2.7.0",
@@ -5976,16 +5976,16 @@
       ]
     },
     "node_modules/@ngrx/effects": {
-      "version": "17.2.0",
-      "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-17.2.0.tgz",
-      "integrity": "sha512-tXDJNsuBtbvI/7+vYnkDKKpUvLbopw1U5G6LoPnKNrbTPsPcUGmCqF5Su/ZoRN3BhXjt2j+eoeVdpBkxdxMRgg==",
+      "version": "18.0.0",
+      "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.0.tgz",
+      "integrity": "sha512-njDbltV4XnUO10VaIOoiXF+aCyhVnvg6NTLudG9uhK/+cuv3D10cTZ3pHv7ycjpc40Pp16Sz0SY+daj9HfvdKg==",
       "dependencies": {
         "@ngrx/operators": "17.0.0-beta.0",
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "^17.0.0",
-        "@ngrx/store": "17.2.0",
+        "@angular/core": "^18.0.0",
+        "@ngrx/store": "18.0.0",
         "rxjs": "^6.5.3 || ^7.5.0"
       }
     },
@@ -6001,47 +6001,47 @@
       }
     },
     "node_modules/@ngrx/router-store": {
-      "version": "17.2.0",
-      "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-17.2.0.tgz",
-      "integrity": "sha512-Vynfg2xsB57Oedf0Bb6mjC4MIeaF2OtAewsSnppGIM2b8pwL5W89r2+q2SGc2D6Mp3/pZF3HRI6NxhnHWJdYmg==",
+      "version": "18.0.0",
+      "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.0.tgz",
+      "integrity": "sha512-Kiyh7qjs5PdNjYCip+BA0hx/tpjP/pDr0gUlz3X+9qTMC1vjzPmuzposZbTT2wZE+Z81TOoqdaZ5ZgRxAxhIMw==",
       "dependencies": {
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "^17.0.0",
-        "@angular/core": "^17.0.0",
-        "@angular/router": "^17.0.0",
-        "@ngrx/store": "17.2.0",
+        "@angular/common": "^18.0.0",
+        "@angular/core": "^18.0.0",
+        "@angular/router": "^18.0.0",
+        "@ngrx/store": "18.0.0",
         "rxjs": "^6.5.3 || ^7.5.0"
       }
     },
     "node_modules/@ngrx/schematics": {
-      "version": "17.2.0",
-      "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-17.2.0.tgz",
-      "integrity": "sha512-7YQyPWaadxY2+Fe0oFIkClMpEKsC2HaxdjJY8SRTLnFOHj070r3Kp6mxGee46MVdfDNK47bUYnMPQi9A25EcVQ=="
+      "version": "18.0.0",
+      "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-18.0.0.tgz",
+      "integrity": "sha512-lYe/bePn6EH76wh0wPj4d3a8PCFKQaScuoQOjAy/nb1tF8lfSA+mLKhX6e8vmrdxdFaygwapx5JIfECdEmmPag=="
     },
     "node_modules/@ngrx/store": {
-      "version": "17.2.0",
-      "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-17.2.0.tgz",
-      "integrity": "sha512-7wKgZ59B/6yQSvvsU0DQXipDqpkAXv7LwcXLD5Ww7nvqN0fQoRPThMh4+Wv55DCJhE0bQc1NEMciLA47uRt7Wg==",
+      "version": "18.0.0",
+      "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.0.tgz",
+      "integrity": "sha512-U/0cX7cQ7kkQrleNq5PQ1gD84lSI+ox2SIiDNAAxm8li7/S63QuRATFJIkMcVavR8yoa7gZ0WpyEKTlYGxEE2g==",
       "dependencies": {
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "^17.0.0",
+        "@angular/core": "^18.0.0",
         "rxjs": "^6.5.3 || ^7.5.0"
       }
     },
     "node_modules/@ngrx/store-devtools": {
-      "version": "17.2.0",
-      "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-17.2.0.tgz",
-      "integrity": "sha512-ig0qr6hMexZGnrlxfHvZmu5CanRjH7hhx60XUbB5BdBvWJIIRaWKPLcsniiDUhljAD87gvzrrilbCTiML38+CA==",
+      "version": "18.0.0",
+      "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.0.0.tgz",
+      "integrity": "sha512-0XbUnDjpaYq8trJs/RqfEfvFQRgQ0Hm648ImZHTfF1CwHwDe5qZAkLuOt0D/e4YO8itMc4MymZJzEkfJz4HVWw==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.0.0"
       },
       "peerDependencies": {
-        "@ngrx/store": "17.2.0",
+        "@ngrx/store": "18.0.0",
         "rxjs": "^6.5.3 || ^7.5.0"
       }
     },
diff --git a/package.json b/package.json
index eecb95c54f841311cf9bf6d126f304b936cc584a..91a98a363318f4874e384c7b5292f70b949d4172 100644
--- a/package.json
+++ b/package.json
@@ -49,10 +49,11 @@
     "@ghsc/nshmp-lib-ng": "^18.1.0",
     "@ghsc/nshmp-template": "^18.0.3",
     "@ghsc/nshmp-utils-ts": "^3.5.1",
-    "@ngrx/effects": "^17.2.0",
-    "@ngrx/router-store": "^17.2.0",
-    "@ngrx/schematics": "^17.2.0",
-    "@ngrx/store": "^17.2.0",
+    "@ngrx/effects": "^18.0.0",
+    "@ngrx/operators": "^18.0.0",
+    "@ngrx/router-store": "^18.0.0",
+    "@ngrx/schematics": "^18.0.0",
+    "@ngrx/store": "^18.0.0",
     "angular-plotly.js": "^5.2.2",
     "d3-array": "^3.2.4",
     "d3-scale-chromatic": "^3.1.0",
@@ -81,7 +82,7 @@
     "@angular/language-service": "18.0.2",
     "@cypress/schematic": "^2.5.2",
     "@cypress/webpack-preprocessor": "^6.0.2",
-    "@ngrx/store-devtools": "^17.2.0",
+    "@ngrx/store-devtools": "^18.0.0",
     "@nx/cypress": "^19.2.2",
     "@nx/workspace": "^19.2.2",
     "@types/aws-sdk": "^2.7.0",
diff --git a/projects/nshmp-apps/src/app/hazard/disagg/utils/app.utils.ts b/projects/nshmp-apps/src/app/hazard/disagg/utils/app.utils.ts
index 9a845d325db925ca4909b672b8ebd8c21676107e..8bc5fd9ca092bcc99c2cbaa203cbd774c9b45e36 100644
--- a/projects/nshmp-apps/src/app/hazard/disagg/utils/app.utils.ts
+++ b/projects/nshmp-apps/src/app/hazard/disagg/utils/app.utils.ts
@@ -10,7 +10,7 @@ import {
   DisaggSummary,
 } from '@ghsc/nshmp-utils-ts/libs/nshmp-haz/www/disagg-service';
 import {NshmId} from '@ghsc/nshmp-utils-ts/libs/nshmp-lib/nshm';
-import {Action} from '@ngrx/store/src/models';
+import {Action} from '@ngrx/store';
 import {FormGroupState, SetValueAction} from 'ngrx-forms';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
 
diff --git a/projects/nshmp-apps/src/app/source/mfd/utils/app.utils.ts b/projects/nshmp-apps/src/app/source/mfd/utils/app.utils.ts
index 57902a785466191461a8fbc2704ebd14bf4bb359..77b2b66b02f100b849bcfd3cc6831afc782cbf26 100644
--- a/projects/nshmp-apps/src/app/source/mfd/utils/app.utils.ts
+++ b/projects/nshmp-apps/src/app/source/mfd/utils/app.utils.ts
@@ -6,7 +6,7 @@ import {
   TreeInfo,
 } from '@ghsc/nshmp-utils-ts/libs/nshmp-lib/model';
 import {NshmId} from '@ghsc/nshmp-utils-ts/libs/nshmp-lib/nshm';
-import {TypedAction} from '@ngrx/store/src/models';
+import {Action} from '@ngrx/store';
 import {FormGroupState, SetValueAction} from 'ngrx-forms';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
 
@@ -121,8 +121,8 @@ export function findTreeInfo(
 export function initialFormSetActions(
   form: FormGroupState<ControlForm>,
   formValues: ControlForm
-): TypedAction<NshmId | string>[] {
-  const actions: TypedAction<NshmId | string>[] = [];
+): Action<NshmId | string>[] {
+  const actions: Action<NshmId | string>[] = [];
 
   const {cumulative, model, source, sourceTree} = form.controls;
   actions.push(initializeValue(cumulative.id, formValues.cumulative));
@@ -143,7 +143,7 @@ export function initialFormSetActions(
 function initializeValue<T>(
   controlId: string,
   value: T
-): TypedAction<NshmId | string> {
+): Action<NshmId | string> {
   return new SetValueAction(controlId, value);
 }