You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ne...@apache.org on 2022/11/14 17:33:26 UTC

[helix] branch master updated: Cluster deletion confirmation for helix-front (#2274)

This is an automated email from the ASF dual-hosted git repository.

nealsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/master by this push:
     new ad27fa19e Cluster deletion confirmation for helix-front (#2274)
ad27fa19e is described below

commit ad27fa19e883df517f24a29fe3f24b3d1756e39d
Author: helix-bot <11...@users.noreply.github.com>
AuthorDate: Mon Nov 14 09:33:20 2022 -0800

    Cluster deletion confirmation for helix-front (#2274)
    
    Help ensure that a clusters is only deleted
    when the user really intends to delete that cluster.
---
 helix-front/documentation.json                     | 1120 ++++++++++++++++----
 helix-front/package.json                           |   10 +-
 .../cluster-detail/cluster-detail.component.ts     |   10 +-
 .../confirm-dialog-test.component.ts               |   40 +
 .../confirm-dialog/confirm-dialog.component.html   |    4 +-
 .../confirm-dialog/confirm-dialog.component.ts     |    3 +
 .../confirm-dialog/confirm-dialog.stories.ts       |   48 +
 helix-front/src/app/shared/helper.service.ts       |    9 +-
 .../app/shared/state-label/state-label.stories.ts  |    6 +-
 helix-front/yarn.lock                              |  476 ++++-----
 10 files changed, 1297 insertions(+), 429 deletions(-)

diff --git a/helix-front/documentation.json b/helix-front/documentation.json
index 9b3d435e8..14b5e1a02 100644
--- a/helix-front/documentation.json
+++ b/helix-front/documentation.json
@@ -3,13 +3,22 @@
     "interfaces": [
         {
             "name": "HelixSession",
-            "id": "interface-HelixSession-129325d3c46054df5f164f300ace41c5307a1f0c897af7994c7c0d8b4d4131735b381921ac7c6593cd091ad8c926c99ae57438852dd82916b220e8808542213c",
+            "id": "interface-HelixSession-1d5c4ab566de85237551f45f493e21719366587b74c3cbe29150e24a8b98c8d99fcfbc92dc9e5660b74dbd8c2e762d623e02620e1ce4d21c1e253f925a5e8d3a",
             "file": "server/controllers/d.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "interface",
-            "sourceCode": "import { Request } from 'express';\n\nexport interface HelixUserRequest extends Request {\n  session?: HelixSession;\n}\n\ninterface HelixSession {\n  username: string;\n  isAdmin: boolean;\n}\n",
+            "sourceCode": "import { Request } from 'express';\n\nexport interface HelixUserRequest extends Request {\n  session?: HelixSession;\n}\n\ninterface HelixSession {\n  // since this token is from a configurable\n  // identity source, the format really is\n  // `any` from helix-front's point of view.\n  identityToken: any;\n  username: string;\n  isAdmin: boolean;\n}\n",
             "properties": [
+                {
+                    "name": "identityToken",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "any",
+                    "optional": false,
+                    "description": "",
+                    "line": 11
+                },
                 {
                     "name": "isAdmin",
                     "deprecated": false,
@@ -17,7 +26,7 @@
                     "type": "boolean",
                     "optional": false,
                     "description": "",
-                    "line": 9
+                    "line": 13
                 },
                 {
                     "name": "username",
@@ -26,7 +35,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 8
+                    "line": 12
                 }
             ],
             "indexSignatures": [],
@@ -35,12 +44,12 @@
         },
         {
             "name": "HelixUserRequest",
-            "id": "interface-HelixUserRequest-129325d3c46054df5f164f300ace41c5307a1f0c897af7994c7c0d8b4d4131735b381921ac7c6593cd091ad8c926c99ae57438852dd82916b220e8808542213c",
+            "id": "interface-HelixUserRequest-1d5c4ab566de85237551f45f493e21719366587b74c3cbe29150e24a8b98c8d99fcfbc92dc9e5660b74dbd8c2e762d623e02620e1ce4d21c1e253f925a5e8d3a",
             "file": "server/controllers/d.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "interface",
-            "sourceCode": "import { Request } from 'express';\n\nexport interface HelixUserRequest extends Request {\n  session?: HelixSession;\n}\n\ninterface HelixSession {\n  username: string;\n  isAdmin: boolean;\n}\n",
+            "sourceCode": "import { Request } from 'express';\n\nexport interface HelixUserRequest extends Request {\n  session?: HelixSession;\n}\n\ninterface HelixSession {\n  // since this token is from a configurable\n  // identity source, the format really is\n  // `any` from helix-front's point of view.\n  identityToken: any;\n  username: string;\n  isAdmin: boolean;\n}\n",
             "properties": [
                 {
                     "name": "session",
@@ -100,12 +109,12 @@
         },
         {
             "name": "ListFieldObject",
-            "id": "interface-ListFieldObject-232abac58ace56edbeca1efd341fc2e2a74aa4ee8745604c402893dd5c1324ec8d7f333c38b0c356334b997ec2e3eee9bb288895cfa2e7ade36020f75b5e1edb",
+            "id": "interface-ListFieldObject-4b8fff68ba7ccb7a14a733c002190a7e5c760999f3a699168565ddeecf085df759c8918b7b69b728e480ecdbd894c972284cbe97c29ad2413b6f9ffed799247d",
             "file": "src/app/shared/models/node.model.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "interface",
-            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields: SimpleFieldObject[] = [];\n  listFields: ListFieldObject[] = [];\n  mapFields: MapFieldObject[] = [];\n [...]
+            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface Payload {\n  id: string;\n  simpleFields?: any;\n  listFields?: any;\n  mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields [...]
             "properties": [
                 {
                     "name": "name",
@@ -132,12 +141,12 @@
         },
         {
             "name": "MapFieldObject",
-            "id": "interface-MapFieldObject-232abac58ace56edbeca1efd341fc2e2a74aa4ee8745604c402893dd5c1324ec8d7f333c38b0c356334b997ec2e3eee9bb288895cfa2e7ade36020f75b5e1edb",
+            "id": "interface-MapFieldObject-4b8fff68ba7ccb7a14a733c002190a7e5c760999f3a699168565ddeecf085df759c8918b7b69b728e480ecdbd894c972284cbe97c29ad2413b6f9ffed799247d",
             "file": "src/app/shared/models/node.model.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "interface",
-            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields: SimpleFieldObject[] = [];\n  listFields: ListFieldObject[] = [];\n  mapFields: MapFieldObject[] = [];\n [...]
+            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface Payload {\n  id: string;\n  simpleFields?: any;\n  listFields?: any;\n  mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields [...]
             "properties": [
                 {
                     "name": "name",
@@ -162,14 +171,64 @@
             "kind": 165,
             "methods": []
         },
+        {
+            "name": "Payload",
+            "id": "interface-Payload-4b8fff68ba7ccb7a14a733c002190a7e5c760999f3a699168565ddeecf085df759c8918b7b69b728e480ecdbd894c972284cbe97c29ad2413b6f9ffed799247d",
+            "file": "src/app/shared/models/node.model.ts",
+            "deprecated": false,
+            "deprecationMessage": "",
+            "type": "interface",
+            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface Payload {\n  id: string;\n  simpleFields?: any;\n  listFields?: any;\n  mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields [...]
+            "properties": [
+                {
+                    "name": "id",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string",
+                    "optional": false,
+                    "description": "",
+                    "line": 19
+                },
+                {
+                    "name": "listFields",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "any",
+                    "optional": true,
+                    "description": "",
+                    "line": 21
+                },
+                {
+                    "name": "mapFields",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "any",
+                    "optional": true,
+                    "description": "",
+                    "line": 22
+                },
+                {
+                    "name": "simpleFields",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "any",
+                    "optional": true,
+                    "description": "",
+                    "line": 20
+                }
+            ],
+            "indexSignatures": [],
+            "kind": 165,
+            "methods": []
+        },
         {
             "name": "SimpleFieldObject",
-            "id": "interface-SimpleFieldObject-232abac58ace56edbeca1efd341fc2e2a74aa4ee8745604c402893dd5c1324ec8d7f333c38b0c356334b997ec2e3eee9bb288895cfa2e7ade36020f75b5e1edb",
+            "id": "interface-SimpleFieldObject-4b8fff68ba7ccb7a14a733c002190a7e5c760999f3a699168565ddeecf085df759c8918b7b69b728e480ecdbd894c972284cbe97c29ad2413b6f9ffed799247d",
             "file": "src/app/shared/models/node.model.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "interface",
-            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields: SimpleFieldObject[] = [];\n  listFields: ListFieldObject[] = [];\n  mapFields: MapFieldObject[] = [];\n [...]
+            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface Payload {\n  id: string;\n  simpleFields?: any;\n  listFields?: any;\n  mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields [...]
             "properties": [
                 {
                     "name": "name",
@@ -491,7 +550,7 @@
         },
         {
             "name": "ClusterService",
-            "id": "injectable-ClusterService-e6f198f99cb2bfd4380eb8bcd03ef0e49d1378dafc3683ef3aa23f2f0dd4c6bbd94ad38e3709ddd15c8121eac68c90507fb6469735386f6a6e91e5d77ed176a5",
+            "id": "injectable-ClusterService-1b7c5db1def61476053458bfd34ed41240ad6e103043443492ad80db7a658c7b17903da30e6b5ef6d27e6a8b8328f61e4e04bb8c9fcae6e5ba79bc784ed5ccdf",
             "file": "src/app/cluster/shared/cluster.service.ts",
             "properties": [],
             "methods": [
@@ -616,7 +675,7 @@
                     "optional": false,
                     "returnType": "any",
                     "typeParameters": [],
-                    "line": 53,
+                    "line": 50,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -1056,13 +1115,13 @@
             "deprecationMessage": "",
             "description": "",
             "rawdescription": "\n",
-            "sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Cluster } from './cluster.model';\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class ClusterService extends HelixService {\n  public getAll() {\n    return this.request('/clusters').pipe(\n      map((data) => data.clusters.sort().map((name) => <Cluster>{ name }))\n    );\n  }\n\n  public get(name: string) {\n    return this.reques [...]
+            "sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Cluster } from './cluster.model';\nimport { HelixService } from '../../core/helix.service';\n\n@Injectable()\nexport class ClusterService extends HelixService {\n  public getAll() {\n    return this.request('/clusters').pipe(\n      map((data) => data.clusters.sort().map((name) => <Cluster>{ name }))\n    );\n  }\n\n  public get(name: string) {\n    return this.reques [...]
             "extends": "HelixService",
             "type": "injectable"
         },
         {
             "name": "ConfigurationService",
-            "id": "injectable-ConfigurationService-32a90e7fa21feb5bea58be9002a29016ff108772f09befab1d35dcc795a5b6c4cab7370263429d07790ba511a7b363096897181bdd09e526ae7edb962be09170",
+            "id": "injectable-ConfigurationService-534b30e63399b706eee2a76fbb8d44a72de6ee2c61b3a7f527e7cc195d0abd5046bb0e618a1907c090432d0219d36c58192d392fb25fdfa2a065583c7115e949",
             "file": "src/app/configuration/shared/configuration.service.ts",
             "properties": [],
             "methods": [
@@ -1795,7 +1854,7 @@
             "deprecationMessage": "",
             "description": "",
             "rawdescription": "\n",
-            "sourceCode": "import { Injectable } from '@angular/core';\n\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class ConfigurationService extends HelixService {\n  public getClusterConfig(name: string) {\n    return this.request(`/clusters/${name}/configs`);\n  }\n\n  public setClusterConfig(name: string, config: Node) {\n    return this.post(\n      `/clusters/${name}/configs?command=upd [...]
+            "sourceCode": "import { Injectable } from '@angular/core';\n\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class ConfigurationService extends HelixService {\n  public getClusterConfig(name: string) {\n    return this.request(`/clusters/${name}/configs`);\n  }\n\n  public setClusterConfig(name: string, config: Node) {\n    return this.post(\n      `/clusters/${name}/configs?command=upd [...]
             "extends": "HelixService",
             "type": "injectable"
         },
@@ -2408,16 +2467,47 @@
         },
         {
             "name": "HelperService",
-            "id": "injectable-HelperService-6669da0574cbd942c0064b22d0c292e0f9aa8c6d87978943317572c746f13f71637fafa35f678537f9b0cbe6e4faba0b4a64eca2540bd97273880b712d2f7c28",
+            "id": "injectable-HelperService-260f75c0868c1437c527847fe3fb6e12cb0b8074436cea09c1529bcee3274b19a7dfeb2f893bccf5ca56f862aa02892c24b387af93bb9f414971ce8d44beb90a",
             "file": "src/app/shared/helper.service.ts",
             "properties": [],
             "methods": [
+                {
+                    "name": "parseMessage",
+                    "args": [
+                        {
+                            "name": "message",
+                            "type": "string | object",
+                            "deprecated": false,
+                            "deprecationMessage": ""
+                        }
+                    ],
+                    "optional": false,
+                    "returnType": "any",
+                    "typeParameters": [],
+                    "line": 12,
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "modifierKind": [
+                        121
+                    ],
+                    "jsdoctags": [
+                        {
+                            "name": "message",
+                            "type": "string | object",
+                            "deprecated": false,
+                            "deprecationMessage": "",
+                            "tagName": {
+                                "text": "param"
+                            }
+                        }
+                    ]
+                },
                 {
                     "name": "showConfirmation",
                     "args": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": ""
                         }
@@ -2425,13 +2515,13 @@
                     "optional": false,
                     "returnType": "any",
                     "typeParameters": [],
-                    "line": 27,
+                    "line": 33,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": "",
                             "tagName": {
@@ -2445,7 +2535,7 @@
                     "args": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": ""
                         }
@@ -2453,13 +2543,13 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 12,
+                    "line": 18,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": "",
                             "tagName": {
@@ -2473,7 +2563,7 @@
                     "args": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": ""
                         }
@@ -2481,13 +2571,13 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 21,
+                    "line": 27,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
                         {
                             "name": "message",
-                            "type": "string",
+                            "type": "string | object",
                             "deprecated": false,
                             "deprecationMessage": "",
                             "tagName": {
@@ -2501,7 +2591,7 @@
             "deprecationMessage": "",
             "description": "",
             "rawdescription": "\n",
-            "sourceCode": "import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { AlertDialogComponent } from './dialog/alert-dialog/alert-dialog.component';\nimport { ConfirmDialogComponent } from './dialog/confirm-dialog/confirm-dialog.component';\n\n@Injectable()\nexport class HelperService {\n  constructor(protected snackBar: MatSnackBar, protected dialog: MatDialog) {} [...]
+            "sourceCode": "import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { AlertDialogComponent } from './dialog/alert-dialog/alert-dialog.component';\nimport { ConfirmDialogComponent } from './dialog/confirm-dialog/confirm-dialog.component';\n\n@Injectable()\nexport class HelperService {\n  constructor(protected snackBar: MatSnackBar, protected dialog: MatDialog) {} [...]
             "constructorObj": {
                 "name": "constructor",
                 "description": "",
@@ -2929,7 +3019,7 @@
         },
         {
             "name": "InstanceService",
-            "id": "injectable-InstanceService-22f0f27fd80c231ddf8268d57b88a1c203499f1e18a8dd44148bcc84e74a741fd5a5acd199b089f092af74eb596996d12d8ae4ef69b575e10a4f493838255340",
+            "id": "injectable-InstanceService-2c2587cea833c5ef5e0ea6fb4d4f0a0139c732b150bb4e64ffd50a4f765c73b000408e21e16d1ea7dc7fea5609846c038027520fac44b259171cba2401104b4f",
             "file": "src/app/instance/shared/instance.service.ts",
             "properties": [],
             "methods": [
@@ -3494,7 +3584,7 @@
             "deprecationMessage": "",
             "description": "",
             "rawdescription": "\n",
-            "sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Instance } from './instance.model';\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class InstanceService extends HelixService {\n  public getAll(clusterName: string) {\n    return this.request(`/clusters/${clusterName}/instances`).pipe(\n      map((data) => {\n        const onl [...]
+            "sourceCode": "import { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\nimport { Instance } from './instance.model';\nimport { HelixService } from '../../core/helix.service';\nimport { Node } from '../../shared/models/node.model';\n\n@Injectable()\nexport class InstanceService extends HelixService {\n  public getAll(clusterName: string) {\n    return this.request(`/clusters/${clusterName}/instances`).pipe(\n      map((data) => {\n        const onl [...]
             "extends": "HelixService",
             "type": "injectable"
         },
@@ -4474,7 +4564,7 @@
         },
         {
             "name": "UserService",
-            "id": "injectable-UserService-2323d2e7b5fd77dd89e7789ae9d87d9117ac255de68441e830f29625185e00123e331ec5ee8ff90b8a41a304c4f13411dd258b4cf8d22e65af2c9346dd8c859e",
+            "id": "injectable-UserService-2a559e9de77788ab67a482b24cd008b5479b961e03aa9ce590bd050c807d2489d486f4ee5291c5128e0b0f006871e0d53b83722bdfc58e027201f9c68df29265",
             "file": "src/app/core/user.service.ts",
             "properties": [],
             "methods": [
@@ -4497,7 +4587,7 @@
                     "optional": false,
                     "returnType": "any",
                     "typeParameters": [],
-                    "line": 27,
+                    "line": 29,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -4521,7 +4611,7 @@
                         }
                     ],
                     "optional": false,
-                    "returnType": "Observable<object>",
+                    "returnType": "Observable<any>",
                     "typeParameters": [],
                     "line": 19,
                     "deprecated": false,
@@ -4555,7 +4645,7 @@
             "deprecationMessage": "",
             "description": "",
             "rawdescription": "\n",
-            "sourceCode": "import { catchError } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders, HttpClient, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Settings } from './settings';\n\n@Injectable()\nexport class UserService {\n  constructor(protected router: Router, private http: HttpClient) {}\n\n  public getCurrentUser(): Observable<unknown> {\n    ret [...]
+            "sourceCode": "import { catchError } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders, HttpClient, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Settings } from './settings';\n\n@Injectable()\nexport class UserService {\n  constructor(protected router: Router, private http: HttpClient) {}\n\n  public getCurrentUser(): Observable<unknown> {\n    ret [...]
             "constructorObj": {
                 "name": "constructor",
                 "description": "",
@@ -5490,12 +5580,12 @@
         },
         {
             "name": "HelixCtrl",
-            "id": "class-HelixCtrl-214f11a7ec6e26dadc5a1f31c3a677eea84a18b28ad62a021753b2cf3e523d942a2b3be418c993f9c1202025c4af1c89c57c68bd76ab17f1993b0539c57faf48",
+            "id": "class-HelixCtrl-b66c5fede44bb07c635bc61e76737e06e83c42991391cea8209cab75928ce9f08d9d4243df1c9c31ae601f24c1f0c0dd850d87175204f95382e95611f51bc9e8",
             "file": "server/controllers/helix.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "class",
-            "sourceCode": "import { Request, Response, Router } from 'express';\n\nimport * as request from 'request';\n\nimport { HELIX_ENDPOINTS } from '../config';\nimport { HelixUserRequest } from './d';\n\nexport class HelixCtrl {\n  static readonly ROUTE_PREFIX = '/api/helix';\n\n  constructor(router: Router) {\n    router.route('/helix/list').get(this.list);\n    router.route('/helix/*').all(this.proxy);\n  }\n\n  protected proxy(req: HelixUserRequest, res: Response) {\n    const  [...]
+            "sourceCode": "import { Request, Response, Router } from 'express';\n\nimport * as request from 'request';\n\nimport { HELIX_ENDPOINTS, IDENTITY_TOKEN_SOURCE } from '../config';\nimport { HelixUserRequest } from './d';\n\nexport class HelixCtrl {\n  static readonly ROUTE_PREFIX = '/api/helix';\n\n  constructor(router: Router) {\n    router.route('/helix/list').get(this.list);\n    router.route('/helix/*').all(this.proxy);\n  }\n\n  protected proxy(req: HelixUserRequest, res:  [...]
             "constructorObj": {
                 "name": "constructor",
                 "description": "",
@@ -5558,7 +5648,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 65,
+                    "line": 73,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6118,12 +6208,12 @@
         },
         {
             "name": "Node",
-            "id": "class-Node-232abac58ace56edbeca1efd341fc2e2a74aa4ee8745604c402893dd5c1324ec8d7f333c38b0c356334b997ec2e3eee9bb288895cfa2e7ade36020f75b5e1edb",
+            "id": "class-Node-4b8fff68ba7ccb7a14a733c002190a7e5c760999f3a699168565ddeecf085df759c8918b7b69b728e480ecdbd894c972284cbe97c29ad2413b6f9ffed799247d",
             "file": "src/app/shared/models/node.model.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "class",
-            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields: SimpleFieldObject[] = [];\n  listFields: ListFieldObject[] = [];\n  mapFields: MapFieldObject[] = [];\n [...]
+            "sourceCode": "import * as _ from 'lodash';\n\ninterface SimpleFieldObject {\n  name: string;\n  value: string;\n}\n\ninterface ListFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface MapFieldObject {\n  name: string;\n  value: SimpleFieldObject[];\n}\n\ninterface Payload {\n  id: string;\n  simpleFields?: any;\n  listFields?: any;\n  mapFields?: any;\n}\n\n// This is a typical Helix Node definition\nexport class Node {\n  id: string;\n  simpleFields [...]
             "constructorObj": {
                 "name": "constructor",
                 "description": "",
@@ -6137,7 +6227,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 23,
+                "line": 30,
                 "jsdoctags": [
                     {
                         "name": "obj",
@@ -6158,7 +6248,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 20
+                    "line": 27
                 },
                 {
                     "name": "listFields",
@@ -6168,7 +6258,7 @@
                     "type": "ListFieldObject[]",
                     "optional": false,
                     "description": "",
-                    "line": 22
+                    "line": 29
                 },
                 {
                     "name": "mapFields",
@@ -6178,7 +6268,7 @@
                     "type": "MapFieldObject[]",
                     "optional": false,
                     "description": "",
-                    "line": 23
+                    "line": 30
                 },
                 {
                     "name": "simpleFields",
@@ -6188,7 +6278,7 @@
                     "type": "SimpleFieldObject[]",
                     "optional": false,
                     "description": "",
-                    "line": 21
+                    "line": 28
                 }
             ],
             "methods": [
@@ -6217,7 +6307,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 59,
+                    "line": 66,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6272,7 +6362,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 52,
+                    "line": 59,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6312,7 +6402,7 @@
                     "optional": false,
                     "returnType": "string",
                     "typeParameters": [],
-                    "line": 79,
+                    "line": 86,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6343,7 +6433,7 @@
                     "optional": false,
                     "returnType": "SimpleFieldObject[]",
                     "typeParameters": [],
-                    "line": 109,
+                    "line": 131,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6786,12 +6876,12 @@
         },
         {
             "name": "UserCtrl",
-            "id": "class-UserCtrl-61284d7ac04cd016d5989398d522689680e307950cf1c9437e9963795cd53135e8069c0a52e0f309c6d498eadc960f489d524a29ff7a7148ea8c34999e7a67fe",
+            "id": "class-UserCtrl-eb768a2104b06325cce6a34e27d58f026062912330331b4f1bf1062203a65659e42b3aa3c3d3c9260e755e0066b786d68c4137b13d080e001a415329fb7d99d8",
             "file": "server/controllers/user.ts",
             "deprecated": false,
             "deprecationMessage": "",
             "type": "class",
-            "sourceCode": "import { Request, Response, Router } from 'express';\nimport * as LdapClient from 'ldapjs';\n\nimport { LDAP } from '../config';\nimport { HelixUserRequest } from './d';\n\nexport class UserCtrl {\n  constructor(router: Router) {\n    router.route('/user/authorize').get(this.authorize);\n    router.route('/user/login').post(this.login.bind(this));\n    router.route('/user/current').get(this.current);\n    router.route('/user/can').get(this.can);\n  }\n\n  prote [...]
+            "sourceCode": "import { Response, Router } from 'express';\nimport * as LdapClient from 'ldapjs';\nimport * as request from 'request';\n\nimport {\n  LDAP,\n  IDENTITY_TOKEN_SOURCE,\n  CUSTOM_IDENTITY_TOKEN_REQUEST_BODY,\n} from '../config';\nimport { HelixUserRequest } from './d';\n\nexport class UserCtrl {\n  constructor(router: Router) {\n    router.route('/user/authorize').get(this.authorize);\n    router.route('/user/login').post(this.login.bind(this));\n    router.route [...]
             "constructorObj": {
                 "name": "constructor",
                 "description": "",
@@ -6805,7 +6895,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 7,
+                "line": 12,
                 "jsdoctags": [
                     {
                         "name": "router",
@@ -6839,7 +6929,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 15,
+                    "line": 20,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6885,7 +6975,7 @@
                     "optional": false,
                     "returnType": "any",
                     "typeParameters": [],
-                    "line": 29,
+                    "line": 42,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6931,7 +7021,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 25,
+                    "line": 33,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6962,13 +7052,13 @@
                     "name": "login",
                     "args": [
                         {
-                            "name": "request",
+                            "name": "req",
                             "type": "HelixUserRequest",
                             "deprecated": false,
                             "deprecationMessage": ""
                         },
                         {
-                            "name": "response",
+                            "name": "res",
                             "type": "Response",
                             "deprecated": false,
                             "deprecationMessage": ""
@@ -6977,7 +7067,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 38,
+                    "line": 53,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -6985,7 +7075,7 @@
                     ],
                     "jsdoctags": [
                         {
-                            "name": "request",
+                            "name": "req",
                             "type": "HelixUserRequest",
                             "deprecated": false,
                             "deprecationMessage": "",
@@ -6994,7 +7084,7 @@
                             }
                         },
                         {
-                            "name": "response",
+                            "name": "res",
                             "type": "Response",
                             "deprecated": false,
                             "deprecationMessage": "",
@@ -7349,7 +7439,7 @@
         },
         {
             "name": "AppComponent",
-            "id": "component-AppComponent-9af619c55d9778edcf324805c6498f774b0f99dc0ee52daee05228bedc79d11859dd18b716f6447782974ac0fb569d1445c45de15cfba8243cbe6252f164a065",
+            "id": "component-AppComponent-d59185f86d30e473711e732239cf4a5fb2df02a89685c5e8b3f4e8780db508f2dcede12517ba61757bbb051b780a96de518e9589fe463b48667342da66cd2f0f",
             "file": "src/app/app.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -7379,7 +7469,7 @@
                     "type": "any",
                     "optional": false,
                     "description": "",
-                    "line": 28
+                    "line": 33
                 },
                 {
                     "name": "footerEnabled",
@@ -7389,7 +7479,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 26
+                    "line": 31
                 },
                 {
                     "name": "headerEnabled",
@@ -7399,7 +7489,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 25
+                    "line": 30
                 },
                 {
                     "name": "isLoading",
@@ -7409,7 +7499,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 27
+                    "line": 32
                 }
             ],
             "methodsClass": [
@@ -7419,7 +7509,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 65,
+                    "line": 70,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -7429,7 +7519,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 55,
+                    "line": 60,
                     "deprecated": false,
                     "deprecationMessage": ""
                 }
@@ -7441,7 +7531,7 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport {\n  Router,\n  ActivatedRoute,\n  NavigationStart,\n  NavigationEnd,\n  NavigationCancel,\n  NavigationError,\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\n// import { Angulartics2Piwik } from 'angulartics2/piwik';\n\nimport { UserService } from './core/user.service';\nimport { InputDialogComponent } from './shared/dialog/input-dialog/input-dialog.component';\nimp [...]
+            "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport {\n  Router,\n  ActivatedRoute,\n  NavigationStart,\n  NavigationEnd,\n  NavigationCancel,\n  NavigationError,\n} from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\n// import { Angulartics2Piwik } from 'angulartics2/piwik';\n\nimport { UserService } from './core/user.service';\nimport { InputDialogComponent } from './shared/dialog/input-dialog/input-dialog.component';\nimp [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
@@ -7487,7 +7577,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 28,
+                "line": 33,
                 "jsdoctags": [
                     {
                         "name": "route",
@@ -7952,7 +8042,7 @@
         },
         {
             "name": "ClusterListComponent",
-            "id": "component-ClusterListComponent-e454d7c43088e6f54e9d344876d63085bffdffac409088a266c10086fbe6de5ab5adebd3c0df29c98396971af400b006002c6d36e90a142775ccdc9e06cfa6f9",
+            "id": "component-ClusterListComponent-96a618ec59acde620249bdda1b57c2a61fefeecb19b3c9eef5f046dcca7032345cd8563639660af1a5283c3a033f654dfd4689e35ef439a065190e5e8f9bb0a4",
             "file": "src/app/cluster/cluster-list/cluster-list.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -7979,7 +8069,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 20
+                    "line": 21
                 },
                 {
                     "name": "clusters",
@@ -8019,7 +8109,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 21
+                    "line": 22
                 }
             ],
             "methodsClass": [
@@ -8029,7 +8119,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 55,
+                    "line": 59,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -8039,7 +8129,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 36,
+                    "line": 38,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -8049,7 +8139,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 30,
+                    "line": 31,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -8066,7 +8156,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 44,
+                    "line": 48,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -8089,11 +8179,11 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\n\nimport { ClusterService } from '../shared/cluster.service';\nimport { Cluster } from '../shared/cluster.model';\nimport { AlertDialogComponent } from '../../shared/dialog/alert-dialog/alert-dialog.component';\nimport { InputDialogComponent } from '../.. [...]
+            "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\n\nimport { ClusterService } from '../shared/cluster.service';\nimport { Cluster } from '../shared/cluster.model';\nimport { AlertDialogComponent } from '../../shared/dialog/alert-dialog/alert-dialog.component';\nimport { InputDialogComponent } from '../.. [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
-                    "data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.mat-spinner {\n  margin: 20px;\n}\n\n.cluster-list-item-selected h4 {\n  font-weight: 500;\n  color: mat.get-color-from-palette($hi-primary);\n}\n\n.error-message {\n  padding: 10px;\n}\n\n.mat-mini-fab {\n  position: fixed;\n  right: 16px;\n  top: 16px;\n}\n\n.empty {\n  font-size: 14px;\n  // font-style: italic;\n  padding: 10px;\n}\n",
+                    "data": "@use '@angular/material' as mat;\n@import 'src/theme.scss';\n\n.mat-nav-list {\n  display: flex;\n  flex-direction: column;\n}\n\n.cluster-list-button-group {\n  display: flex;\n  justify-content: space-between;\n  margin-right: 1rem;\n}\n\n.back-to-index-button {\n  align-self: flex-start;\n}\n\n.add-cluster-button {\n  align-self: flex-end;\n}\n\n.mat-spinner {\n  margin: 20px;\n}\n\n.cluster-list-item-selected h4 {\n  font-weight: 500;\n  color: mat.get-co [...]
                     "styleUrl": "./cluster-list.component.scss"
                 }
             ],
@@ -8129,7 +8219,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 21,
+                "line": 22,
                 "jsdoctags": [
                     {
                         "name": "clusterService",
@@ -8172,7 +8262,7 @@
             "implements": [
                 "OnInit"
             ],
-            "templateData": "<!--\n  ~ Licensed to the Apache Software Foundation (ASF) under one\n  ~ or more contributor license agreements.  See the NOTICE file\n  ~ distributed with this work for additional information\n  ~ regarding copyright ownership.  The ASF licenses this file\n  ~ to you under the Apache License, Version 2.0 (the\n  ~ \"License\"); you may not use this file except in compliance\n  ~ with the License.  You may obtain a copy of the License at\n  ~\n  ~     http:/ [...]
+            "templateData": "<!--\n  ~ Licensed to the Apache Software Foundation (ASF) under one\n  ~ or more contributor license agreements.  See the NOTICE file\n  ~ distributed with this work for additional information\n  ~ regarding copyright ownership.  The ASF licenses this file\n  ~ to you under the Apache License, Version 2.0 (the\n  ~ \"License\"); you may not use this file except in compliance\n  ~ with the License.  You may obtain a copy of the License at\n  ~\n  ~     http:/ [...]
         },
         {
             "name": "ConfigDetailComponent",
@@ -8546,6 +8636,84 @@
             ],
             "templateData": "<!--\n  ~ Licensed to the Apache Software Foundation (ASF) under one\n  ~ or more contributor license agreements.  See the NOTICE file\n  ~ distributed with this work for additional information\n  ~ regarding copyright ownership.  The ASF licenses this file\n  ~ to you under the Apache License, Version 2.0 (the\n  ~ \"License\"); you may not use this file except in compliance\n  ~ with the License.  You may obtain a copy of the License at\n  ~\n  ~     http:/ [...]
         },
+        {
+            "name": "ConfirmDialogTestComponent",
+            "id": "component-ConfirmDialogTestComponent-a1fe3ea07605b8814e649ad8d7416f2460dbf9fcb315a9bf08101456f2cce9f73ddeeea00e8bff65a34898783e29f8bbcf5b6ecd81d4150a8f07473aa4a91b12",
+            "file": "src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts",
+            "encapsulation": [],
+            "entryComponents": [],
+            "inputs": [],
+            "outputs": [],
+            "providers": [],
+            "selector": "hi-confirm-dialog-test",
+            "styleUrls": [
+                "./confirm-dialog.component.scss"
+            ],
+            "styles": [],
+            "template": "<button mat-flat-button (click)=\"launch()\">Launch</button>",
+            "templateUrl": [],
+            "viewProviders": [],
+            "inputsClass": [],
+            "outputsClass": [],
+            "propertiesClass": [],
+            "methodsClass": [
+                {
+                    "name": "launch",
+                    "args": [],
+                    "optional": false,
+                    "returnType": "void",
+                    "typeParameters": [],
+                    "line": 17,
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "modifierKind": [
+                        123
+                    ]
+                }
+            ],
+            "deprecated": false,
+            "deprecationMessage": "",
+            "hostBindings": [],
+            "hostListeners": [],
+            "description": "",
+            "rawdescription": "\n",
+            "type": "component",
+            "sourceCode": "import { Component } from '@angular/core';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MaterialModule } from 'app/shared/material.module';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n// Wrapper component for testing approach recommended in this answer:\n// https://stackoverflow.com/a/63953851/1732222 [...]
+            "assetsDirs": [],
+            "styleUrlsData": [
+                {
+                    "data": "",
+                    "styleUrl": "./confirm-dialog.component.scss"
+                }
+            ],
+            "stylesData": "",
+            "constructorObj": {
+                "name": "constructor",
+                "description": "",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "args": [
+                    {
+                        "name": "_dialog",
+                        "type": "MatDialog",
+                        "deprecated": false,
+                        "deprecationMessage": ""
+                    }
+                ],
+                "line": 14,
+                "jsdoctags": [
+                    {
+                        "name": "_dialog",
+                        "type": "MatDialog",
+                        "deprecated": false,
+                        "deprecationMessage": "",
+                        "tagName": {
+                            "text": "param"
+                        }
+                    }
+                ]
+            }
+        },
         {
             "name": "ControllerDetailComponent",
             "id": "component-ControllerDetailComponent-e04da49e353da895bbc10a6814958edca93cdc4225413ae00c0507cee7a22a2db8f081d67ca1d1dcf561488972a8549300542fa6634e11a3208cf91f96494afe",
@@ -11116,7 +11284,7 @@
         },
         {
             "name": "JobListComponent",
-            "id": "component-JobListComponent-401e65c8074d4bc5fe6e52b8ef7a7b553413967d6b9f048ebfcc011aa415eefbdf58917e528c667f4c4b40d8962d605a0beb82ec42151db1ffedfd1aaa76ffdd",
+            "id": "component-JobListComponent-a5573f0e5ef4cbb87ba2de5c7ab184e255c1d99386e23b0945f48793e19665ba581e805aee7f412fba3550bb1a67e89f6e4b570d7ec72a70c646f2a8df0fdf9b",
             "file": "src/app/workflow/job-list/job-list.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -11137,7 +11305,7 @@
                     "name": "jobs",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "line": 15,
+                    "line": 16,
                     "type": "Job[]",
                     "decorators": []
                 }
@@ -11152,7 +11320,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 21
+                    "line": 22
                 },
                 {
                     "name": "messages",
@@ -11162,7 +11330,7 @@
                     "type": "object",
                     "optional": false,
                     "description": "",
-                    "line": 26
+                    "line": 27
                 },
                 {
                     "name": "rowHeight",
@@ -11172,7 +11340,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 20
+                    "line": 21
                 },
                 {
                     "name": "sorts",
@@ -11182,20 +11350,20 @@
                     "type": "[]",
                     "optional": false,
                     "description": "",
-                    "line": 22
+                    "line": 23
                 },
                 {
                     "name": "table",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "any",
+                    "type": "DatatableComponent",
                     "optional": false,
                     "description": "",
-                    "line": 18,
+                    "line": 19,
                     "decorators": [
                         {
                             "name": "ViewChild",
-                            "stringifiedArguments": "'jobsTable', {static: true}"
+                            "stringifiedArguments": "'jobsTable', {static: false}"
                         }
                     ]
                 }
@@ -11207,7 +11375,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 34,
+                    "line": 35,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -11223,7 +11391,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 40,
+                    "line": 41,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -11250,7 +11418,7 @@
                     "optional": false,
                     "returnType": "string",
                     "typeParameters": [],
-                    "line": 36,
+                    "line": 37,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -11273,7 +11441,7 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit, Input, ViewChild } from '@angular/core';\n\nimport moment from 'moment';\n\nimport { Settings } from '../../core/settings';\nimport { Job } from '../shared/workflow.model';\n\n@Component({\n  selector: 'hi-job-list',\n  templateUrl: './job-list.component.html',\n  styleUrls: ['./job-list.component.scss'],\n})\nexport class JobListComponent implements OnInit {\n  @Input()\n  jobs: Job[];\n\n  @ViewChild('jobsTable', { static: true })\ [...]
+            "sourceCode": "import { Component, OnInit, Input, ViewChild } from '@angular/core';\n\nimport moment from 'moment';\n\nimport { Settings } from '../../core/settings';\nimport { Job } from '../shared/workflow.model';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\n@Component({\n  selector: 'hi-job-list',\n  templateUrl: './job-list.component.html',\n  styleUrls: ['./job-list.component.scss'],\n})\nexport class JobListComponent implements OnInit {\n  @Input()\ [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
@@ -11288,7 +11456,7 @@
                 "deprecated": false,
                 "deprecationMessage": "",
                 "args": [],
-                "line": 30
+                "line": 31
             },
             "implements": [
                 "OnInit"
@@ -12371,7 +12539,7 @@
         },
         {
             "name": "PartitionListComponent",
-            "id": "component-PartitionListComponent-a29c60e38be035480aaa5bbf1ed029b252ae9118f0eabec2ff0128c6ffbbf8b230fad02b6e19e9ec15671a19f896990476056329128a5f2c75f78aac5feda199",
+            "id": "component-PartitionListComponent-70a28f903354492334fb538855578ae022be22a96e1512071bffb8019f8ed3f1722a66f7d9160f7f965ca29e57ff8e3eefe2af51735f6a7df13c7e955260cc5a",
             "file": "src/app/resource/partition-list/partition-list.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -12397,7 +12565,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 19
+                    "line": 20
                 },
                 {
                     "name": "headerHeight",
@@ -12407,7 +12575,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 22
+                    "line": 23
                 },
                 {
                     "name": "isLoading",
@@ -12417,7 +12585,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 18
+                    "line": 19
                 },
                 {
                     "name": "partitions",
@@ -12426,7 +12594,7 @@
                     "type": "Partition[]",
                     "optional": false,
                     "description": "",
-                    "line": 21
+                    "line": 22
                 },
                 {
                     "name": "resource",
@@ -12435,7 +12603,7 @@
                     "type": "Resource",
                     "optional": false,
                     "description": "",
-                    "line": 20
+                    "line": 21
                 },
                 {
                     "name": "rowHeight",
@@ -12445,7 +12613,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 23
+                    "line": 24
                 },
                 {
                     "name": "sorts",
@@ -12455,20 +12623,20 @@
                     "type": "[]",
                     "optional": false,
                     "description": "",
-                    "line": 24
+                    "line": 25
                 },
                 {
                     "name": "table",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "any",
+                    "type": "DatatableComponent",
                     "optional": false,
                     "description": "",
-                    "line": 16,
+                    "line": 17,
                     "decorators": [
                         {
                             "name": "ViewChild",
-                            "stringifiedArguments": "'partitionsTable', {static: true}"
+                            "stringifiedArguments": "'partitionsTable', {static: false}"
                         }
                     ]
                 }
@@ -12480,7 +12648,7 @@
                     "optional": false,
                     "returnType": "any",
                     "typeParameters": [],
-                    "line": 44,
+                    "line": 45,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -12490,7 +12658,7 @@
                     "optional": false,
                     "returnType": "boolean | string",
                     "typeParameters": [],
-                    "line": 48,
+                    "line": 49,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -12500,7 +12668,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 67,
+                    "line": 68,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -12513,7 +12681,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 35,
+                    "line": 36,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -12529,7 +12697,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 61,
+                    "line": 62,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -12551,7 +12719,7 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { Partition, IReplica, Resource } from '../shared/resource.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ResourceService } from '../shared/resource.service';\n\n@Component({\n  selector: 'hi-partition-list',\n  templateUrl: './partition-list.component.html',\ [...]
+            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { Partition, IReplica, Resource } from '../shared/resource.model';\nimport { HelperService } from '../../shared/helper.service';\nimport { ResourceService } from '../shared/resource.service';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\n@Component({\n  selector: 'hi-parti [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
@@ -12585,7 +12753,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 27,
+                "line": 28,
                 "jsdoctags": [
                     {
                         "name": "route",
@@ -12997,7 +13165,7 @@
         },
         {
             "name": "ResourceListComponent",
-            "id": "component-ResourceListComponent-49abbe394c18fde27ff32033c476a81c9aac0cd53982ba3e83ca2d28ec5ef220f82f98ce226e9ae6350d08e8ca92f043955ffff4010eb38ee41fcbd448d80f26",
+            "id": "component-ResourceListComponent-d2d518a517b184de023ef2125e7b5c7ab63bb80e11aed1460a4cc593ced77ab4b6563f925defb1c1b6d4a3588f967706c3ead2cf525af620d74831aaae378df1",
             "file": "src/app/resource/resource-list/resource-list.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -13027,7 +13195,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 29
+                    "line": 30
                 },
                 {
                     "name": "headerHeight",
@@ -13037,7 +13205,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 25
+                    "line": 26
                 },
                 {
                     "name": "instanceName",
@@ -13046,7 +13214,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 30
+                    "line": 31
                 },
                 {
                     "name": "isForInstance",
@@ -13056,7 +13224,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 24
+                    "line": 25
                 },
                 {
                     "name": "isLoading",
@@ -13066,7 +13234,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 28
+                    "line": 29
                 },
                 {
                     "name": "resources",
@@ -13075,7 +13243,7 @@
                     "type": "Resource[]",
                     "optional": false,
                     "description": "",
-                    "line": 27
+                    "line": 28
                 },
                 {
                     "name": "rowHeight",
@@ -13085,7 +13253,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 26
+                    "line": 27
                 },
                 {
                     "name": "sorts",
@@ -13095,20 +13263,20 @@
                     "type": "[]",
                     "optional": false,
                     "description": "",
-                    "line": 31
+                    "line": 32
                 },
                 {
                     "name": "table",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "any",
+                    "type": "DatatableComponent",
                     "optional": false,
                     "description": "",
-                    "line": 22,
+                    "line": 23,
                     "decorators": [
                         {
                             "name": "ViewChild",
-                            "stringifiedArguments": "'resourcesTable', {static: true}"
+                            "stringifiedArguments": "'resourcesTable', {static: false}"
                         }
                     ]
                 }
@@ -13120,7 +13288,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 75,
+                    "line": 76,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "modifierKind": [
@@ -13133,7 +13301,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 44,
+                    "line": 45,
                     "deprecated": false,
                     "deprecationMessage": ""
                 },
@@ -13149,7 +13317,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 98,
+                    "line": 99,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -13171,7 +13339,7 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport * as _ from 'lodash';\n\nimport { Settings } from '../../core/settings';\nimport { Resource } from '../shared/resource.model';\nimport { ResourceService } from '../shared/resource.service';\nimport { WorkflowService } from '../../workflow/shared/workflow.serv [...]
+            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport * as _ from 'lodash';\n\nimport { Settings } from '../../core/settings';\nimport { Resource } from '../shared/resource.model';\nimport { ResourceService } from '../shared/resource.service';\nimport { WorkflowService } from '../../workflow/shared/workflow.serv [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
@@ -13217,7 +13385,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 34,
+                "line": 35,
                 "jsdoctags": [
                     {
                         "name": "router",
@@ -13891,7 +14059,7 @@
         },
         {
             "name": "WorkflowListComponent",
-            "id": "component-WorkflowListComponent-2e2bf1981a4a8976c73cb29e8b4c15ad197f86a5c4103d4cf865e2be4d4ea9a7cde57457d4817c4221afaf4eada80e6761dc7dbcde61d1dd042e0842e98ddc94",
+            "id": "component-WorkflowListComponent-eaf68edab8edbd12866f53e04eeee1fa5bb569710a581bcb44ee52e323af8e00fb81c5a4f81cbb51e0597bc48b1d21a6d324d0b79ed54b96cb2047b12e635a29",
             "file": "src/app/workflow/workflow-list/workflow-list.component.ts",
             "encapsulation": [],
             "entryComponents": [],
@@ -13917,7 +14085,7 @@
                     "type": "string",
                     "optional": false,
                     "description": "",
-                    "line": 21
+                    "line": 22
                 },
                 {
                     "name": "headerHeight",
@@ -13927,7 +14095,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 24
+                    "line": 25
                 },
                 {
                     "name": "isLoading",
@@ -13937,7 +14105,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 20
+                    "line": 21
                 },
                 {
                     "name": "rowHeight",
@@ -13947,7 +14115,7 @@
                     "type": "",
                     "optional": false,
                     "description": "",
-                    "line": 25
+                    "line": 26
                 },
                 {
                     "name": "sorts",
@@ -13957,20 +14125,20 @@
                     "type": "[]",
                     "optional": false,
                     "description": "",
-                    "line": 27
+                    "line": 28
                 },
                 {
                     "name": "table",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "any",
+                    "type": "DatatableComponent",
                     "optional": false,
                     "description": "",
-                    "line": 18,
+                    "line": 19,
                     "decorators": [
                         {
                             "name": "ViewChild",
-                            "stringifiedArguments": "'workflowsTable', {static: true}"
+                            "stringifiedArguments": "'workflowsTable', {static: false}"
                         }
                     ]
                 },
@@ -13981,7 +14149,7 @@
                     "type": "WorkflowRow[]",
                     "optional": false,
                     "description": "",
-                    "line": 22
+                    "line": 23
                 }
             ],
             "methodsClass": [
@@ -13998,7 +14166,7 @@
                     "optional": false,
                     "returnType": "boolean",
                     "typeParameters": [],
-                    "line": 64,
+                    "line": 65,
                     "deprecated": false,
                     "deprecationMessage": "",
                     "jsdoctags": [
@@ -14019,7 +14187,7 @@
                     "optional": false,
                     "returnType": "void",
                     "typeParameters": [],
-                    "line": 35,
+                    "line": 36,
                     "deprecated": false,
                     "deprecationMessage": ""
                 }
@@ -14031,7 +14199,7 @@
             "description": "",
             "rawdescription": "\n",
             "type": "component",
-            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { WorkflowService } from '../shared/workflow.service';\n\ntype WorkflowRow = {\n  name: string;\n};\n\n@Component({\n  selector: 'hi-workflow-list',\n  templateUrl: './workflow-list.component.html',\n  styleUrls: ['./workflow-list.component.scss'],\n})\nexport class WorkflowListCompon [...]
+            "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\n\nimport { Settings } from '../../core/settings';\nimport { WorkflowService } from '../shared/workflow.service';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\n\ntype WorkflowRow = {\n  name: string;\n};\n\n@Component({\n  selector: 'hi-workflow-list',\n  templateUrl: './workflow-list.component.html',\n  styleUrls: ['./workf [...]
             "assetsDirs": [],
             "styleUrlsData": [
                 {
@@ -14065,7 +14233,7 @@
                         "deprecationMessage": ""
                     }
                 ],
-                "line": 27,
+                "line": 28,
                 "jsdoctags": [
                     {
                         "name": "router",
@@ -14899,6 +15067,30 @@
                 "type": "string",
                 "defaultValue": "'cluster1'"
             },
+            {
+                "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "any",
+                "defaultValue": "{}",
+                "rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
+                "description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
+            },
+            {
+                "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "any",
+                "defaultValue": "{}",
+                "rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
+                "description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
+            },
             {
                 "name": "Default",
                 "ctype": "miscellaneous",
@@ -14909,6 +15101,16 @@
                 "type": "",
                 "defaultValue": "Template.bind({})"
             },
+            {
+                "name": "Delete",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "",
+                "defaultValue": "Template.bind({})"
+            },
             {
                 "name": "Empty",
                 "ctype": "miscellaneous",
@@ -14949,6 +15151,16 @@
                 "type": "object",
                 "defaultValue": "{\n  helix: [\n    {\n      default: 'http://localhost:8100/admin/v2',\n    },\n  ],\n}"
             },
+            {
+                "name": "HELIX_ENDPOINTS",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "object",
+                "defaultValue": "{\n  helix: [\n    {\n      default: 'http://localhost:8100/admin/v2',\n    },\n  ],\n}"
+            },
             {
                 "name": "HelperServiceStub",
                 "ctype": "miscellaneous",
@@ -14959,6 +15171,30 @@
                 "type": "object",
                 "defaultValue": "{\n  showError: (message: string) => {},\n  showSnackBar: (message: string) => {},\n  showConfirmation: (message: string): Promise<boolean> =>\n    new Promise<boolean>((f) => f(false)),\n}"
             },
+            {
+                "name": "IDENTITY_TOKEN_SOURCE",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string | undefined",
+                "defaultValue": "undefined",
+                "rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
+                "description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
+            },
+            {
+                "name": "IDENTITY_TOKEN_SOURCE",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string | undefined",
+                "defaultValue": "undefined",
+                "rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
+                "description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
+            },
             {
                 "name": "LDAP",
                 "ctype": "miscellaneous",
@@ -14969,6 +15205,26 @@
                 "type": "object",
                 "defaultValue": "{\n  uri: 'ldap://example.com',\n  base: 'DC=example,DC=com',\n  principalSuffix: '@example.com',\n  adminGroup: 'admin',\n}"
             },
+            {
+                "name": "LDAP",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "object",
+                "defaultValue": "{\n  uri: 'ldap://example.com',\n  base: 'DC=example,DC=com',\n  principalSuffix: '@example.com',\n  adminGroup: 'admin',\n}"
+            },
+            {
+                "name": "Leader",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/state-label/state-label.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "",
+                "defaultValue": "Template.bind({})"
+            },
             {
                 "name": "Loading",
                 "ctype": "miscellaneous",
@@ -14979,6 +15235,16 @@
                 "type": "",
                 "defaultValue": "Template.bind({})"
             },
+            {
+                "name": "Offline",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/state-label/state-label.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "",
+                "defaultValue": "Template.bind({})"
+            },
             {
                 "name": "server",
                 "ctype": "miscellaneous",
@@ -14999,6 +15265,16 @@
                 "type": "",
                 "defaultValue": "undefined"
             },
+            {
+                "name": "SESSION_STORE",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "",
+                "defaultValue": "undefined"
+            },
             {
                 "name": "SSL",
                 "ctype": "miscellaneous",
@@ -15009,6 +15285,36 @@
                 "type": "object",
                 "defaultValue": "{\n  port: 0,\n  keyfile: '',\n  certfile: '',\n  passfile: '',\n  cafiles: [],\n}"
             },
+            {
+                "name": "SSL",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "object",
+                "defaultValue": "{\n  port: 0,\n  keyfile: '',\n  certfile: '',\n  passfile: '',\n  cafiles: [],\n}"
+            },
+            {
+                "name": "Standby",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/state-label/state-label.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "",
+                "defaultValue": "Template.bind({})"
+            },
+            {
+                "name": "Template",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/state-label/state-label.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "Story",
+                "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n  template: `\n  <hi-state-label [state]=\"state\" [isReady]=\"isReady\"></hi-state-label>\n  `,\n})"
+            },
             {
                 "name": "Template",
                 "ctype": "miscellaneous",
@@ -15017,7 +15323,65 @@
                 "deprecated": false,
                 "deprecationMessage": "",
                 "type": "Story",
-                "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n})"
+                "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n  template: `\n  <div>Workflow List</div>\n  <span>There's no workflow here.</span>\n  <hi-workflow-list [workflowRows]=\"workflowRows\" [clusterName]=\"clusterName\" [isLoading]=\"isLoading\"></hi-workflow-list>\n   <router-outlet></router-outlet>\n`,\n})"
+            },
+            {
+                "name": "Template",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "Story",
+                "defaultValue": "(args) => ({\n  component: ConfirmDialogTestComponent,\n  template: `<hi-confirm-dialog-test></hi-confirm-dialog-test>`,\n  props: { ...args },\n})"
+            },
+            {
+                "name": "TOKEN_EXPIRATION_KEY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string",
+                "defaultValue": "'expires'",
+                "rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
+                "description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
+            },
+            {
+                "name": "TOKEN_EXPIRATION_KEY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string",
+                "defaultValue": "'expires'",
+                "rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
+                "description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
+            },
+            {
+                "name": "TOKEN_RESPONSE_KEY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string",
+                "defaultValue": "'token'",
+                "rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
+                "description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
+            },
+            {
+                "name": "TOKEN_RESPONSE_KEY",
+                "ctype": "miscellaneous",
+                "subtype": "variable",
+                "file": "server/config.example.ts",
+                "deprecated": false,
+                "deprecationMessage": "",
+                "type": "string",
+                "defaultValue": "'token'",
+                "rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
+                "description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
             },
             {
                 "name": "workflowRows",
@@ -15169,7 +15533,7 @@
                     "deprecated": false,
                     "deprecationMessage": "",
                     "type": "Story",
-                    "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n})"
+                    "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n  template: `\n  <div>Workflow List</div>\n  <span>There's no workflow here.</span>\n  <hi-workflow-list [workflowRows]=\"workflowRows\" [clusterName]=\"clusterName\" [isLoading]=\"isLoading\"></hi-workflow-list>\n   <router-outlet></router-outlet>\n`,\n})"
                 },
                 {
                     "name": "workflowRows",
@@ -15182,40 +15546,40 @@
                     "defaultValue": "[{ name: 'workflow1' }]"
                 }
             ],
-            "src/environments/environment.prod.ts": [
+            "server/config.ts": [
                 {
-                    "name": "environment",
+                    "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
                     "ctype": "miscellaneous",
                     "subtype": "variable",
-                    "file": "src/environments/environment.prod.ts",
+                    "file": "server/config.ts",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "object",
-                    "defaultValue": "{\n  production: true,\n}"
-                }
-            ],
-            "src/environments/environment.ts": [
+                    "type": "any",
+                    "defaultValue": "{}",
+                    "rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
+                    "description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
+                },
                 {
-                    "name": "environment",
+                    "name": "HELIX_ENDPOINTS",
                     "ctype": "miscellaneous",
                     "subtype": "variable",
-                    "file": "src/environments/environment.ts",
+                    "file": "server/config.ts",
                     "deprecated": false,
                     "deprecationMessage": "",
                     "type": "object",
-                    "defaultValue": "{\n  production: false,\n  piwik: {\n    url: '//vxu-ld1.linkedin.biz/piwik/',\n    id: '3',\n  },\n}"
-                }
-            ],
-            "server/config.ts": [
+                    "defaultValue": "{\n  helix: [\n    {\n      default: 'http://localhost:8100/admin/v2',\n    },\n  ],\n}"
+                },
                 {
-                    "name": "HELIX_ENDPOINTS",
+                    "name": "IDENTITY_TOKEN_SOURCE",
                     "ctype": "miscellaneous",
                     "subtype": "variable",
                     "file": "server/config.ts",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "object",
-                    "defaultValue": "{\n  helix: [\n    {\n      default: 'http://localhost:8100/admin/v2',\n    },\n  ],\n}"
+                    "type": "string | undefined",
+                    "defaultValue": "undefined",
+                    "rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
+                    "description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
                 },
                 {
                     "name": "LDAP",
@@ -15246,31 +15610,233 @@
                     "deprecationMessage": "",
                     "type": "object",
                     "defaultValue": "{\n  port: 0,\n  keyfile: '',\n  certfile: '',\n  passfile: '',\n  cafiles: [],\n}"
+                },
+                {
+                    "name": "TOKEN_EXPIRATION_KEY",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string",
+                    "defaultValue": "'expires'",
+                    "rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
+                    "description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
+                },
+                {
+                    "name": "TOKEN_RESPONSE_KEY",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string",
+                    "defaultValue": "'token'",
+                    "rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
+                    "description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
                 }
             ],
-            "src/testing/stubs.ts": [
+            "server/config.example.ts": [
                 {
-                    "name": "HelperServiceStub",
+                    "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
                     "ctype": "miscellaneous",
                     "subtype": "variable",
-                    "file": "src/testing/stubs.ts",
+                    "file": "server/config.example.ts",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "type": "object",
-                    "defaultValue": "{\n  showError: (message: string) => {},\n  showSnackBar: (message: string) => {},\n  showConfirmation: (message: string): Promise<boolean> =>\n    new Promise<boolean>((f) => f(false)),\n}"
-                }
-            ]
-        },
-        "groupedFunctions": {
-            "server/routes.ts": [
+                    "type": "any",
+                    "defaultValue": "{}",
+                    "rawdescription": "Any custom object that you would like\nto include in the body of the request\nto your custom identity source.",
+                    "description": "<p>Any custom object that you would like\nto include in the body of the request\nto your custom identity source.</p>\n"
+                },
                 {
-                    "name": "setRoutes",
-                    "file": "server/routes.ts",
+                    "name": "HELIX_ENDPOINTS",
                     "ctype": "miscellaneous",
-                    "subtype": "function",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
                     "deprecated": false,
                     "deprecationMessage": "",
-                    "description": "",
+                    "type": "object",
+                    "defaultValue": "{\n  helix: [\n    {\n      default: 'http://localhost:8100/admin/v2',\n    },\n  ],\n}"
+                },
+                {
+                    "name": "IDENTITY_TOKEN_SOURCE",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string | undefined",
+                    "defaultValue": "undefined",
+                    "rawdescription": "The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.",
+                    "description": "<p>The url of your Identity Token API.\nThis an API that should expect LDAP credentials\nand if the LDAP credentials are valid\nrespond with a unique token of some kind.</p>\n"
+                },
+                {
+                    "name": "LDAP",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "object",
+                    "defaultValue": "{\n  uri: 'ldap://example.com',\n  base: 'DC=example,DC=com',\n  principalSuffix: '@example.com',\n  adminGroup: 'admin',\n}"
+                },
+                {
+                    "name": "SESSION_STORE",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "",
+                    "defaultValue": "undefined"
+                },
+                {
+                    "name": "SSL",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "object",
+                    "defaultValue": "{\n  port: 0,\n  keyfile: '',\n  certfile: '',\n  passfile: '',\n  cafiles: [],\n}"
+                },
+                {
+                    "name": "TOKEN_EXPIRATION_KEY",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string",
+                    "defaultValue": "'expires'",
+                    "rawdescription": "This is the key that helix-front uses\nto access the token expiration datetime",
+                    "description": "<p>This is the key that helix-front uses\nto access the token expiration datetime</p>\n"
+                },
+                {
+                    "name": "TOKEN_RESPONSE_KEY",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "server/config.example.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "string",
+                    "defaultValue": "'token'",
+                    "rawdescription": "This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.",
+                    "description": "<p>This is the key that helix-front uses\nto access the token itself\nfrom the custom identity token response\nsent by your Identity Token API.</p>\n"
+                }
+            ],
+            "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts": [
+                {
+                    "name": "Delete",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "",
+                    "defaultValue": "Template.bind({})"
+                },
+                {
+                    "name": "Template",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "Story",
+                    "defaultValue": "(args) => ({\n  component: ConfirmDialogTestComponent,\n  template: `<hi-confirm-dialog-test></hi-confirm-dialog-test>`,\n  props: { ...args },\n})"
+                }
+            ],
+            "src/environments/environment.prod.ts": [
+                {
+                    "name": "environment",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/environments/environment.prod.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "object",
+                    "defaultValue": "{\n  production: true,\n}"
+                }
+            ],
+            "src/environments/environment.ts": [
+                {
+                    "name": "environment",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/environments/environment.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "object",
+                    "defaultValue": "{\n  production: false,\n  piwik: {\n    url: '//vxu-ld1.linkedin.biz/piwik/',\n    id: '3',\n  },\n}"
+                }
+            ],
+            "src/testing/stubs.ts": [
+                {
+                    "name": "HelperServiceStub",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/testing/stubs.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "object",
+                    "defaultValue": "{\n  showError: (message: string) => {},\n  showSnackBar: (message: string) => {},\n  showConfirmation: (message: string): Promise<boolean> =>\n    new Promise<boolean>((f) => f(false)),\n}"
+                }
+            ],
+            "src/app/shared/state-label/state-label.stories.ts": [
+                {
+                    "name": "Leader",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/state-label/state-label.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "",
+                    "defaultValue": "Template.bind({})"
+                },
+                {
+                    "name": "Offline",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/state-label/state-label.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "",
+                    "defaultValue": "Template.bind({})"
+                },
+                {
+                    "name": "Standby",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/state-label/state-label.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "",
+                    "defaultValue": "Template.bind({})"
+                },
+                {
+                    "name": "Template",
+                    "ctype": "miscellaneous",
+                    "subtype": "variable",
+                    "file": "src/app/shared/state-label/state-label.stories.ts",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "type": "Story",
+                    "defaultValue": "(args: any) => ({\n  props: {\n    ...args,\n  },\n  template: `\n  <hi-state-label [state]=\"state\" [isReady]=\"isReady\"></hi-state-label>\n  `,\n})"
+                }
+            ]
+        },
+        "groupedFunctions": {
+            "server/routes.ts": [
+                {
+                    "name": "setRoutes",
+                    "file": "server/routes.ts",
+                    "ctype": "miscellaneous",
+                    "subtype": "function",
+                    "deprecated": false,
+                    "deprecationMessage": "",
+                    "description": "",
                     "args": [
                         {
                             "name": "app",
@@ -15325,7 +15891,7 @@
     },
     "routes": [],
     "coverage": {
-        "count": 0,
+        "count": 7,
         "status": "low",
         "files": [
             {
@@ -15348,6 +15914,96 @@
                 "coverageCount": "0/1",
                 "status": "low"
             },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "HELIX_ENDPOINTS",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "IDENTITY_TOKEN_SOURCE",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "LDAP",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "SESSION_STORE",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "SSL",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "TOKEN_EXPIRATION_KEY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
+            {
+                "filePath": "server/config.example.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "TOKEN_RESPONSE_KEY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
+            {
+                "filePath": "server/config.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "CUSTOM_IDENTITY_TOKEN_REQUEST_BODY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
             {
                 "filePath": "server/config.ts",
                 "type": "variable",
@@ -15358,6 +16014,16 @@
                 "coverageCount": "0/1",
                 "status": "low"
             },
+            {
+                "filePath": "server/config.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "IDENTITY_TOKEN_SOURCE",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
             {
                 "filePath": "server/config.ts",
                 "type": "variable",
@@ -15388,13 +16054,33 @@
                 "coverageCount": "0/1",
                 "status": "low"
             },
+            {
+                "filePath": "server/config.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "TOKEN_EXPIRATION_KEY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
+            {
+                "filePath": "server/config.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "TOKEN_RESPONSE_KEY",
+                "coveragePercent": 100,
+                "coverageCount": "1/1",
+                "status": "very-good"
+            },
             {
                 "filePath": "server/controllers/d.ts",
                 "type": "interface",
                 "linktype": "interface",
                 "name": "HelixSession",
                 "coveragePercent": 0,
-                "coverageCount": "0/3",
+                "coverageCount": "0/4",
                 "status": "low"
             },
             {
@@ -15795,6 +16481,15 @@
                 "coverageCount": "0/5",
                 "status": "low"
             },
+            {
+                "filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts",
+                "type": "component",
+                "linktype": "component",
+                "name": "ConfirmDialogTestComponent",
+                "coveragePercent": 0,
+                "coverageCount": "0/3",
+                "status": "low"
+            },
             {
                 "filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts",
                 "type": "component",
@@ -15804,6 +16499,26 @@
                 "coverageCount": "0/7",
                 "status": "low"
             },
+            {
+                "filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Delete",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Template",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
             {
                 "filePath": "src/app/shared/dialog/input-dialog/input-dialog.component.ts",
                 "type": "component",
@@ -15828,7 +16543,7 @@
                 "linktype": "injectable",
                 "name": "HelperService",
                 "coveragePercent": 0,
-                "coverageCount": "0/5",
+                "coverageCount": "0/6",
                 "status": "low"
             },
             {
@@ -15894,6 +16609,15 @@
                 "coverageCount": "0/3",
                 "status": "low"
             },
+            {
+                "filePath": "src/app/shared/models/node.model.ts",
+                "type": "interface",
+                "linktype": "interface",
+                "name": "Payload",
+                "coveragePercent": 0,
+                "coverageCount": "0/5",
+                "status": "low"
+            },
             {
                 "filePath": "src/app/shared/models/node.model.ts",
                 "type": "interface",
@@ -15921,6 +16645,46 @@
                 "coverageCount": "0/5",
                 "status": "low"
             },
+            {
+                "filePath": "src/app/shared/state-label/state-label.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Leader",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "src/app/shared/state-label/state-label.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Offline",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "src/app/shared/state-label/state-label.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Standby",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
+            {
+                "filePath": "src/app/shared/state-label/state-label.stories.ts",
+                "type": "variable",
+                "linktype": "miscellaneous",
+                "linksubtype": "variable",
+                "name": "Template",
+                "coveragePercent": 0,
+                "coverageCount": "0/1",
+                "status": "low"
+            },
             {
                 "filePath": "src/app/workflow/job-detail/job-detail.component.ts",
                 "type": "component",
diff --git a/helix-front/package.json b/helix-front/package.json
index 450419a91..fab4489be 100644
--- a/helix-front/package.json
+++ b/helix-front/package.json
@@ -122,11 +122,11 @@
     "@babel/preset-typescript": "^7.18.6",
     "@compodoc/compodoc": "^1.1.19",
     "@cypress/schematic": "2.0.0",
-    "@storybook/addon-actions": "^6.5.10",
-    "@storybook/angular": "^6.5.10",
-    "@storybook/builder-webpack5": "^6.5.0-rc.1",
-    "@storybook/core-common": "^6.5.10",
-    "@storybook/manager-webpack5": "^6.5.0-rc.1",
+    "@storybook/addon-actions": "^6.5.13",
+    "@storybook/angular": "^6.5.13",
+    "@storybook/builder-webpack5": "^6.5.13",
+    "@storybook/core-common": "^6.5.13",
+    "@storybook/manager-webpack5": "^6.5.13",
     "@types/hammerjs": "^2.0.34",
     "@types/jest": "^28.1.1",
     "@types/lodash": "4.14.120",
diff --git a/helix-front/src/app/cluster/cluster-detail/cluster-detail.component.ts b/helix-front/src/app/cluster/cluster-detail/cluster-detail.component.ts
index 9bca26334..ca87a8ff5 100644
--- a/helix-front/src/app/cluster/cluster-detail/cluster-detail.component.ts
+++ b/helix-front/src/app/cluster/cluster-detail/cluster-detail.component.ts
@@ -196,11 +196,17 @@ export class ClusterDetailComponent implements OnInit {
 
   deleteCluster() {
     this.helperService
-      .showConfirmation('Are you sure you want to delete this cluster?')
+      .showConfirmation(
+        'Are you sure you want to delete this cluster? This cannot be undone.',
+        'Confirm Cluster Deletion',
+        `Delete Cluster ${this.clusterName}`
+      )
       .then((result) => {
         if (result) {
           this.clusterService.remove(this.cluster.name).subscribe((data) => {
-            this.helperService.showSnackBar('Cluster deleted!');
+            this.helperService.showSnackBar(
+              `Cluster ${this.clusterName} deleted`
+            );
             // FIXME: should reload cluster list as well
             this.router.navigate(['..'], { relativeTo: this.route });
           });
diff --git a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts
new file mode 100644
index 000000000..2e52cc439
--- /dev/null
+++ b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog-test.component.ts
@@ -0,0 +1,40 @@
+import { Component, OnInit, Input } from '@angular/core';
+import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { MaterialModule } from 'app/shared/material.module';
+import { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
+
+// Wrapper component for testing approach recommended in this answer:
+// https://stackoverflow.com/a/63953851/1732222
+@Component({
+  selector: 'hi-confirm-dialog-test',
+  template: ` <button mat-flat-button (click)="openDialog()">
+    Open Dialog
+  </button>`,
+  styleUrls: ['./confirm-dialog.component.scss'],
+})
+export class ConfirmDialogTestComponent {
+  @Input() data: any;
+
+  constructor(public dialog: MatDialog) {}
+
+  public openDialog(): void {
+    this.dialog.open(ConfirmDialogComponent, {
+      data: this.data,
+    });
+  }
+}
+
+export default () => ({
+  moduleMetadata: {
+    _imports: [BrowserAnimationsModule, MatDialogModule, MaterialModule],
+    get imports() {
+      return this._imports;
+    },
+    set imports(value) {
+      this._imports = value;
+    },
+    declarations: [ConfirmDialogTestComponent],
+  },
+  component: ConfirmDialogTestComponent,
+});
diff --git a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.html b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.html
index ffb60ebeb..219a99577 100644
--- a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.html
+++ b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.html
@@ -33,6 +33,8 @@
     >
       Cancel
     </button>
-    <button mat-button type="button" (click)="onConfirm()">Continue</button>
+    <button mat-button type="button" (click)="onConfirm()">
+      {{ confirmButtonText }}
+    </button>
   </div>
 </form>
diff --git a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts
index dcf3ccfea..77fb2f80f 100644
--- a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts
+++ b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.component.ts
@@ -10,6 +10,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
 export class ConfirmDialogComponent implements OnInit {
   title: string;
   message: string;
+  confirmButtonText: string;
 
   constructor(
     @Inject(MAT_DIALOG_DATA) protected data: any,
@@ -20,6 +21,8 @@ export class ConfirmDialogComponent implements OnInit {
     this.title = (this.data && this.data.title) || 'Confirmation';
     this.message =
       (this.data && this.data.message) || 'Are you sure about this?';
+    this.confirmButtonText =
+      (this.data && this.data.confirmButtonText) || 'Continue';
   }
 
   onConfirm() {
diff --git a/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts
new file mode 100644
index 000000000..4d4035d7b
--- /dev/null
+++ b/helix-front/src/app/shared/dialog/confirm-dialog/confirm-dialog.stories.ts
@@ -0,0 +1,48 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import {
+  moduleMetadata,
+  Meta,
+  Story,
+  componentWrapperDecorator,
+} from '@storybook/angular';
+
+import { ConfirmDialogTestComponent } from './confirm-dialog-test.component';
+import { SharedModule } from '../../shared.module';
+import { MaterialModule } from '../../material.module';
+import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
+import { ConfirmDialogComponent } from './confirm-dialog.component';
+import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+
+export default {
+  component: ConfirmDialogTestComponent,
+  title: 'Confirm Dialog Test',
+  excludeStories: /.*Data$/,
+  decorators: [
+    moduleMetadata({
+      imports: [SharedModule, MaterialModule, ReactiveFormsModule],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+    }),
+    //👇 Wraps our stories with a decorator
+    componentWrapperDecorator(
+      (story) => `<div style="margin: 3em">${story}</div>`
+    ),
+  ],
+} as Meta;
+
+const Template: Story = (args) => ({
+  component: ConfirmDialogTestComponent,
+  template: `<hi-confirm-dialog-test [data]="data"></hi-confirm-dialog-test>`,
+  props: {
+    ...args,
+  },
+});
+
+export const Delete = Template.bind({});
+Delete.args = {
+  data: {
+    title: 'Confirm Delete',
+    message:
+      'Are you sure you want to delete this cluster? This cannot be undone.',
+    confirmButtonText: "Yes, I'm sure",
+  },
+};
diff --git a/helix-front/src/app/shared/helper.service.ts b/helix-front/src/app/shared/helper.service.ts
index 099f35800..aa4538ae5 100644
--- a/helix-front/src/app/shared/helper.service.ts
+++ b/helix-front/src/app/shared/helper.service.ts
@@ -30,12 +30,17 @@ export class HelperService {
     });
   }
 
-  showConfirmation(message: string | object) {
+  showConfirmation(
+    message: string | object,
+    title?: string,
+    confirmButtonText?: string
+  ) {
     return this.dialog
       .open(ConfirmDialogComponent, {
         data: {
-          title: 'Confirmation',
           message: this.parseMessage(message),
+          title,
+          confirmButtonText,
         },
       })
       .afterClosed()
diff --git a/helix-front/src/app/shared/state-label/state-label.stories.ts b/helix-front/src/app/shared/state-label/state-label.stories.ts
index 8f475a775..031add691 100644
--- a/helix-front/src/app/shared/state-label/state-label.stories.ts
+++ b/helix-front/src/app/shared/state-label/state-label.stories.ts
@@ -48,12 +48,12 @@ Offline.args = {
 
 export const Standby = Template.bind({});
 Standby.args = {
-  state: "STANDBY",
+  state: 'STANDBY',
   isReady: true,
-}
+};
 
 export const Leader = Template.bind({});
 Leader.args = {
   state: 'LEADER',
   isReady: true,
-};
\ No newline at end of file
+};
diff --git a/helix-front/yarn.lock b/helix-front/yarn.lock
index 652a8c14f..e2641f9af 100644
--- a/helix-front/yarn.lock
+++ b/helix-front/yarn.lock
@@ -2388,18 +2388,18 @@
   dependencies:
     "@sinonjs/commons" "^1.7.0"
 
-"@storybook/addon-actions@^6.5.10":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.5.12.tgz#9d2bf3bffa41cf4f92c7220c8f6e3a3f5da55019"
-  integrity sha512-yEbyKjBsSRUr61SlS+SOTqQwdumO8Wa3GoHO3AfmvoKfzdGrM7w8G5Zs9Iev16khWg/7bQvoH3KZsg/hQuKnNg==
-  dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/api" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/components" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+"@storybook/addon-actions@^6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.5.13.tgz#84535dda78c7fe15fc61f19a23ed1440952f3c76"
+  integrity sha512-3Tji0gIy95havhTpSc6CsFl5lNxGn4O5Y1U9fyji+GRkKqDFOrvVLYAHPtLOpYdEI5tF0bDo+akiqfDouY8+eA==
+  dependencies:
+    "@storybook/addons" "6.5.13"
+    "@storybook/api" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/components" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/theming" "6.5.12"
+    "@storybook/theming" "6.5.13"
     core-js "^3.8.2"
     fast-deep-equal "^3.1.3"
     global "^4.4.0"
@@ -2413,39 +2413,39 @@
     util-deprecate "^1.0.2"
     uuid-browser "^3.1.0"
 
-"@storybook/addons@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.5.12.tgz#891767b5f88ea99b956cf19e9e2893594068adc7"
-  integrity sha512-y3cgxZq41YGnuIlBJEuJjSFdMsm8wnvlNOGUP9Q+Er2dgfx8rJz4Q22o4hPjpvpaj4XdBtxCJXI2NeFpN59+Cw==
+"@storybook/addons@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.5.13.tgz#61ec5eab07879400d423d60bb397880d10ee5e73"
+  integrity sha512-18CqzNnrGMfeZtiKz+R/3rHtSNnfNwz6y6prIQIbWseK16jY8ELTfIFGviwO5V2OqpbHDQi5+xQQ63QAIb89YA==
   dependencies:
-    "@storybook/api" "6.5.12"
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/api" "6.5.13"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/router" "6.5.12"
-    "@storybook/theming" "6.5.12"
+    "@storybook/router" "6.5.13"
+    "@storybook/theming" "6.5.13"
     "@types/webpack-env" "^1.16.0"
     core-js "^3.8.2"
     global "^4.4.0"
     regenerator-runtime "^0.13.7"
 
-"@storybook/angular@^6.5.10":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/angular/-/angular-6.5.12.tgz#f5b2f3c79b845edb3a38ee7ab37b52ebfa95da81"
-  integrity sha512-/zZLm72sUWQ/G7Vdkd/5Fxf2nNwjABU/d3uOPPWgTKSq8YIoJc1f2cc6ytRQTceQBvZCOUZWWsJRlkjMOyZJgQ==
-  dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/api" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+"@storybook/angular@^6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/angular/-/angular-6.5.13.tgz#ea1c39ec5a6df9c0f5dbe21f4ab7635578730944"
+  integrity sha512-k+aXOwvjRhFA4WUsUW2jA+J9ezs+nMEVhsMXk39SLlCHzs0dqgwfxMwxb/nOUT8FhJF9eJ8+NUhgvqBEcGYZJg==
+  dependencies:
+    "@storybook/addons" "6.5.13"
+    "@storybook/api" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/docs-tools" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
+    "@storybook/docs-tools" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/store" "6.5.12"
+    "@storybook/store" "6.5.13"
     "@types/node" "^14.14.20 || ^16.0.0"
     "@types/react" "^16.14.23"
     "@types/react-dom" "^16.9.14"
@@ -2472,18 +2472,18 @@
     util-deprecate "^1.0.2"
     webpack ">=4.0.0 <6.0.0"
 
-"@storybook/api@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.5.12.tgz#7cc82087fc9298be03f15bf4ab9c4aab294b3bac"
-  integrity sha512-DuUZmMlQxkFNU9Vgkp9aNfCkAongU76VVmygvCuSpMVDI9HQ2lG0ydL+ppL4XKoSMCCoXTY6+rg4hJANnH+1AQ==
+"@storybook/api@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.5.13.tgz#8671e580721ff68d209fcde2975f967ae79b7d64"
+  integrity sha512-xVSmB7/IuFd6G7eiJjbI2MuS7SZunoUM6d+YCWpjiehfMeX47MXt1gZtOwFrgJC1ShZlefXFahq/dvxwtmWs+w==
   dependencies:
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/router" "6.5.12"
+    "@storybook/router" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/theming" "6.5.12"
+    "@storybook/theming" "6.5.13"
     core-js "^3.8.2"
     fast-deep-equal "^3.1.3"
     global "^4.4.0"
@@ -2495,28 +2495,28 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/builder-webpack4@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.5.12.tgz#dcfd91d3e78505943864335bc2b84ccc4d00a54e"
-  integrity sha512-TsthT5jm9ZxQPNOZJbF5AV24me3i+jjYD7gbdKdSHrOVn1r3ydX4Z8aD6+BjLCtTn3T+e8NMvUkL4dInEo1x6g==
+"@storybook/builder-webpack4@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.5.13.tgz#35b22c49562d72934a0bc311657989f3b43be575"
+  integrity sha512-Agqy3IKPv3Nl8QqdS7PjtqLp+c0BD8+/3A2ki/YfKqVz+F+J34EpbZlh3uU053avm1EoNQHSmhZok3ZlWH6O7A==
   dependencies:
     "@babel/core" "^7.12.10"
-    "@storybook/addons" "6.5.12"
-    "@storybook/api" "6.5.12"
-    "@storybook/channel-postmessage" "6.5.12"
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-api" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/components" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/core-events" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
-    "@storybook/preview-web" "6.5.12"
-    "@storybook/router" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/api" "6.5.13"
+    "@storybook/channel-postmessage" "6.5.13"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-api" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/components" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/core-events" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
+    "@storybook/preview-web" "6.5.13"
+    "@storybook/router" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/store" "6.5.12"
-    "@storybook/theming" "6.5.12"
-    "@storybook/ui" "6.5.12"
+    "@storybook/store" "6.5.13"
+    "@storybook/theming" "6.5.13"
+    "@storybook/ui" "6.5.13"
     "@types/node" "^14.0.10 || ^16.0.0"
     "@types/webpack" "^4.41.26"
     autoprefixer "^9.8.6"
@@ -2548,27 +2548,27 @@
     webpack-hot-middleware "^2.25.1"
     webpack-virtual-modules "^0.2.2"
 
-"@storybook/builder-webpack5@^6.5.0-rc.1":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-6.5.12.tgz#29fe22466b88d8f5c4b408f303f7fb189ad6eadb"
-  integrity sha512-jK5jWxhSbMAM/onPB6WN7xVqwZnAmzJljOG24InO/YIjW8pQof7MeAXCYBM4rYM+BbK61gkZ/RKxwlkqXBWv+Q==
+"@storybook/builder-webpack5@^6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-6.5.13.tgz#b40a6fc0ff22b6e7c7e1a46a8fc3c24cf14833f8"
+  integrity sha512-juNH31ZljWbaoBD6Yx2/iQ4G66UBkwq+cFUqLzgVROKMXmYaT0AJYbfyY8CgGqcXkc+sqNA63yWaLWd8/K9vTg==
   dependencies:
     "@babel/core" "^7.12.10"
-    "@storybook/addons" "6.5.12"
-    "@storybook/api" "6.5.12"
-    "@storybook/channel-postmessage" "6.5.12"
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-api" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/components" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/core-events" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
-    "@storybook/preview-web" "6.5.12"
-    "@storybook/router" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/api" "6.5.13"
+    "@storybook/channel-postmessage" "6.5.13"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-api" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/components" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/core-events" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
+    "@storybook/preview-web" "6.5.13"
+    "@storybook/router" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/store" "6.5.12"
-    "@storybook/theming" "6.5.12"
+    "@storybook/store" "6.5.13"
+    "@storybook/theming" "6.5.13"
     "@types/node" "^14.0.10 || ^16.0.0"
     babel-loader "^8.0.0"
     babel-plugin-named-exports-order "^0.0.2"
@@ -2592,51 +2592,51 @@
     webpack-hot-middleware "^2.25.1"
     webpack-virtual-modules "^0.4.1"
 
-"@storybook/channel-postmessage@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.5.12.tgz#045c5920eb6924b11411d1d5f6475a0d83c982e3"
-  integrity sha512-SL/tJBLOdDlbUAAxhiZWOEYd5HI4y8rN50r6jeed5nD8PlocZjxJ6mO0IxnePqIL9Yu3nSrQRHrtp8AJvPX0Yg==
+"@storybook/channel-postmessage@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.5.13.tgz#cdb36cf4180bd75687c0c4ec75248044ac975828"
+  integrity sha512-R79MBs0mQ7TV8M/a6x/SiTRyvZBidDfMEEthG7Cyo9p35JYiKOhj2535zhW4qlVMESBu95pwKYBibTjASoStPw==
   dependencies:
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     core-js "^3.8.2"
     global "^4.4.0"
     qs "^6.10.0"
     telejson "^6.0.8"
 
-"@storybook/channel-websocket@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.5.12.tgz#4796e2436900d73fb867591f7d7cf8f94898d51b"
-  integrity sha512-0t5dLselHVKTRYaphxx1dRh4pmOFCfR7h8oNJlOvJ29Qy5eNyVujDG9nhwWbqU6IKayuP4nZrAbe9Req9YZYlQ==
+"@storybook/channel-websocket@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.5.13.tgz#b7a55149295a77004bb156a4ceefc44839f52bb3"
+  integrity sha512-kwh667H+tzCiNvs92GNwYOwVXdj9uHZyieRAN5rJtTBJ7XgLzGkpTEU50mWlbc0nDKhgE0qYvzyr5H393Iy5ug==
   dependencies:
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
     core-js "^3.8.2"
     global "^4.4.0"
     telejson "^6.0.8"
 
-"@storybook/channels@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.5.12.tgz#98baf01691d263e2ac341853361ec69c1a6621bc"
-  integrity sha512-X5XaKbe4b7LXJ4sUakBo00x6pXnW78JkOonHoaKoWsccHLlEzwfBZpVVekhVZnqtCoLT23dB8wjKgA71RYWoiw==
+"@storybook/channels@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.5.13.tgz#f3f86b90a7832484ee3dcbc6845f5a47f62f028f"
+  integrity sha512-sGYSilE30bz0jG+HdHnkv0B4XkAv2hP+KRZr4xmnv+MOOQpRnZpJ5Z3HVU16s17cj/83NWihKj6BuKcEVzyilg==
   dependencies:
     core-js "^3.8.2"
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/client-api@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.5.12.tgz#9d02b2a8f5d4137918257742d72ae10c6a70a477"
-  integrity sha512-+JiRSgiU829KPc25nG/k0+Ao2nUelHUe8Y/9cRoKWbCAGzi4xd0JLhHAOr9Oi2szWx/OI1L08lxVv1+WTveAeA==
+"@storybook/client-api@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.5.13.tgz#0bd89339c08898e0409c5a1dd719ed4807b400cb"
+  integrity sha512-uH1mAWbidPiuuTdMUVEiuaNOfrYXm+9QLSP1MMYTKULqEOZI5MSOGkEDqRfVWxbYv/iWBOPTQ+OM9TQ6ecYacg==
   dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/channel-postmessage" "6.5.12"
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/channel-postmessage" "6.5.13"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/store" "6.5.12"
+    "@storybook/store" "6.5.13"
     "@types/qs" "^6.9.5"
     "@types/webpack-env" "^1.16.0"
     core-js "^3.8.2"
@@ -2651,43 +2651,43 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/client-logger@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.5.12.tgz#d9809e13dc7939eb61452a5e94b1ccb61c4a022c"
-  integrity sha512-IrkMr5KZcudX935/C2balFbxLHhkvQnJ78rbVThHDVckQ7l3oIXTh66IMzldeOabVFDZEMiW8AWuGEYof+JtLw==
+"@storybook/client-logger@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.5.13.tgz#83f332dd9bb4ff1696d16b0cc24561df90905264"
+  integrity sha512-F2SMW3LWFGXLm2ENTwTitrLWJgmMXRf3CWQXdN2EbkNCIBHy5Zcbt+91K4OX8e2e5h9gjGfrdYbyYDYOoUCEfA==
   dependencies:
     core-js "^3.8.2"
     global "^4.4.0"
 
-"@storybook/components@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.5.12.tgz#e137f0683ea92e22de116bfa62cfd65ce4efe01d"
-  integrity sha512-NAAGl5PDXaHdVLd6hA+ttmLwH3zAVGXeUmEubzKZ9bJzb+duhFKxDa9blM4YEkI+palumvgAMm0UgS7ou680Ig==
+"@storybook/components@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.5.13.tgz#a05fc969458760b348d640f26c2cad310ab35030"
+  integrity sha512-6Hhx70JK5pGfKCkqMU4yq/BBH+vRTmzj7tZKfPwba+f8VmTMoOr/2ysTQFRtXryiHB6Z15xBYgfq5x2pIwQzLQ==
   dependencies:
-    "@storybook/client-logger" "6.5.12"
+    "@storybook/client-logger" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/theming" "6.5.12"
+    "@storybook/theming" "6.5.13"
     core-js "^3.8.2"
     memoizerific "^1.11.3"
     qs "^6.10.0"
     regenerator-runtime "^0.13.7"
     util-deprecate "^1.0.2"
 
-"@storybook/core-client@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.5.12.tgz#1a3889604b92292d210d956c46f86a64dd7a9483"
-  integrity sha512-jyAd0ud6zO+flpLv0lEHbbt1Bv9Ms225M6WTQLrfe7kN/7j1pVKZEoeVCLZwkJUtSKcNiWQxZbS15h31pcYwqg==
-  dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/channel-postmessage" "6.5.12"
-    "@storybook/channel-websocket" "6.5.12"
-    "@storybook/client-api" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+"@storybook/core-client@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.5.13.tgz#5e2a155af5773c4211a0e1fcd72e0cefea52b7ae"
+  integrity sha512-YuELbRokTBdqjbx/R4/7O4rou9kvbBIOJjlUkor9hdLLuJ3P0yGianERGNkZFfvcfMBAxU0p52o7QvDldSR3kA==
+  dependencies:
+    "@storybook/addons" "6.5.13"
+    "@storybook/channel-postmessage" "6.5.13"
+    "@storybook/channel-websocket" "6.5.13"
+    "@storybook/client-api" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/preview-web" "6.5.12"
-    "@storybook/store" "6.5.12"
-    "@storybook/ui" "6.5.12"
+    "@storybook/preview-web" "6.5.13"
+    "@storybook/store" "6.5.13"
+    "@storybook/ui" "6.5.13"
     airbnb-js-shims "^2.2.1"
     ansi-to-html "^0.6.11"
     core-js "^3.8.2"
@@ -2699,10 +2699,10 @@
     unfetch "^4.2.0"
     util-deprecate "^1.0.2"
 
-"@storybook/core-common@6.5.12", "@storybook/core-common@^6.5.10":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.5.12.tgz#9f8d5cb3812382c49c84dcfb4279a39e228a1b83"
-  integrity sha512-gG20+eYdIhwQNu6Xs805FLrOCWtkoc8Rt8gJiRt8yXzZh9EZkU4xgCRoCxrrJ03ys/gTiCFbBOfRi749uM3z4w==
+"@storybook/core-common@6.5.13", "@storybook/core-common@^6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.5.13.tgz#941fe2aea3326c2d524d095870a4150b9f9b1845"
+  integrity sha512-+DVZrRsteE9pw0X5MNffkdBgejQnbnL+UOG3qXkE9xxUamQALnuqS/w1BzpHE9WmOHuf7RWMKflyQEW3OLKAJg==
   dependencies:
     "@babel/core" "^7.12.10"
     "@babel/plugin-proposal-class-properties" "^7.12.1"
@@ -2726,7 +2726,7 @@
     "@babel/preset-react" "^7.12.10"
     "@babel/preset-typescript" "^7.12.7"
     "@babel/register" "^7.12.1"
-    "@storybook/node-logger" "6.5.12"
+    "@storybook/node-logger" "6.5.13"
     "@storybook/semver" "^7.3.2"
     "@types/node" "^14.0.10 || ^16.0.0"
     "@types/pretty-hrtime" "^1.0.0"
@@ -2755,30 +2755,30 @@
     util-deprecate "^1.0.2"
     webpack "4"
 
-"@storybook/core-events@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.5.12.tgz#28bd727cc4216012409bfac412fcb708346c56bc"
-  integrity sha512-0AMyMM19R/lHsYRfWqM8zZTXthasTAK2ExkSRzYi2GkIaVMxRKtM33YRwxKIpJ6KmIKIs8Ru3QCXu1mfCmGzNg==
+"@storybook/core-events@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.5.13.tgz#a8c0cc92694f09981ca6501d5c5ef328db18db8a"
+  integrity sha512-kL745tPpRKejzHToA3/CoBNbI+NPRVk186vGxXBmk95OEg0TlwgQExP8BnqEtLlRZMbW08e4+6kilc1M1M4N5w==
   dependencies:
     core-js "^3.8.2"
 
-"@storybook/core-server@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.5.12.tgz#bc47a2af4972f7c9cddb8b5961bd5f04a3f7f09f"
-  integrity sha512-q1b/XKwoLUcCoCQ+8ndPD5THkEwXZYJ9ROv16i2VGUjjjAuSqpEYBq5GMGQUgxlWp1bkxtdGL2Jz+6pZfvldzA==
+"@storybook/core-server@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.5.13.tgz#5f0f13b73122f73b9d27962616815305da2a5b28"
+  integrity sha512-vs7tu3kAnFwuINio1p87WyqDNlFyZESmeh9s7vvrZVbe/xS/ElqDscr9DT5seW+jbtxufAaHsx+JUTver1dheQ==
   dependencies:
     "@discoveryjs/json-ext" "^0.5.3"
-    "@storybook/builder-webpack4" "6.5.12"
-    "@storybook/core-client" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/builder-webpack4" "6.5.13"
+    "@storybook/core-client" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/csf-tools" "6.5.12"
-    "@storybook/manager-webpack4" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
+    "@storybook/csf-tools" "6.5.13"
+    "@storybook/manager-webpack4" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/store" "6.5.12"
-    "@storybook/telemetry" "6.5.12"
+    "@storybook/store" "6.5.13"
+    "@storybook/telemetry" "6.5.13"
     "@types/node" "^14.0.10 || ^16.0.0"
     "@types/node-fetch" "^2.5.7"
     "@types/pretty-hrtime" "^1.0.0"
@@ -2813,18 +2813,18 @@
     ws "^8.2.3"
     x-default-browser "^0.4.0"
 
-"@storybook/core@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.5.12.tgz#b12456a76de584ee3b0818b5f50c35338ac66f93"
-  integrity sha512-+o3psAVWL+5LSwyJmEbvhgxKO1Et5uOX8ujNVt/f1fgwJBIf6BypxyPKu9YGQDRzcRssESQQZWNrZCCAZlFeuQ==
+"@storybook/core@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.5.13.tgz#4c657c5d8d243f1187dad8763a275d555426957e"
+  integrity sha512-kw1lCgbsxzUimGww6t5rmuWJmFPe9kGGyzIqvj4RC4BBcEsP40LEu9XhSfvnb8vTOLIULFZeZpdRFfJs4TYbUw==
   dependencies:
-    "@storybook/core-client" "6.5.12"
-    "@storybook/core-server" "6.5.12"
+    "@storybook/core-client" "6.5.13"
+    "@storybook/core-server" "6.5.13"
 
-"@storybook/csf-tools@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.5.12.tgz#7740becd059686001d4c1b4db3f43e792362d918"
-  integrity sha512-BPhnB1xJtBVOzXuCURzQRdXcstE27ht4qoTgQkbwUTy4MEtUZ/f1AnHSYRdzrgukXdUFWseNIK4RkNdJpfOfNQ==
+"@storybook/csf-tools@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.5.13.tgz#cb5cd26083a594bf31b19a66a250ad94863822f6"
+  integrity sha512-63Ev+VmBqzwSwfUzbuXOLKBD5dMTK2zBYLQ9anTVw70FuTikwTsGIbPgb098K0vsxRCgxl7KM7NpivHqtZtdjw==
   dependencies:
     "@babel/core" "^7.12.10"
     "@babel/generator" "^7.12.11"
@@ -2848,33 +2848,33 @@
   dependencies:
     lodash "^4.17.15"
 
-"@storybook/docs-tools@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-6.5.12.tgz#22138cc810e8790b21d518cd48a3e2716d43c751"
-  integrity sha512-8brf8W89KVk95flVqW0sYEqkL+FBwb5W9CnwI+Ggd6r2cqXe9jyg+0vDZFdYp6kYNQKrPr4fbXGrGVXQG18/QQ==
+"@storybook/docs-tools@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-6.5.13.tgz#00c7041ac7bc827d12731face909351a5af0cb3f"
+  integrity sha512-hB+hk+895ny4SW84j3X5iV55DHs3bCfTOp7cDdcZJdQrlm0wuDb4A6d4ffNC7ZLh9VkUjU6ST4VEV5Bb0Cptow==
   dependencies:
     "@babel/core" "^7.12.10"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/store" "6.5.12"
+    "@storybook/store" "6.5.13"
     core-js "^3.8.2"
     doctrine "^3.0.0"
     lodash "^4.17.21"
     regenerator-runtime "^0.13.7"
 
-"@storybook/manager-webpack4@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.5.12.tgz#7e0ae21455e1c070d291942c18373ceaa58c0e05"
-  integrity sha512-LH3e6qfvq2znEdxe2kaWtmdDPTnvSkufzoC9iwOgNvo3YrTGrYNyUTDegvW293TOTVfUn7j6TBcsOxIgRnt28g==
+"@storybook/manager-webpack4@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.5.13.tgz#73350ac3e8a10494158df3c1ea01dd7f329bec8e"
+  integrity sha512-pURzS5W3XM0F7bCBWzpl7TRsuy+OXFwLXiWLaexuvo0POZe31Ueo2A1R4rx3MT5Iee8O9mYvG2XTmvK9MlLefQ==
   dependencies:
     "@babel/core" "^7.12.10"
     "@babel/plugin-transform-template-literals" "^7.12.1"
     "@babel/preset-react" "^7.12.10"
-    "@storybook/addons" "6.5.12"
-    "@storybook/core-client" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
-    "@storybook/theming" "6.5.12"
-    "@storybook/ui" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/core-client" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
+    "@storybook/theming" "6.5.13"
+    "@storybook/ui" "6.5.13"
     "@types/node" "^14.0.10 || ^16.0.0"
     "@types/webpack" "^4.41.26"
     babel-loader "^8.0.0"
@@ -2902,20 +2902,20 @@
     webpack-dev-middleware "^3.7.3"
     webpack-virtual-modules "^0.2.2"
 
-"@storybook/manager-webpack5@^6.5.0-rc.1":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/manager-webpack5/-/manager-webpack5-6.5.12.tgz#77c98a63ef6c8d2ae0b1e69eb432818d0c25e672"
-  integrity sha512-F+KgoINhfo1ArbirCc9L+EyADYD8Z4t0LyZYDVcBiZ8DlRIMIoUSye6tDsnyEm+OPloLVAcGwRMYgFhuHB70Lg==
+"@storybook/manager-webpack5@^6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/manager-webpack5/-/manager-webpack5-6.5.13.tgz#3d88d4ec7dfce6413da944e94e28f3b7a1af4b51"
+  integrity sha512-lQEZacSfeRsbqfJE7TVk35Hm1vkr0I2i1pyYqM+4862gRbMh1nJQXbJ5GqZ+Fo/bf0ZfyFZ32jGDIJAFdlpkuQ==
   dependencies:
     "@babel/core" "^7.12.10"
     "@babel/plugin-transform-template-literals" "^7.12.1"
     "@babel/preset-react" "^7.12.10"
-    "@storybook/addons" "6.5.12"
-    "@storybook/core-client" "6.5.12"
-    "@storybook/core-common" "6.5.12"
-    "@storybook/node-logger" "6.5.12"
-    "@storybook/theming" "6.5.12"
-    "@storybook/ui" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/core-client" "6.5.13"
+    "@storybook/core-common" "6.5.13"
+    "@storybook/node-logger" "6.5.13"
+    "@storybook/theming" "6.5.13"
+    "@storybook/ui" "6.5.13"
     "@types/node" "^14.0.10 || ^16.0.0"
     babel-loader "^8.0.0"
     case-sensitive-paths-webpack-plugin "^2.3.0"
@@ -2957,10 +2957,10 @@
     prettier ">=2.2.1 <=2.3.0"
     ts-dedent "^2.0.0"
 
-"@storybook/node-logger@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.5.12.tgz#0f9efcd1a37c7aae493b22fe33cacca87c135b9b"
-  integrity sha512-jdLtT3mX5GQKa+0LuX0q0sprKxtCGf6HdXlKZGD5FEuz4MgJUGaaiN0Hgi+U7Z4tVNOtSoIbYBYXHqfUgJrVZw==
+"@storybook/node-logger@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.5.13.tgz#f4833ae220efe841747c4fead26419d6625af8d9"
+  integrity sha512-/r5aVZAqZRoy5FyNk/G4pj7yKJd3lJfPbAaOHVROv2IF7PJP/vtRaDkcfh0g2U6zwuDxGIqSn80j+qoEli9m5A==
   dependencies:
     "@types/npmlog" "^4.1.2"
     chalk "^4.1.0"
@@ -2968,17 +2968,17 @@
     npmlog "^5.0.1"
     pretty-hrtime "^1.0.3"
 
-"@storybook/preview-web@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.5.12.tgz#09f67908513b9e85254b0b3adea498c8a3e6f7e3"
-  integrity sha512-Q5mduCJsY9zhmlsrhHvtOBA3Jt2n45bhfVkiUEqtj8fDit45/GW+eLoffv8GaVTGjV96/Y1JFwDZUwU6mEfgGQ==
+"@storybook/preview-web@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.5.13.tgz#332cac4c95e3fd760c9eb8448dfa50fdb3b6255b"
+  integrity sha512-GNNYVzw4SmRua3dOc52Ye6Us4iQbq5GKQ56U3iwnzZM3TBdJB+Rft94Fn1/pypHujEHS8hl5Xgp9td6C1lLCow==
   dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/channel-postmessage" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/channel-postmessage" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
-    "@storybook/store" "6.5.12"
+    "@storybook/store" "6.5.13"
     ansi-to-html "^0.6.11"
     core-js "^3.8.2"
     global "^4.4.0"
@@ -2990,12 +2990,12 @@
     unfetch "^4.2.0"
     util-deprecate "^1.0.2"
 
-"@storybook/router@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.5.12.tgz#58efbc1f2f301c8584802af1c710b2f6f03f948c"
-  integrity sha512-xHubde9YnBbpkDY5+zGO4Pr6VPxP8H9J2v4OTF3H82uaxCIKR0PKG0utS9pFKIsEiP3aM62Hb9qB8nU+v1nj3w==
+"@storybook/router@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.5.13.tgz#c8bfed96f2343b097d416cfc95194038365fce94"
+  integrity sha512-sf5aogfirH5ucD0d0hc2mKf2iyWsZsvXhr5kjxUQmgkcoflkGUWhc34sbSQVRQ1i8K5lkLIDH/q2s1Zr2SbzhQ==
   dependencies:
-    "@storybook/client-logger" "6.5.12"
+    "@storybook/client-logger" "6.5.13"
     core-js "^3.8.2"
     memoizerific "^1.11.3"
     qs "^6.10.0"
@@ -3009,14 +3009,14 @@
     core-js "^3.6.5"
     find-up "^4.1.0"
 
-"@storybook/store@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.5.12.tgz#f1624ba942162cb9627a2ddcac72bfc9062e17a2"
-  integrity sha512-SMQOr0XvV0mhTuqj3XOwGGc4kTPVjh3xqrG1fqkj9RGs+2jRdmO6mnwzda5gPwUmWNTorZ7FxZ1iEoyfYNtuiQ==
+"@storybook/store@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.5.13.tgz#0281bdf0e24c880f85ea75ae47b6a84e8545b5f8"
+  integrity sha512-GG6lm+8fBX1tNUnX7x3raBOjYhhf14bPWLtYiPlxDTFEMs3sJte7zWKZq6NQ79MoBLL6jjzTeolBfDCBw6fiWQ==
   dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-events" "6.5.12"
+    "@storybook/addons" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-events" "6.5.13"
     "@storybook/csf" "0.0.2--canary.4566f4d.1"
     core-js "^3.8.2"
     fast-deep-equal "^3.1.3"
@@ -3030,13 +3030,13 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/telemetry@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-6.5.12.tgz#12b0a2bcfe47d57ee6e6344ac789a905a5912747"
-  integrity sha512-mCHxx7NmQ3n7gx0nmblNlZE5ZgrjQm6B08mYeWg6Y7r4GZnqS6wZbvAwVhZZ3Gg/9fdqaBApHsdAXp0d5BrlxA==
+"@storybook/telemetry@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-6.5.13.tgz#a190001f679ce7899c72b53710765685281fe567"
+  integrity sha512-PFJEfGbunmfFWabD3rdCF8EHH+45578OHOkMPpXJjqXl94vPQxUH2XTVKQgEQJbYrgX0Vx9Z4tSkdMHuzYDbWQ==
   dependencies:
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/core-common" "6.5.12"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/core-common" "6.5.13"
     chalk "^4.1.0"
     core-js "^3.8.2"
     detect-package-manager "^2.0.1"
@@ -3048,30 +3048,30 @@
     read-pkg-up "^7.0.1"
     regenerator-runtime "^0.13.7"
 
-"@storybook/theming@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.5.12.tgz#7df1b52913d49c5e84fc1f2e837c02d9fa8cc639"
-  integrity sha512-uWOo84qMQ2R6c1C0faZ4Q0nY01uNaX7nXoJKieoiJ6ZqY9PSYxJl1kZLi3uPYnrxLZjzjVyXX8MgdxzbppYItA==
+"@storybook/theming@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.5.13.tgz#3f905eb9f72ddc28d096384290999057987f3083"
+  integrity sha512-oif5NGFAUQhizo50r+ctw2hZNLWV4dPHai+L/gFvbaSeRBeHSNkIcMoZ2FlrO566HdGZTDutYXcR+xus8rI28g==
   dependencies:
-    "@storybook/client-logger" "6.5.12"
+    "@storybook/client-logger" "6.5.13"
     core-js "^3.8.2"
     memoizerific "^1.11.3"
     regenerator-runtime "^0.13.7"
 
-"@storybook/ui@6.5.12":
-  version "6.5.12"
-  resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.5.12.tgz#25ccd6e6d5aae227ba6561c2b8e9cfda9b0ad4de"
-  integrity sha512-P7+ARI5NvaEYkrbIciT/UMgy3kxMt4WCtHMXss2T01UMCIWh1Ws4BJaDNqtQSpKuwjjS4eqZL3aQWhlUpYAUEg==
-  dependencies:
-    "@storybook/addons" "6.5.12"
-    "@storybook/api" "6.5.12"
-    "@storybook/channels" "6.5.12"
-    "@storybook/client-logger" "6.5.12"
-    "@storybook/components" "6.5.12"
-    "@storybook/core-events" "6.5.12"
-    "@storybook/router" "6.5.12"
+"@storybook/ui@6.5.13":
+  version "6.5.13"
+  resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.5.13.tgz#16b25fd839cdafc2b9989c548bc1ffb711b33dee"
+  integrity sha512-MklJuSg4Bc+MWjwhZVmZhJaucaeEBUMMa2V9oRWbIgZOdRHqdW72S2vCbaarDAYfBQdnfaoq1GkSQiw+EnWOzA==
+  dependencies:
+    "@storybook/addons" "6.5.13"
+    "@storybook/api" "6.5.13"
+    "@storybook/channels" "6.5.13"
+    "@storybook/client-logger" "6.5.13"
+    "@storybook/components" "6.5.13"
+    "@storybook/core-events" "6.5.13"
+    "@storybook/router" "6.5.13"
     "@storybook/semver" "^7.3.2"
-    "@storybook/theming" "6.5.12"
+    "@storybook/theming" "6.5.13"
     core-js "^3.8.2"
     memoizerific "^1.11.3"
     qs "^6.10.0"