Repository: splunk/addonfactory-ucc-generator (language: python)

Issue:
feat(checkboxGroup): correctly parsing values with spaces
[ADDON-67906 [UCC] [UI] Enhancement for the checkboxGroup component](https://splunk.atlassian.net/browse/ADDON-67906)

- added unit tests to cover that functionality
BUG: Empty line in .uccignore results in files being deleted
### Description
An empty line, or line containing a space in .uccignore results unexpected file removals from the output package.

.uccignore:
```
line1: samples
line2: eventgen.conf   
line3: <blank>   
```

Output:
```
...  
INFO: Removed ['<OtherIgnoredFiles>', '<projectDir>/output/<myApp>/'] files  
INFO: Copied package directory  
...  
```
Note that it removes output/<myApp> which means all libraries etc are lost before it then copies in the package directory.

### What ucc-gen version are you using?

splunk-add-on-ucc-framework==5.35.1

### Additional System Info

MacOS
BUG: If Enter clicked on dialog, it does not behave as expected
Once you press enter on some dialog, the dialog is closed with action as on "Cancel" while action like on "Add" would be expected.
![image (7)](https://user-images.githubusercontent.com/74253926/140040262-560675db-8897-4f42-b694-528ed0b89874.png)


Discussion / hints:

Fix patch:
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 0c59afbe5..b10f657ca 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,4 +1,11 @@
-* @artemrys
-/splunk_add_on_ucc_framework/commands/openapi_generator/ @hsekowski-splunk
-/splunk_add_on_ucc_framework/schema/schema.json @artemrys @vtsvetkov-splunk
-/ui/ @vtsvetkov-splunk
+*                                                   @splunk/ucc-developers
+
+/ui/                                                @splunk/ucc-ui-developers
+*.ts                                                @splunk/ucc-ui-developers
+*.tsx                                               @splunk/ucc-ui-developers
+
+*.py                                                @splunk/ucc-be-developers
+/tests                                              @splunk/ucc-be-developers
+/splunk_add_on_ucc_framework                        @splunk/ucc-be-developers
+
+/splunk_add_on_ucc_framework/schema/schema.json     @splunk/ucc-developers
diff --git a/.github/actions/cached-ui-deps/action.yml b/.github/actions/cached-ui-deps/action.yml
index 0864ccd1b..4b39a56c0 100644
--- a/.github/actions/cached-ui-deps/action.yml
+++ b/.github/actions/cached-ui-deps/action.yml
@@ -15,7 +15,7 @@ runs:
       run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
       shell: bash
     - name: Cache Dependencies
-      uses: actions/cache@v3
+      uses: actions/cache@v4
       id: yarn-cache
       with:
         path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/build-ui.yml b/.github/workflows/build-ui.yml
index a8d6a9113..ac90009a8 100644
--- a/.github/workflows/build-ui.yml
+++ b/.github/workflows/build-ui.yml
@@ -26,6 +26,8 @@ jobs:
         run: yarn run lint
       - name: Unit test
         run: yarn run test
+      - name: Validate storybook build
+        run: yarn run build-storybook
       - name: Build UCC UI
         run: yarn run build
       - name: List deps into dependencies.txt
diff --git a/docs/advanced/custom_warning.md b/docs/advanced/custom_warning.md
new file mode 100644
index 000000000..d891fa153
--- /dev/null
+++ b/docs/advanced/custom_warning.md
@@ -0,0 +1,34 @@
+This feature allows us to pass broarder description on Input and Configuration page displayed under main description.
+
+### Warning Properties
+
+| Property | Type   | Description                               |
+| -------- | ------ | ----------------------------------------- |
+| create   | object | Warning object definition for create form |
+| edit     | object | Warning object definition for edit form   |
+| clone    | object | Warning object definition for clone form  |
+| config   | object | Warning object definition for config form |
+
+### Warning Object Properties
+
+| Property                                         | Type    | Description                                                                                 |
+| ------------------------------------------------ | ------- | ------------------------------------------------------------------------------------------- |
+| message<span class="required-asterisk">\*</span> | string  | Text used for that description, you can put \n to add a breakline                           |
+| alwaysDisplay                                    | boolean | Force warning to be always displayed, even after input changes. Default value is **false**. |
+
+### Usage
+
+```json
+"warning": {
+    "create": {
+        "message": "Some warning for create form",
+        "alwaysDisplay": true
+    },
+    "edit": {
+        "message": "Some warning for edit form "
+    },
+    "clone": {
+        "message": "Some warning for clone form"
+    }
+},
+```
diff --git a/docs/advanced/oauth_support.md b/docs/advanced/oauth_support.md
index 57de1dddb..ca3e92bbb 100644
--- a/docs/advanced/oauth_support.md
+++ b/docs/advanced/oauth_support.md
@@ -16,6 +16,9 @@ Auth can be used inside the entity tag. Use `type: "oauth"` in the entity list a
         - `client_secret` this is client secret for the your app for which you want auth
         - `redirect_url` this will show redirect url which needs to be put in app's redirect url.
         - `endpoint` this will be endpoint for which we want to build oauth support. For example for salesforce that will be either "login.salesforce.com" or "test.salesforce.com" or any other custom endpoint.
+          - there is also a possibility to specify separate endpoints for authorize and token, to do that instead single 'endpoint' field use two separate ones:
+            - `endpoint_authorize` - to specify the endpoint used for authorization ie. login.salesforce.com
+            - `endpoint_token` - to specify the endpoint used for token acqusition ie. api.login.salesforce.com
     - `auth_code_endpoint` this must be present and its value should be endpoint value for getting the auth_code using the app. If the url to get auth_code is https://login.salesforce.com/services/oauth2/authorize then this will have value /services/oauth2/authorize
     - `access_token_endpoint` this must be present and its value should be endpoint value for getting access_token using the auth_code received. If the url to get access token is https://login.salesforce.com/services/oauth2/token then this will have value /services/oauth2/token
     - `auth_label` this allow user to have custom label for Auth Type dropdown
diff --git a/docs/configurations.md b/docs/configurations.md
index 49bd39a37..b5f9e4cd2 100644
--- a/docs/configurations.md
+++ b/docs/configurations.md
@@ -1,4 +1,6 @@
-`Configuration` tab can have multiple subtabs, for example, a tab for account configuration (Use to configure the account by adding account credentials), proxy configuration and logging level configuration.
+The `Configuration` tab can have multiple subtabs, for example, a tab for
+account configuration (to configure the account by adding account credentials),
+proxy configuration and logging level configuration.
 
 ### Configuration Properties
 
@@ -6,7 +8,7 @@
 | ----------------------------------------------------------------- | ------ | ------------------------------------------------------- |
 | title<span class="required-asterisk">\*</span>                    | string | -                                                       |
 | description                                                       | string | To provide a brief summary of an configuration page.    |
-| [subDescription](../advanced/sub_description)                     | object | To provide broader description of an configuration page |
+| [subDescription](./advanced/sub_description)                     | object | To provide broader description of an configuration page |
 | [tabs](#tabs-properties)<span class="required-asterisk">\*</span> | array  | To specify a list of tab.                               |
 
 ### Tabs properties
@@ -20,7 +22,7 @@
 | style                                                        | string | By specifying this property in the global config file, the forms can either be opened as a new page or in a dialog. <br>Supported values are "page" or "dialog". <br> Default value is **dialog**. |
 | options                                                      | object | This property allows you to enable the [saveValidator](../advanced/save_validator) feature.                                                                                                        |
 | hook                                                         | object | It is used to add custom behaviour to forms. Visit the [Custom Hook](../custom_ui_extensions/custom_hook) page to learn more.                                                                      |
-| warning                                                      | object | It is used to add custom warning message for each of modes ('create', 'edit', 'config', 'clone'), message is displayed on form                                                                     |
+| [warning](./advanced/custom_warning.md)                      | object | It is used to add custom warning message for each of modes ('create', 'edit', 'config', 'clone'), message is displayed on form                                                                     |
 | conf                                                         | string | TBD                                                                                                                                                                                                |
 | restHandlerName                                              | string | TBD                                                                                                                                                                                                |
 | restHandlerModule                                            | string | TBD                                                                                                                                                                                                |
@@ -29,24 +31,24 @@
 
 ### Usage
 
-```
+```json
 "configuration": {
     "title": "Configuration",
     "description": "Set up your add-on",
     "tabs": [
         {
             "name": "account",
-            "title": "Account"
+            "title": "Account",
             "table": {},
             "entity": []
         },
         {
             "name": "proxy",
-            "title": "Proxy"
+            "title": "Proxy",
             "entity": [],
             "options": {
                 "saveValidator": ""
-            },
+            }
         }
     ]
 }
diff --git a/docs/dashboard.md b/docs/dashboard.md
index 342c172df..d3e06ef34 100644
--- a/docs/dashboard.md
+++ b/docs/dashboard.md
@@ -78,7 +78,7 @@ Executes the following search:
 
 ```
 index=_internal source=*<addon_name>* action=events_ingested
-| timechart avg(n_events) by sourcetype_ingested
+| timechart sum(n_events) by sourcetype_ingested
 ```
 
 > Note: <addon_name> is being replaced by the actual value during the build time.
diff --git a/docs/inputs/index.md b/docs/inputs/index.md
index ed879b3f2..a563a5cdb 100644
--- a/docs/inputs/index.md
+++ b/docs/inputs/index.md
@@ -29,7 +29,7 @@ Developers are required to add services in the global config file to create a ne
 | style                                                        | string | By specifying this property in the global config file, the forms can either be opened as a new page or in a dialog. <br>Supported values are "page" or "dialog". <br> Default value is **dialog**. |
 | options                                                      | object | This property allows you to enable the [saveValidator](../advanced/save_validator) feature.                                                                                                        |
 | hook                                                         | object | It is used to add custom behaviour to forms. Visit the [Custom Hook](../custom_ui_extensions/custom_hook) page to learn more.                                                                      |
-| warning                                                      | object | It is used to add custom warning message for each of modes ('create', 'edit', 'config', 'clone'), message is displayed on form                                                                     |
+| [warning](../advanced/custom_warning.md)                      | object | It is used to add custom warning message for each of modes ('create', 'edit', 'config', 'clone'), message is displayed on form                                                                     |
 | [subDescription](../advanced/sub_description)                | object | To provide broader description of an inputs page                                                                                                                                                   |
 | conf                                                         | string | TBD                                                                                                                                                                                                |
 | restHandlerName                                              | string | TBD                                                                                                                                                                                                |
diff --git a/docs/quickstart.md b/docs/quickstart.md
index 6e75d0896..b1205813d 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -121,6 +121,11 @@ It takes the following parameters:
 * `-v` / `--verbose` - [optional] show detailed information about
     created/copied/modified/conflict files after build is complete.
     This option is in experimental mode. Default: `False`.
+* `--pip-version` - [optional] pip version that will be used to install python libraries. Default: `latest`.
+* `--pip-legacy-resolver` - [optional] Use old pip dependency resolver by adding flag '--use-deprecated=legacy-resolver' 
+  to pip install command. Default: `False`. PLEASE NOTE: this flag is deprecated and will be removed from pip in the future.
+Instead of using this flag, the correct solution would be to fix the packages your project depends on to work properly with the new resolver.
+Additionally, please note that this flag is not compatible with pip version `23.2`, use `23.2.1` instead. 
 
 #### Verbose mode
 
diff --git a/docs/uccignore.md b/docs/uccignore.md
index 9e4efd566..07b51d781 100644
--- a/docs/uccignore.md
+++ b/docs/uccignore.md
@@ -5,4 +5,28 @@ add-on recursively overrides the output folder.
 
 It is expected to be placed in the same folder as `globalConfig` file to have effect.
 
-You will see a warning message in case ignored file is not found in the output folder.
+Uccignore supports wildcard expressions, thanks to which we can find all files matching a specific pattern.
+
+e.g. for given file structure 
+
+```
+...
+└── lib
+    └── 3rdparty
+    │   ├── linux
+    │   ├   └── pycache.pyc
+    │   ├── linux_with_deps
+    │   ├   └── pycache.pyc
+    │   └── windows
+    │       └── pycache.pyc
+    └── requests
+    │       └── pycache.pyc
+    └── urllib
+            └── pycache.pyc
+```  
+
+we can remove all `.pyc` files by adding `lib/**/pycache.pyc` to the .uccignore file. 
+If we want to remove all `.pyc` files just from the `3rdparty` directory, we need to change pattern to `lib/3rdparty/**/pycache.pyc`.
+If we want to remove only for one specific platform, we need to provide the exact path e.g. **`lib/3rdparty/windows/pycache.pyc`**.
+
+In case no file is found for the specified pattern, you will see an appropriate warning message.
diff --git a/mkdocs.yml b/mkdocs.yml
index 2e4896834..bbc975475 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -64,6 +64,7 @@ nav:
     - Save Validator: "advanced/save_validator.md"
     - OS-dependent libraries: "advanced/os-dependent_libraries.md"
     - Sub Description: "advanced/sub_description.md"
+    - Custom Warning: "advanced/custom_warning.md"
   - Troubleshooting: "troubleshooting.md"
   - Contributing: "contributing.md"
   - Changelog: "CHANGELOG.md"
diff --git a/poetry.lock b/poetry.lock
index f61d83aa7..9ce7b799f 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1133,13 +1133,13 @@ pytest = ">=5.3"
 
 [[package]]
 name = "pytest-splunk-addon"
-version = "5.2.4"
+version = "5.2.5"
 description = "A Dynamic test tool for Splunk Apps and Add-ons"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
-    {file = "pytest_splunk_addon-5.2.4-py3-none-any.whl", hash = "sha256:13eff67eadbeac6b0c1b54bf25b48aa56db3a8df99d1ed770b4f08a5372a69cc"},
-    {file = "pytest_splunk_addon-5.2.4.tar.gz", hash = "sha256:ea30587c15279fc70166e23bb57e236e960281c9d5114763e5d9036a49e3ade7"},
+    {file = "pytest_splunk_addon-5.2.5-py3-none-any.whl", hash = "sha256:b400f6071c847bf1ce4d410b3bd58d5f2d04372682be16642e692f7cea1ff3e0"},
+    {file = "pytest_splunk_addon-5.2.5.tar.gz", hash = "sha256:759ace16f1ee2cd1e9fe8b3e0aa589aeb187efe0a45b7799a9700d00ec2fede6"},
 ]
 
 [package.dependencies]
@@ -1151,7 +1151,7 @@ jsonschema = ">=4,<5"
 junitparser = ">=2.2.0,<3.0.0"
 pytest = ">5.4.0,<8"
 pytest-ordering = ">=0.6,<0.7"
-pytest-xdist = ">=2.3.0,<3.0.0"
+pytest-xdist = ">=2.3.0"
 requests = ">=2.31.0,<3.0.0"
 splunk-sdk = ">=1.6"
 splunksplwrapper = ">=1.1.1,<2.0.0"
@@ -1268,6 +1268,7 @@ files = [
     {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
     {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
     {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
     {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
diff --git a/renovate.json b/renovate.json
index 974362834..0a176cdef 100644
--- a/renovate.json
+++ b/renovate.json
@@ -15,11 +15,17 @@
     "every 2 weeks on Sunday"
   ],
   "packageRules": [
+    {
+      "description": "Separate npm and poetry dependencies",
+      "matchPackagePatterns": ["*"],
+      "groupName": "{{manager}}"
+    },
     {
       "matchPackageNames": ["urllib3"],
       "allowedVersions": "<2.0.0"
     },
     {
+      "description": "Ignore packages that needs for SUI",
       "matchManagers": [
         "npm"
       ],
@@ -52,19 +58,28 @@
       "enabled": false
     },
     {
+      "description": "Ignore msw-storybook-addon since they bumps incorrectly while canary version is using",
       "matchManagers": [
         "npm"
       ],
       "matchPackageNames": [
         "msw-storybook-addon"
       ],
-      "allowedVersions": "!/next|canary/"
+      "enabled": false
     },
     {
+      "description": "Update package.json versions together with yarn.lock",
       "matchManagers": [
         "npm"
       ],
       "rangeStrategy": "bump"
+    },
+    {
+      "description": "Ignore NodeJS",
+      "matchPackageNames": ["node"],
+      "matchManagers": ["npm"],
+      "matchDepTypes": [ "engines" ],
+      "enabled": false
     }
   ]
 }
diff --git a/splunk_add_on_ucc_framework/commands/build.py b/splunk_add_on_ucc_framework/commands/build.py
index accbc5d5b..6f6a3db4d 100644
--- a/splunk_add_on_ucc_framework/commands/build.py
+++ b/splunk_add_on_ucc_framework/commands/build.py
@@ -14,6 +14,7 @@
 # limitations under the License.
 #
 import configparser
+import glob
 import json
 import logging
 import os
@@ -195,30 +196,32 @@ def _get_ignore_list(
                 os.path.join(output_directory, addon_name, utils.get_os_path(path))
             ).strip()
             for path in ignore_list
+            if path.strip()
         ]
         return ignore_list
 
 
-def _remove_listed_files(ignore_list: List[str]) -> None:
+def _remove_listed_files(ignore_list: List[str]) -> List[str]:
     """
     Return path of files/folders to removed in output folder.
 
     Args:
-        ignore_list (list): List of files/folder to removed in output directory.
-
+        ignore_list (list): List of files/folder patterns to be removed in output directory.
     """
-    for path in ignore_list:
-        if os.path.exists(path):
-            if os.path.isfile(path):
-                os.remove(path)
-            elif os.path.isdir(path):
-                shutil.rmtree(path, ignore_errors=True)
-        else:
-            logger.warning(
-                "While ignoring the files mentioned in .uccignore {} was not found".format(
-                    path
-                )
-            )
+    removed_list = []
+    for pattern in ignore_list:
+        paths = glob.glob(pattern, recursive=True)
+        if not paths:
+            logger.warning(f"No files found for the specified pattern: {pattern}")
+            continue
+        for path in paths:
+            if os.path.exists(path):
+                if os.path.isfile(path):
+                    os.remove(path)
+                elif os.path.isdir(path):
+                    shutil.rmtree(path, ignore_errors=True)
+                removed_list.append(path)
+    return removed_list
 
 
 def generate_data_ui(
@@ -450,6 +453,8 @@ def generate(
     output_directory: Optional[str] = None,
     python_binary_name: str = "python3",
     verbose_file_summary_report: bool = False,
+    pip_version: str = "latest",
+    pip_legacy_resolver: bool = False,
 ) -> None:
     logger.info(f"ucc-gen version {__version__} is used")
     logger.info(f"Python binary name to use: {python_binary_name}")
@@ -502,6 +507,7 @@ def generate(
             logger.error(f"globalConfig file is not valid. Error: {e}")
             sys.exit(1)
         global_config.update_addon_version(addon_version)
+        global_config.add_ucc_version(__version__)
         global_config.dump(global_config.original_path)
         logger.info(
             f"Updated and saved add-on version in the globalConfig file to {addon_version}"
@@ -544,6 +550,8 @@ def generate(
                 python_binary_name,
                 includes_ui=True,
                 os_libraries=global_config.os_libraries,
+                pip_version=pip_version,
+                pip_legacy_resolver=pip_legacy_resolver,
             )
         except SplunktaucclibNotFound as e:
             logger.error(str(e))
@@ -608,7 +616,13 @@ def generate(
             "Skipped generating UI components as globalConfig file does not exist"
         )
         ucc_lib_target = os.path.join(output_directory, ta_name, "lib")
-        install_python_libraries(source, ucc_lib_target, python_binary_name)
+        install_python_libraries(
+            source,
+            ucc_lib_target,
+            python_binary_name,
+            pip_version=pip_version,
+            pip_legacy_resolver=pip_legacy_resolver,
+        )
         logger.info(
             f"Installed add-on requirements into {ucc_lib_target} from {source}"
         )
@@ -618,9 +632,9 @@ def generate(
         os.path.abspath(os.path.join(source, os.pardir, ".uccignore")),
         output_directory,
     )
-    _remove_listed_files(ignore_list)
-    if ignore_list:
-        logger.info(f"Removed {ignore_list} files")
+    removed_list = _remove_listed_files(ignore_list)
+    if removed_list:
+        logger.info("Removed:\n{}".format("\n".join(removed_list)))
     utils.recursive_overwrite(source, os.path.join(output_directory, ta_name))
     logger.info("Copied package directory")
 
diff --git a/splunk_add_on_ucc_framework/commands/openapi_generator/ucc_to_oas.py b/splunk_add_on_ucc_framework/commands/openapi_generator/ucc_to_oas.py
index 9c6d0bcd0..85ed3e270 100644
--- a/splunk_add_on_ucc_framework/commands/openapi_generator/ucc_to_oas.py
+++ b/splunk_add_on_ucc_framework/commands/openapi_generator/ucc_to_oas.py
@@ -367,11 +367,15 @@ def __add_paths(
         global_config.pages.inputs, "services"  # type: ignore[attr-defined]
     ):
         for service in global_config.pages.inputs.services:  # type: ignore[attr-defined]
+            if hasattr(service, "table"):
+                actions = service.table.actions
+            else:
+                actions = global_config.pages.inputs.table.actions  # type: ignore[attr-defined]
             open_api_object = __assign_ta_paths(
                 open_api_object=open_api_object,
                 path=f"/{global_config.meta.restRoot}_{service.name}",  # type: ignore[attr-defined]
                 path_name=service.name,
-                actions=global_config.pages.inputs.table.actions,  # type: ignore[attr-defined]
+                actions=actions,
                 page=GloblaConfigPages.INPUTS,
             )
     return open_api_object
diff --git a/splunk_add_on_ucc_framework/dashboard.py b/splunk_add_on_ucc_framework/dashboard.py
index a435a5f26..1f612cbb9 100644
--- a/splunk_add_on_ucc_framework/dashboard.py
+++ b/splunk_add_on_ucc_framework/dashboard.py
@@ -75,11 +75,11 @@
       <chart>
         <search>
           <query>index=_internal source=*{addon_name}* action=events_ingested
-| timechart avg(n_events) by sourcetype_ingested</query>
+| timechart sum(n_events) by sourcetype_ingested</query>
           <earliest>$log_time.earliest$</earliest>
           <latest>$log_time.latest$</latest>
         </search>
-        <option name="charting.chart">line</option>
+        <option name="charting.chart">column</option>
         <option name="charting.drilldown">none</option>
       </chart>
     </panel>
diff --git a/splunk_add_on_ucc_framework/global_config.py b/splunk_add_on_ucc_framework/global_config.py
index 5053b8170..1de6b5104 100644
--- a/splunk_add_on_ucc_framework/global_config.py
+++ b/splunk_add_on_ucc_framework/global_config.py
@@ -127,6 +127,10 @@ def display_name(self) -> str:
     def version(self) -> str:
         return self.meta["version"]
 
+    @property
+    def ucc_version(self) -> str:
+        return self.meta["_uccVersion"]
+
     @property
     def original_path(self) -> str:
         return self._original_path
@@ -150,6 +154,9 @@ def update_schema_version(self, new_schema_version: str) -> None:
     def update_addon_version(self, version: str) -> None:
         self._content.setdefault("meta", {})["version"] = version
 
+    def add_ucc_version(self, version: str) -> None:
+        self.content.setdefault("meta", {})["_uccVersion"] = version
+
     def has_inputs(self) -> bool:
         return bool(self.inputs)
 
diff --git a/splunk_add_on_ucc_framework/install_python_libraries.py b/splunk_add_on_ucc_framework/install_python_libraries.py
index cadcf2e29..f499031b7 100644
--- a/splunk_add_on_ucc_framework/install_python_libraries.py
+++ b/splunk_add_on_ucc_framework/install_python_libraries.py
@@ -97,6 +97,8 @@ def install_python_libraries(
     python_binary_name: str,
     includes_ui: bool = False,
     os_libraries: Optional[List[OSDependentLibraryConfig]] = None,
+    pip_version: str = "latest",
+    pip_legacy_resolver: bool = False,
 ) -> None:
     path_to_requirements_file = os.path.join(source_path, "lib", "requirements.txt")
     if os.path.isfile(path_to_requirements_file):
@@ -107,6 +109,8 @@ def install_python_libraries(
             requirements_file_path=path_to_requirements_file,
             installation_path=ucc_lib_target,
             installer=python_binary_name,
+            pip_version=pip_version,
+            pip_legacy_resolver=pip_legacy_resolver,
         )
         if includes_ui and not _pip_is_lib_installed(
             installer=python_binary_name,
@@ -149,26 +153,40 @@ def install_libraries(
     requirements_file_path: str,
     installation_path: str,
     installer: str,
+    pip_version: str = "latest",
+    pip_legacy_resolver: bool = False,
 ) -> None:
     """
     Upgrades `pip` version to the latest one and installs requirements to the
     specified path.
     """
 
-    pip_version = "23.1.2"
-    pip_update_command = f"--upgrade pip=={pip_version}"
+    if pip_version == "latest":
+        pip_update_command = "--upgrade pip"
+    else:
+        pip_update_command = f"--upgrade pip=={pip_version.strip()}"
+
+    if pip_version.strip() == "23.2" and pip_legacy_resolver:
+        logger.error(
+            "You cannot use the legacy resolver with pip 23.2. "
+            "Please remove '--pip-legacy-resolver' from your build command or "
+            "use a different version of pip e.g. 23.2.1"
+        )
+        sys.exit(1)
+
+    deps_resolver = "--use-deprecated=legacy-resolver " if pip_legacy_resolver else ""
     pip_install_command = (
         f'-r "{requirements_file_path}" '
         f"--no-compile "
         f"--prefer-binary "
         f"--ignore-installed "
-        f"--use-deprecated=legacy-resolver "
+        f"{deps_resolver}"
         f'--target "{installation_path}"'
     )
-
     _pip_install(
         installer=installer, command=pip_update_command, command_desc="pip upgrade"
     )
+
     _pip_install(
         installer=installer, command=pip_install_command, command_desc="pip install"
     )
diff --git a/splunk_add_on_ucc_framework/main.py b/splunk_add_on_ucc_framework/main.py
index c38444ab4..7273a8fb6 100644
--- a/splunk_add_on_ucc_framework/main.py
+++ b/splunk_add_on_ucc_framework/main.py
@@ -113,6 +113,19 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
             "created/copied/modified/conflict files after build is complete"
         ),
     )
+    build_parser.add_argument(
+        "--pip-version",
+        type=str,
+        help="pip version that will be used to install libraries.",
+        default="latest",
+    )
+    build_parser.add_argument(
+        "--pip-legacy-resolver",
+        action="store_true",
+        default=False,
+        help="Use old pip dependency resolver by adding flag '--use-deprecated=legacy-resolver' "
+        "to pip install command.",
+    )
 
     package_parser = subparsers.add_parser("package", description="Package an add-on")
     package_parser.add_argument(
@@ -189,6 +202,8 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
             output_directory=args.output,
             python_binary_name=args.python_binary_name,
             verbose_file_summary_report=args.verbose,
+            pip_version=args.pip_version,
+            pip_legacy_resolver=args.pip_legacy_resolver,
         )
     if args.command == "package":
         package.package(path_to_built_addon=args.path, output_directory=args.output)
diff --git a/splunk_add_on_ucc_framework/schema/schema.json b/splunk_add_on_ucc_framework/schema/schema.json
index 7f17c0fdf..3a29ab0dc 100644
--- a/splunk_add_on_ucc_framework/schema/schema.json
+++ b/splunk_add_on_ucc_framework/schema/schema.json
@@ -1628,6 +1628,9 @@
           "type": "string",
           "pattern": "^(?:\\d{1,3}\\.){2}\\d{1,3}$"
         },
+        "_uccVersion": {
+          "type": "string"
+        },
         "checkForUpdates": {
           "type": "boolean",
           "default": true
@@ -1728,6 +1731,9 @@
         "required": {
           "type": "boolean"
         },
+        "defaultValue": {
+          "type": "string"
+        },
         "options": {
           "type": "object",
           "properties": {
@@ -1737,6 +1743,9 @@
             },
             "disableonEdit": {
               "type": "boolean"
+            },
+            "enable": {
+              "type": "boolean"
             }
           },
           "additionalProperties": false
@@ -1965,22 +1974,32 @@
       "type": "object",
       "properties": {
         "create": {
-          "type": "string",
-          "maxLength": 500
+          "$ref": "#/definitions/WarningMessageObject"
         },
         "edit": {
-          "type": "string",
-          "maxLength": 500
+          "$ref": "#/definitions/WarningMessageObject"
         },
         "clone": {
-          "type": "string",
-          "maxLength": 500
+          "$ref": "#/definitions/WarningMessageObject"
         },
         "config": {
+          "$ref": "#/definitions/WarningMessageObject"
+        }
+      }
+    },
+    "WarningMessageObject": {
+      "type": "object",
+      "properties": {
+        "message": {
           "type": "string",
           "maxLength": 500
+        },
+        "alwaysDisplay": {
+          "type": "boolean",
+          "default": false
         }
-      }
+      },
+      "required": ["message"]
     },
     "Field": {
       "type": "string",
diff --git a/splunk_add_on_ucc_framework/templates/input.name.init-template b/splunk_add_on_ucc_framework/templates/input.name.init-template
index 9b6311cc9..95075d266 100644
--- a/splunk_add_on_ucc_framework/templates/input.name.init-template
+++ b/splunk_add_on_ucc_framework/templates/input.name.init-template
@@ -1,7 +1,6 @@
 import json
 import logging
 import sys
-import traceback
 
 import import_declare_test
 from solnlib import conf_manager, log
@@ -98,11 +97,7 @@ class Input(smi.Script):
                 )
                 log.modular_input_end(logger, normalized_input_name)
             except Exception as e:
-                logger.error(
-                    f"Exception raised while ingesting data for "
-                    f"{{addon_input_name}}: {e}. Traceback: "
-                    f"{traceback.format_exc()}"
-                )
+                log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
 
 
 if __name__ == "__main__":
diff --git a/ui/.storybook/main.ts b/ui/.storybook/main.ts
index 02470b64e..c82e12d01 100644
--- a/ui/.storybook/main.ts
+++ b/ui/.storybook/main.ts
@@ -8,7 +8,6 @@ const config: StorybookConfig = {
         '@storybook/addon-links',
         '@storybook/addon-essentials',
         '@storybook/addon-interactions',
-        'msw-storybook-addon',
     ],
     framework: {
         name: '@storybook/react-webpack5',
@@ -19,7 +18,7 @@ const config: StorybookConfig = {
     },
     staticDirs: ['../src/public'],
     webpackFinal: async (config) => {
-        const alias = config.resolve.alias || {};
+        const alias = config.resolve?.alias || {};
         return {
             ...config,
             resolve: {
diff --git a/ui/.storybook/preview.tsx b/ui/.storybook/preview.tsx
index 2e2e97f4c..11b0af8b2 100644
--- a/ui/.storybook/preview.tsx
+++ b/ui/.storybook/preview.tsx
@@ -24,20 +24,37 @@ const preview: Preview = {
             disable: true,
         },
         msw: {
-            handlers: [
-                ...serverHandlers,
-                http.get(`globalConfig.json`, () =>
-                    HttpResponse.json({
-                        pages: {},
-                        meta: {},
-                    })
-                ),
-            ],
+            handlers: {
+                common: [
+                    ...serverHandlers,
+                    http.get(`globalConfig.json`, () =>
+                        HttpResponse.json({
+                            pages: {},
+                            meta: {},
+                        })
+                    ),
+                    http.post(`/servicesNS/:user/-/:serviceName`, async ({ request }) =>
+                        HttpResponse.json(
+                            {
+                                messages: [
+                                    {
+                                        text: `Submitted body: ${decodeURIComponent(
+                                            await request.text()
+                                        )}`,
+                                    },
+                                ],
+                            },
+                            { status: 500 }
+                        )
+                    ),
+                ],
+            },
         },
         controls: {
             sort: 'requiredFirst',
         },
     },
+    loaders: [mswLoader],
     decorators: [withSplunkThemeToolbar],
 };
 
diff --git a/ui/package.json b/ui/package.json
index a3ae3a335..3c589d7f3 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -21,11 +21,11 @@
     "@splunk/react-icons": "^4.2.0",
     "@splunk/react-page": "^6.3.3",
     "@splunk/react-toast-notifications": "^0.11.3",
-    "@splunk/react-ui": "^4.23.0",
-    "@splunk/splunk-utils": "^2.3.4",
+    "@splunk/react-ui": "^4.24.0",
+    "@splunk/splunk-utils": "^3.0.0",
     "@splunk/themes": "^0.16.4",
     "@splunk/ui-utils": "^1.6.0",
-    "axios": "^1.6.5",
+    "axios": "^1.6.7",
     "immutability-helper": "^3.1.1",
     "license-webpack-plugin": "^4.0.2",
     "lodash": "^4.17.21",
@@ -33,47 +33,47 @@
     "react": "^16.14.0",
     "react-dom": "^16.14.0",
     "react-is": "^16.13.1",
-    "react-router-dom": "^6.21.1",
+    "react-router-dom": "^6.21.3",
     "styled-components": "^5.3.11",
     "uuid": "^9.0.1",
     "zod": "^3.22.4"
   },
   "devDependencies": {
-    "@babel/core": "^7.23.7",
-    "@babel/eslint-parser": "^7.23.3",
-    "@babel/plugin-transform-runtime": "^7.23.7",
-    "@babel/preset-env": "^7.23.7",
+    "@babel/core": "^7.23.9",
+    "@babel/eslint-parser": "^7.23.9",
+    "@babel/plugin-transform-runtime": "^7.23.9",
+    "@babel/preset-env": "^7.23.9",
     "@babel/preset-react": "^7.23.3",
     "@splunk/babel-preset": "^4.0.0",
     "@splunk/eslint-config": "^4.0.0",
     "@splunk/webpack-configs": "^7.0.2",
-    "@storybook/addon-essentials": "^7.6.7",
-    "@storybook/addon-interactions": "^7.6.7",
-    "@storybook/addon-links": "^7.6.7",
-    "@storybook/blocks": "^7.6.7",
-    "@storybook/react": "^7.6.7",
-    "@storybook/react-webpack5": "^7.6.7",
+    "@storybook/addon-essentials": "^7.6.10",
+    "@storybook/addon-interactions": "^7.6.10",
+    "@storybook/addon-links": "^7.6.10",
+    "@storybook/blocks": "^7.6.10",
+    "@storybook/react": "^7.6.10",
+    "@storybook/react-webpack5": "^7.6.10",
     "@storybook/testing-library": "^0.2.2",
-    "@testing-library/jest-dom": "^6.1.6",
+    "@testing-library/jest-dom": "^6.3.0",
     "@testing-library/react": "^12.1.5",
     "@testing-library/user-event": "^14.5.2",
     "@types/jest": "^29.5.11",
     "@types/js-yaml": "^4.0.9",
-    "@types/node": "^20.10.6",
+    "@types/node": "^20.11.7",
     "@types/react": "^16.14.51",
-    "@typescript-eslint/eslint-plugin": "^6.17.0",
-    "@typescript-eslint/parser": "^6.17.0",
+    "@typescript-eslint/eslint-plugin": "^6.19.1",
+    "@typescript-eslint/parser": "^6.19.1",
     "babel-eslint": "^10.1.0",
     "babel-jest": "^29.7.0",
     "babel-loader": "^8.3.0",
     "cross-env": "^7.0.3",
-    "css-loader": "^6.8.1",
+    "css-loader": "^6.9.1",
     "eslint": "^7.32.0",
     "eslint-config-airbnb": "^18.2.1",
     "eslint-config-prettier": "^7.2.0",
     "eslint-import-resolver-typescript": "^3.6.1",
     "eslint-plugin-import": "^2.29.1",
-    "eslint-plugin-jest": "^27.6.1",
+    "eslint-plugin-jest": "^27.6.3",
     "eslint-plugin-jsx-a11y": "^6.8.0",
     "eslint-plugin-prettier": "^4.2.1",
     "eslint-plugin-react": "^7.33.2",
@@ -83,18 +83,18 @@
     "jest": "^29.7.0",
     "jest-environment-jsdom": "^29.7.0",
     "js-yaml": "^4.1.0",
-    "msw": "^2.0.11",
+    "msw": "^2.1.5",
     "msw-storybook-addon": "2.0.0--canary.122.06f0c92.0",
     "prettier": "^2.8.8",
     "querystring-es3": "^0.2.1",
-    "storybook": "^7.6.7",
-    "style-loader": "^3.3.3",
+    "storybook": "^7.6.10",
+    "style-loader": "^3.3.4",
     "stylelint": "^14.16.1",
     "ts-node": "^10.9.2",
     "typescript": "^5.3.3",
     "undici": "^5.28.2",
     "url": "^0.11.3",
-    "webpack": "^5.89.0",
+    "webpack": "^5.90.0",
     "webpack-cli": "^5.1.4",
     "webpack-merge": "^5.10.0"
   },
@@ -103,7 +103,7 @@
     "@types/react": "^16.14.35",
     "css-what": "^5.0.1",
     "glob-parent": "^5.1.2",
-    "postcss": "^8.4.32",
+    "postcss": "^8.4.33",
     "semver": "^7.5.4",
     "strip-ansi": "^6.0.1",
     "string-width": "^4.2.2"
@@ -113,6 +113,8 @@
     "yarn": "^1.22.21"
   },
   "msw": {
-    "workerDirectory": "src/public"
+    "workerDirectory": [
+      "src/public"
+    ]
   }
-}
+}
\ No newline at end of file
diff --git a/ui/src/components/BaseFormTypes.ts b/ui/src/components/BaseFormTypes.ts
new file mode 100644
index 000000000..9cc0b2ad1
--- /dev/null
+++ b/ui/src/components/BaseFormTypes.ts
@@ -0,0 +1,149 @@
+import { z } from 'zod';
+import { Mode } from '../constants/modes';
+import {
+    AcceptableFormValueOrNull,
+    AcceptableFormValueOrNullish,
+} from '../types/components/shareableTypes';
+import { AnyOfEntity, OAuthFields } from '../types/globalConfig/entities';
+import { MarkdownMessageProps } from './MarkdownMessage';
+
+export type CurrentBaseFormInput =
+    | Record<string, AcceptableFormValueOrNull>
+    | Record<string, Record<string, AcceptableFormValueOrNull>>;
+
+export interface CustomHookError {
+    name: string;
+    message: string;
+}
+
+export interface BaseFormStateData {
+    [x: string]: {
+        disabled: boolean;
+        error: boolean;
+        fileNameToDisplay?: string;
+        value?: AcceptableFormValueOrNullish;
+        display: boolean;
+        markdownMessage?: MarkdownMessageProps;
+        dependencyValues?: string;
+    };
+}
+
+export interface BaseFormProps {
+    currentServiceState?: Record<string, AcceptableFormValueOrNull>;
+    serviceName: string;
+    mode: Mode;
+    page: string;
+    stanzaName: string;
+    groupName?: string;
+    handleFormSubmit: (isSubmitting: boolean, closeEntity: boolean) => void;
+}
+
+export interface BaseFormState {
+    serviceName?: string;
+    mode?: Mode;
+    page?: string;
+    stanzaName?: string;
+    data?: BaseFormStateData;
+    errorMsg?: string;
+    warningMsg?: string;
+}
+
+export interface SingleSelectEntityType {
+    field: string;
+    type: 'singleSelect';
+    label: string;
+    options: {
+        hideClearBtn: boolean;
+        autoCompleteFields: {
+            label: string;
+            value: 'oauth' | 'basic';
+        }[];
+    };
+}
+
+export interface UtilBaseForm {
+    setState: (callback: (prevState: BaseFormState) => void) => void;
+    setErrorFieldMsg: (field: string, msg: string) => void;
+    clearAllErrorMsg: (State: BaseFormState) => unknown;
+    setErrorMsg: (msg: string) => void;
+}
+
+export interface UtilControlWrapper {
+    handleChange: (field: string, targetValue: string) => void;
+    addCustomValidator: (
+        field: string,
+        validatorFunc: (submittedField: string, submittedValue: string) => void
+    ) => void;
+    utilCustomFunctions: {
+        setState: (callback: (prevState: BaseFormState) => void) => void;
+        setErrorFieldMsg: (field: string, msg: string) => void;
+        clearAllErrorMsg: (State: BaseFormState) => unknown;
+        setErrorMsg: (msg: string) => void;
+    };
+}
+
+export interface ServiceGroup {
+    label: string;
+    fields: string[];
+    options?: { isExpandable?: boolean; expand?: boolean };
+}
+
+export interface OauthConfiguration {
+    popupWidth: number;
+    popupHeight: number;
+    authTimeout: number;
+    authCodeEndpoint: string | null;
+    accessTokenEndpoint: string | null;
+    authEndpointAccessTokenType: string | null;
+}
+
+export interface CustomHook {
+    onCreate?: () => void;
+    onRender?: () => void;
+    onEditLoad?: () => void;
+    onSaveSuccess?: () => void;
+    onSaveFail?: () => void;
+    onChange?: (field: string, targetValue: string, tempState: BaseFormState) => void;
+    onSave?: (datadict?: Record<string, AcceptableFormValueOrNullish>) => boolean;
+}
+
+export type AnyEntity = z.TypeOf<typeof AnyOfEntity> | z.TypeOf<typeof OAuthFields>;
+
+export type OAuthEntity = z.TypeOf<typeof OAuthFields>;
+
+export interface BasicEntity {
+    disabled: boolean;
+    error: boolean;
+    display: boolean;
+    value?: AcceptableFormValueOrNullish;
+    fileNameToDisplay?: string;
+}
+
+export interface ChangeRecord {
+    display?: { $set: boolean };
+    value?: { $set: string | null };
+    dependencyValues?: { $set: Record<string, AcceptableFormValueOrNullish> };
+}
+
+export interface CustomHookClass {
+    new (
+        config: unknown,
+        serviceName: string,
+        state: BaseFormState,
+        mode: string,
+        util: {
+            setState: (callback: (prevState: BaseFormState) => void) => void;
+            setErrorFieldMsg: (field: string, msg: string) => void;
+            clearAllErrorMsg: (State: BaseFormState) => unknown;
+            setErrorMsg: (msg: string) => void;
+        }
+    ): {
+        onCreate?: () => void;
+        onRender?: () => void;
+        onEditLoad?: () => void;
+        onSaveSuccess?: () => void;
+        onSaveFail?: () => void;
+        onChange?: (field: string, targetValue: string, tempState: BaseFormState) => void;
+        onSave?: (datadict?: Record<string, AcceptableFormValueOrNullish>) => boolean;
+    };
+}
diff --git a/ui/src/components/BaseFormView.jsx b/ui/src/components/BaseFormView.tsx
similarity index 61%
rename from ui/src/components/BaseFormView.jsx
rename to ui/src/components/BaseFormView.tsx
index 8c8021f3a..ccc147188 100644
--- a/ui/src/components/BaseFormView.jsx
+++ b/ui/src/components/BaseFormView.tsx
@@ -1,5 +1,4 @@
 import React, { PureComponent } from 'react';
-import PropTypes from 'prop-types';
 import update from 'immutability-helper';
 import { v4 as uuidv4 } from 'uuid';
 
@@ -23,22 +22,108 @@ import {
 } from '../constants/oAuthErrorMessage';
 import TableContext from '../context/TableContext';
 import Group from './Group';
-
-function onCustomHookError(params) {
+import {
+    AcceptableFormValueOrNull,
+    AcceptableFormValueOrNullish,
+} from '../types/components/shareableTypes';
+import {
+    CustomHookError,
+    BaseFormProps,
+    BaseFormState,
+    SingleSelectEntityType,
+    BaseFormStateData,
+    CurrentBaseFormInput,
+    UtilBaseForm,
+    UtilControlWrapper,
+    ServiceGroup,
+    OauthConfiguration,
+    CustomHook,
+    AnyEntity,
+    OAuthEntity,
+    BasicEntity,
+    ChangeRecord,
+    CustomHookClass,
+} from './BaseFormTypes';
+
+function onCustomHookError(params: { methodName: string; error?: CustomHookError }) {
     // eslint-disable-next-line no-console
     console.error(
         `[Custom Hook] Something went wrong while calling ${params.methodName}. Error: ${params.error?.name} ${params.error?.message}`
     );
 }
 
-class BaseFormView extends PureComponent {
+class BaseFormView extends PureComponent<BaseFormProps, BaseFormState> {
     static contextType = TableContext;
 
-    constructor(props, context) {
+    context!: React.ContextType<typeof TableContext>;
+
+    flag: boolean;
+
+    currentInput: CurrentBaseFormInput;
+
+    appName: string;
+
+    groupEntities: string[];
+
+    endpoint: string;
+
+    util: UtilBaseForm;
+
+    onSavePromise?: Promise<unknown>;
+
+    utilControlWrapper: UtilControlWrapper;
+
+    groups?: ServiceGroup[];
+
+    entities?: AnyEntity[];
+
+    options?: { saveValidator?: string };
+
+    hookDeferred?: Promise<unknown>;
+
+    // eslint-disable-next-line camelcase
+    mode_config_title?: string;
+
+    dependencyMap: Map<string, Record<string, string[]>>;
+
+    isOAuth: boolean;
+
+    isAuthVal: boolean;
+
+    authMap: Record<string, string[]>;
+
+    isoauthState?: boolean | null;
+
+    isSingleOauth?: boolean;
+
+    oauthConf?: OauthConfiguration;
+
+    datadict: Record<string, AcceptableFormValueOrNullish>;
+
+    hook?: CustomHook;
+
+    // eslint-disable-next-line camelcase
+    state_enabled?: boolean;
+
+    // eslint-disable-next-line camelcase
+    oauth_state?: string;
+
+    isCalled?: boolean;
+
+    isError?: boolean;
+
+    isResponse?: boolean;
+
+    childWin?: Window | null;
+
+    customWarningMessage: { message: string; alwaysDisplay?: boolean };
+
+    constructor(props: BaseFormProps, context: React.ContextType<typeof TableContext>) {
         super(props);
         // flag for to render hook method for once
         this.flag = true;
         this.state = {};
+        this.datadict = {};
         this.currentInput = {};
         const globalConfig = getUnifiedConfigs();
         this.appName = globalConfig.meta.name;
@@ -51,7 +136,10 @@ class BaseFormView extends PureComponent {
         this.util = {
             setState: (callback) => {
                 this.onSavePromise = new Promise((resolve) => {
-                    this.setState((previousState) => callback(previousState), resolve);
+                    this.setState(
+                        (previousState) => callback(previousState),
+                        () => resolve(true)
+                    );
                 });
             },
             setErrorFieldMsg: this.setErrorFieldMsg,
@@ -64,10 +152,10 @@ class BaseFormView extends PureComponent {
             addCustomValidator: this.addCustomValidator,
             utilCustomFunctions: this.util,
         };
-        this.customWarningMessage = '';
+        this.customWarningMessage = { message: '' };
 
         if (props.page === PAGE_INPUT) {
-            globalConfig.pages.inputs.services.forEach((service) => {
+            globalConfig.pages?.inputs?.services.forEach((service) => {
                 if (service.name === props.serviceName) {
                     this.groups = service.groups;
                     this.entities = service.entity;
@@ -80,11 +168,15 @@ class BaseFormView extends PureComponent {
                             globalConfig
                         );
                     }
-                    if (props.mode === MODE_EDIT || props.mode === MODE_CLONE) {
+                    if ((props.mode === MODE_EDIT || props.mode === MODE_CLONE) && context) {
                         this.currentInput =
                             context?.rowData?.[props.serviceName]?.[props.stanzaName];
                     }
-                    this.customWarningMessage = service?.warning?.[props.mode] || '';
+                    if (props.mode !== 'delete') {
+                        this.customWarningMessage = service?.warning?.[props.mode] || {
+                            message: '',
+                        };
+                    }
                 }
             });
         } else {
@@ -92,10 +184,13 @@ class BaseFormView extends PureComponent {
                 const flag = tab.table
                     ? tab.name === props.serviceName
                     : tab.name === props.stanzaName && props.serviceName === 'settings';
+
                 if (flag) {
                     this.entities = tab.entity;
                     this.options = tab.options;
-                    this.customWarningMessage = tab?.warning?.[props.mode] || '';
+                    if (props.mode !== 'delete') {
+                        this.customWarningMessage = tab?.warning?.[props.mode] || { message: '' };
+                    }
                     if (tab.hook) {
                         this.hookDeferred = this.loadHook(
                             tab.hook.src,
@@ -103,13 +198,19 @@ class BaseFormView extends PureComponent {
                             globalConfig
                         );
                     }
+
                     if (tab.table && (props.mode === MODE_EDIT || props.mode === MODE_CLONE)) {
-                        this.currentInput =
-                            context?.rowData?.[props.serviceName]?.[props.stanzaName];
+                        if (context) {
+                            this.currentInput =
+                                context?.rowData?.[props.serviceName]?.[props.stanzaName];
+                        }
                     } else if (props.mode === MODE_CONFIG) {
-                        this.currentInput = props.currentServiceState;
+                        if (props.currentServiceState) {
+                            this.currentInput = props.currentServiceState;
+                        }
                         this.mode_config_title = tab.title;
-                    } else {
+                    } else if (context) {
+                        // TODO: validate if that case ever appear
                         this.currentInput = context?.rowData?.[props.serviceName];
                     }
                 }
@@ -119,14 +220,14 @@ class BaseFormView extends PureComponent {
         this.isOAuth = false;
         this.isAuthVal = false;
         this.authMap = {};
-        let temState = {};
-        const temEntities = [];
+        let temState: BaseFormStateData = {};
+        const temEntities: AnyEntity[] = [];
 
-        this.entities.forEach((e) => {
+        this.entities?.forEach((e) => {
             if (e.type === 'oauth') {
                 this.isOAuth = true;
                 if (props.page === PAGE_CONF && props.serviceName === 'account') {
-                    const authType = e?.options?.auth_type;
+                    const authType: ('basic' | 'oauth')[] = e?.options?.auth_type;
                     this.isoauthState =
                         typeof e?.options?.oauth_state_enabled !== 'undefined'
                             ? e?.options?.oauth_state_enabled
@@ -135,31 +236,38 @@ class BaseFormView extends PureComponent {
                     if (authType.length > 1) {
                         this.isAuthVal = true;
                         // Defining state for auth_type in case of multiple Authentication
-                        const tempEntity = {};
-                        tempEntity.value =
-                            typeof this.currentInput?.auth_type !== 'undefined'
-                                ? this.currentInput?.auth_type
-                                : authType[0];
-                        tempEntity.display = true;
-                        tempEntity.error = false;
-                        tempEntity.disabled = false;
+                        const tempEntity = {
+                            disabled: false,
+                            error: false,
+                            display: true,
+                            value:
+                                this.currentInput?.auth_type === 'oauth' ||
+                                this.currentInput?.auth_type === 'basic'
+                                    ? this.currentInput?.auth_type
+                                    : authType[0],
+                        };
+
                         temState.auth_type = tempEntity;
 
-                        // Defining Entity for auth_type in entitylist of globalConfig
-                        const entity = {};
-                        entity.field = 'auth_type';
-                        entity.type = 'singleSelect';
-                        entity.label = 'Auth Type';
                         const content = {
                             basic: 'Basic Authentication',
                             oauth: 'OAuth 2.0 Authentication',
                         };
-                        entity.options = {};
-                        entity.options.hideClearBtn = true;
-                        entity.options.autoCompleteFields = authType.map((type) => ({
-                            label: content[type],
-                            value: type,
-                        }));
+
+                        // Defining Entity for auth_type in entitylist of globalConfig
+                        const entity: SingleSelectEntityType = {
+                            field: 'auth_type',
+                            type: 'singleSelect',
+                            label: 'Auth Type',
+                            options: {
+                                hideClearBtn: true,
+                                autoCompleteFields: authType.map((type) => ({
+                                    label: content[type],
+                                    value: type,
+                                })),
+                            },
+                        };
+
                         temEntities.push(entity);
                     } else {
                         this.isSingleOauth = authType.includes('oauth');
@@ -167,36 +275,35 @@ class BaseFormView extends PureComponent {
 
                     // Adding State and Entity(in entitylist) for every Fields of "oauth" type
                     // Iterating over everytype of Authentication under "oauth" type
-                    authType.forEach((type) => {
-                        const authfields = [];
+                    authType?.forEach((type) => {
+                        const authfields: string[] = [];
                         const fields = e?.options[type];
                         if (fields) {
                             // For Particaular type iterating over fields
-                            fields.forEach((field) => {
+                            fields.forEach((field: OAuthEntity) => {
+                                if (!field) {
+                                    return;
+                                }
                                 // every field for auth type
-                                const tempEntity = {};
+                                const tempEntity: BasicEntity = {
+                                    disabled: field?.options?.enable === false,
+                                    error: false,
+                                    display: temState?.auth_type
+                                        ? type === temState?.auth_type?.value
+                                        : true,
+                                };
 
                                 if (props.mode === MODE_CREATE) {
                                     tempEntity.value =
                                         typeof field?.defaultValue !== 'undefined'
                                             ? field.defaultValue
-                                            : null;
+                                            : undefined;
                                 } else {
-                                    const isEncrypted =
-                                        typeof field?.encrypted !== 'undefined'
-                                            ? field?.encrypted
-                                            : false;
-                                    tempEntity.value = isEncrypted
-                                        ? ''
-                                        : this.currentInput?.[field.field];
+                                    const isEncrypted = field?.encrypted || false;
+                                    tempEntity.value = !isEncrypted
+                                        ? this.currentInput?.[field.field]
+                                        : '';
                                 }
-                                tempEntity.display =
-                                    typeof temState.auth_type !== 'undefined'
-                                        ? type === temState.auth_type.value
-                                        : true;
-                                tempEntity.error = false;
-
-                                tempEntity.disabled = field?.options?.enable === false;
 
                                 if (props.mode === MODE_EDIT) {
                                     // .disableonEdit = false do not overwrite .disabled = true
@@ -207,8 +314,7 @@ class BaseFormView extends PureComponent {
 
                                 temState[field.field] = tempEntity;
                                 // eslint-disable-next-line no-param-reassign
-                                field.type =
-                                    typeof field?.type !== 'undefined' ? field.type : 'text';
+                                field.type = field?.type || 'text';
 
                                 // Handled special case for redirect_url
                                 if (field.field === 'redirect_url') {
@@ -220,118 +326,125 @@ class BaseFormView extends PureComponent {
                                         );
                                     tempEntity.disabled = true;
                                 }
+
+                                // TODO: why field is pushed isntead of tempEntity
+                                // TODO: why temp entity is created at all
                                 temEntities.push(field);
-                                authfields.push(field.field);
+                                authfields?.push(field.field);
                             });
                             this.authMap[type] = authfields;
                         }
                     });
                     if (authType.includes('oauth')) {
-                        const oauthConfData = {};
                         // Storing O-Auth Configuration data to class variable to use later
-                        oauthConfData.popupWidth = e.options.oauth_popup_width
-                            ? e.options.oauth_popup_width
-                            : 600;
-                        oauthConfData.popupHeight = e.options.oauth_popup_height
-                            ? e.options.oauth_popup_height
-                            : 600;
-                        oauthConfData.authTimeout = e.options.oauth_timeout
-                            ? e.options.oauth_timeout
-                            : 180;
-                        oauthConfData.authCodeEndpoint = e.options.auth_code_endpoint
-                            ? e.options.auth_code_endpoint
-                            : null;
-                        oauthConfData.accessTokenEndpoint = e.options.access_token_endpoint
-                            ? e.options.access_token_endpoint
-                            : null;
-                        oauthConfData.authEndpointAccessTokenType = e.options
-                            .auth_endpoint_token_access_type
-                            ? e.options.auth_endpoint_token_access_type
-                            : null;
+
+                        const oauthConfData = {
+                            popupWidth: e?.options?.oauth_popup_width || 600,
+                            popupHeight: e?.options?.oauth_popup_height || 600,
+                            authTimeout: e?.options?.oauth_timeout || 180,
+                            authCodeEndpoint: e?.options?.auth_code_endpoint || null,
+                            accessTokenEndpoint: e?.options?.access_token_endpoint || null,
+                            authEndpointAccessTokenType:
+                                e?.options?.auth_endpoint_token_access_type || null,
+                        };
+
                         this.oauthConf = oauthConfData;
                     }
                 }
             } else {
-                const tempEntity = {};
-                e.encrypted = typeof e.encrypted !== 'undefined' ? e.encrypted : false;
-
-                if (e.type === 'file' && this.currentInput?.[e.field]) {
-                    /*
-                     adding example name to enable possibility of removal file,
-                     not forcing value addition as if value is encrypted it is shared as
-                     string ie. ***** and it is considered a valid default value
-                     if value is not encrypted it is pushed correctly along with this name
-                    */
-                    tempEntity.fileNameToDisplay = 'Previous File';
-                }
+                const tempEntity: BasicEntity = {
+                    disabled: false,
+                    error: false,
+                    display: true,
+                };
 
-                if (props.mode === MODE_CREATE) {
-                    tempEntity.value =
-                        typeof e.defaultValue !== 'undefined' ? e.defaultValue : null;
-                    tempEntity.display =
-                        typeof e?.options?.display !== 'undefined' ? e.options.display : true;
-                    tempEntity.error = false;
-                    tempEntity.disabled = e?.options?.enable === false;
-                    temState[e.field] = tempEntity;
-                } else if (props.mode === MODE_EDIT) {
-                    tempEntity.value =
-                        typeof this.currentInput?.[e.field] !== 'undefined'
-                            ? this.currentInput?.[e.field]
-                            : null;
-                    tempEntity.value = e.encrypted ? '' : tempEntity.value;
-                    tempEntity.display =
-                        typeof e?.options?.display !== 'undefined' ? e.options.display : true;
-                    tempEntity.error = false;
-                    tempEntity.disabled = e?.options?.enable === false;
-                    if (e.field === 'name') {
-                        tempEntity.disabled = true;
-                    } else if (typeof e?.options?.disableonEdit !== 'undefined') {
-                        tempEntity.disabled = e.options.disableonEdit;
+                if (e.type !== 'helpLink' && e.type !== 'custom') {
+                    e.encrypted = e?.encrypted || false;
+
+                    if (e.type === 'file' && this.currentInput?.[e.field]) {
+                        /*
+                         adding example name to enable possibility of removal file,
+                         not forcing value addition as if value is encrypted it is shared as
+                         string ie. ***** and it is considered a valid default value
+                         if value is not encrypted it is pushed correctly along with this name
+                        */
+                        tempEntity.fileNameToDisplay = 'Previous File';
                     }
-                    temState[e.field] = tempEntity;
-                } else if (props.mode === MODE_CLONE) {
-                    tempEntity.value =
-                        e.field === 'name' || e.encrypted ? '' : this.currentInput?.[e.field];
-                    tempEntity.display =
-                        typeof e?.options?.display !== 'undefined' ? e.options.display : true;
-                    tempEntity.error = false;
-                    tempEntity.disabled = e?.options?.enable === false;
-                    temState[e.field] = tempEntity;
-                } else if (props.mode === MODE_CONFIG) {
-                    e.defaultValue = typeof e.defaultValue !== 'undefined' ? e.defaultValue : null;
-                    tempEntity.value =
-                        typeof this.currentInput?.[e.field] !== 'undefined'
-                            ? this.currentInput?.[e.field]
-                            : e.defaultValue;
-                    tempEntity.value = e.encrypted ? '' : tempEntity.value;
-                    tempEntity.display =
-                        typeof e?.options?.display !== 'undefined' ? e.options.display : true;
-                    tempEntity.error = false;
-                    tempEntity.disabled = e?.options?.enable === false;
-                    if (e.field === 'name') {
-                        tempEntity.disabled = true;
-                    } else if (typeof e?.options?.disableonEdit !== 'undefined') {
-                        tempEntity.disabled = e.options.disableonEdit;
+                    if (props.mode === MODE_CREATE) {
+                        tempEntity.value =
+                            typeof e.defaultValue !== 'undefined' ? e?.defaultValue : null;
+                        tempEntity.display =
+                            typeof e?.options?.display !== 'undefined' ? e.options.display : true;
+                        tempEntity.error = false;
+                        tempEntity.disabled = e?.options?.enable === false;
+                        temState[e.field] = tempEntity;
+                    } else if (props.mode === MODE_EDIT) {
+                        tempEntity.value =
+                            typeof this.currentInput?.[e.field] !== 'undefined'
+                                ? this.currentInput?.[e.field]
+                                : null;
+                        tempEntity.value = e.encrypted ? '' : tempEntity.value;
+                        tempEntity.display =
+                            typeof e?.options?.display !== 'undefined' ? e.options.display : true;
+                        tempEntity.error = false;
+                        tempEntity.disabled = e?.options?.enable === false;
+                        if (e.field === 'name') {
+                            tempEntity.disabled = true;
+                        } else if (typeof e?.options?.disableonEdit !== 'undefined') {
+                            tempEntity.disabled = e.options.disableonEdit;
+                        }
+                        temState[e.field] = tempEntity;
+                    } else if (props.mode === MODE_CLONE) {
+                        tempEntity.value =
+                            e.field === 'name' || e.encrypted ? '' : this.currentInput?.[e.field];
+                        tempEntity.display =
+                            typeof e?.options?.display !== 'undefined' ? e.options.display : true;
+                        tempEntity.error = false;
+                        tempEntity.disabled = e?.options?.enable === false;
+                        temState[e.field] = tempEntity;
+                    } else if (props.mode === MODE_CONFIG) {
+                        e.defaultValue =
+                            typeof e.defaultValue !== 'undefined' ? e.defaultValue : undefined;
+                        tempEntity.value =
+                            typeof this.currentInput?.[e.field] !== 'undefined'
+                                ? this.currentInput?.[e.field]
+                                : e.defaultValue;
+                        tempEntity.value = e.encrypted ? '' : tempEntity.value;
+                        tempEntity.display =
+                            typeof e?.options?.display !== 'undefined' ? e.options.display : true;
+                        tempEntity.error = false;
+                        tempEntity.disabled = e?.options?.enable === false;
+                        if (e.field === 'name') {
+                            tempEntity.disabled = true;
+                        } else if (typeof e?.options?.disableonEdit !== 'undefined') {
+                            tempEntity.disabled = e.options.disableonEdit;
+                        }
+                        temState[e.field] = tempEntity;
+                    } else {
+                        throw new Error(`Invalid mode : ${props.mode}`);
                     }
-                    temState[e.field] = tempEntity;
                 } else {
-                    throw new Error('Invalid mode :', props.mode);
+                    // TODO extract if before this if else block
+                    temState[e.field] = tempEntity;
                 }
 
                 // handle dependent fields
-                const fields = e.options?.dependencies;
-                if (fields) {
-                    fields.forEach((field) => {
-                        const changeFields = this.dependencyMap.get(field);
-                        if (changeFields) {
-                            changeFields[e.field] = fields;
-                        } else {
-                            this.dependencyMap.set(field, {
-                                [e.field]: fields,
-                            });
-                        }
-                    });
+                if (e.type === 'singleSelect' || e.type === 'multipleSelect') {
+                    const fieldsDependedOn = e.options?.dependencies;
+                    if (fieldsDependedOn) {
+                        fieldsDependedOn.forEach((field: string) => {
+                            const changeFields = this.dependencyMap.get(field);
+                            if (changeFields && typeof e.field === 'string') {
+                                changeFields[e.field] = fieldsDependedOn;
+                            } else {
+                                this.dependencyMap.set(field, {
+                                    [e.field]: fieldsDependedOn,
+                                });
+                            }
+                        });
+                    }
                 }
+
                 temEntities.push(e);
             }
         });
@@ -340,21 +453,28 @@ class BaseFormView extends PureComponent {
 
         // flatten the dependencyMap to remove redundant iterations for resolving them
         // one-by-one in following loop
-        let flattenedMap = {};
+        let flattenedMap: Record<string, string[]> = {};
         this.dependencyMap.forEach((value) => {
             flattenedMap = { ...flattenedMap, ...value };
         });
 
-        const changes = {};
+        const changes: Record<
+            string,
+            {
+                dependencyValues: {
+                    $set: Record<string, AcceptableFormValueOrNullish>;
+                };
+            }
+        > = {};
         Object.keys(flattenedMap).forEach((field) => {
             const values = flattenedMap[field];
-            const data = {};
+            const data: Record<string, AcceptableFormValueOrNullish> = {};
             let load = true;
 
             values.forEach((dependency) => {
-                const required = !!this.entities.find((e) => e.field === dependency).required;
+                const required = !!this.entities?.find((e) => e.field === dependency)?.required;
 
-                const currentValue = temState[dependency].value;
+                const currentValue = temState[dependency]?.value;
                 if (required && !currentValue) {
                     load = false;
                     data[dependency] = null;
@@ -371,21 +491,23 @@ class BaseFormView extends PureComponent {
         });
 
         // apply dependency field changes in state
+        // @ts-expect-error variable changes should have property '$apply'
         temState = update(temState, changes);
         this.state = {
             data: temState,
             errorMsg: '',
-            warningMsg: this.customWarningMessage,
+            warningMsg: this.customWarningMessage?.message || '',
         };
 
         // Hook on create method call
         if (this.hookDeferred) {
             this.hookDeferred.then(() => {
-                if (typeof this.hook.onCreate === 'function') {
+                if (typeof this.hook?.onCreate === 'function') {
                     try {
                         this.hook.onCreate();
                     } catch (error) {
-                        onCustomHookError({ methodName: 'onCreate', error });
+                        const errorInCorrecttype = error as CustomHookError;
+                        onCustomHookError({ methodName: 'onCreate', error: errorInCorrecttype });
                     }
                 }
             });
@@ -400,15 +522,17 @@ class BaseFormView extends PureComponent {
         }
     };
 
-    // eslint-disable-next-line react/no-unused-class-component-methods
-    handleSubmit = () => {
+    handleSubmit = (event: React.MouseEvent | React.FormEvent) => {
+        event.preventDefault();
         this.clearErrorMsg();
         this.props.handleFormSubmit(/* isSubmitting */ true, /* closeEntity */ false);
 
         this.datadict = {};
 
-        Object.keys(this.state.data).forEach((field) => {
-            this.datadict[field] = this.state.data[field].value;
+        Object.keys(this.state.data || {}).forEach((field) => {
+            if (this.datadict) {
+                this.datadict[field] = this.state?.data?.[field].value;
+            }
         });
 
         if (this.hook && typeof this.hook.onSave === 'function') {
@@ -419,24 +543,32 @@ class BaseFormView extends PureComponent {
             }
         }
         const executeValidationSubmit = () => {
-            Object.keys(this.state.data).forEach((field) => {
-                this.datadict[field] = this.state.data[field].value;
+            Object.keys(this.state.data || {}).forEach((field) => {
+                this.datadict[field] = this.state?.data?.[field].value;
             });
 
             // validation for unique name
             if ([MODE_CREATE, MODE_CLONE].includes(this.props.mode)) {
                 const isExistingName = Boolean(
-                    Object.values(this.context?.rowData).find((val) =>
+                    Object.values(this.context?.rowData || {}).find((val) =>
                         Object.keys(val).find((name) => name === this.datadict.name)
                     )
                 );
 
-                if (isExistingName) {
+                if (isExistingName && this.entities) {
                     const index = this.entities.findIndex((e) => e.field === 'name');
-                    this.setErrorFieldMsg(
-                        'name',
-                        getFormattedMessage(2, [this.entities[index].label, this.datadict.name])
-                    );
+                    if (index !== -1) {
+                        const entityLabel = this.entities?.[index].label;
+                        const nameFromDict = this.datadict.name;
+
+                        if (entityLabel && nameFromDict && typeof nameFromDict !== 'object') {
+                            this.setErrorFieldMsg(
+                                'name',
+                                getFormattedMessage(2, [entityLabel, nameFromDict])
+                            );
+                        }
+                    }
+
                     this.props.handleFormSubmit(/* isSubmitting */ false, /* closeEntity */ false);
                     return;
                 }
@@ -445,14 +577,14 @@ class BaseFormView extends PureComponent {
             // validation condition of required fields in O-Auth
             let temEntities;
             if (this.isOAuth) {
-                let reqFields = [];
+                let reqFields: string[] = [];
                 Object.keys(this.authMap).forEach((type) => {
                     // `isAuthVal` is required in a case where only single auth type is provided
                     if (type === this.datadict.auth_type || !this.isAuthVal) {
                         reqFields = [...reqFields, ...this.authMap[type]];
                     }
                 });
-                temEntities = this.entities.map((e) => {
+                temEntities = this.entities?.map((e) => {
                     if (reqFields.includes(e.field)) {
                         // All oauth fields are required except if explicitely `required` is set to `false`
                         return { required: true, ...e };
@@ -464,8 +596,14 @@ class BaseFormView extends PureComponent {
             }
 
             // require elements for UI when they are visible
-            temEntities = temEntities.map((entity) => {
-                if (entity?.options?.requiredWhenVisible && this.state.data[entity.field].display) {
+            temEntities = temEntities?.map((entity) => {
+                if (
+                    entity?.type !== 'helpLink' &&
+                    entity?.type !== 'oauth' &&
+                    entity?.type !== 'custom' &&
+                    entity?.options?.requiredWhenVisible &&
+                    this?.state?.data?.[entity.field].display
+                ) {
                     return { required: true, ...entity };
                 }
                 return entity;
@@ -473,18 +611,33 @@ class BaseFormView extends PureComponent {
 
             // Validation of form fields on Submit
             const validator = new Validator(temEntities);
-            let error = validator.doValidation(this.datadict);
+            let error:
+                | boolean
+                | {
+                      errorField?: string; // TODO add typescript to validation and remove those assertions
+                      errorMsg?: string;
+                  } = validator.doValidation(this.datadict);
             if (error) {
-                this.setErrorFieldMsg(error.errorField, error.errorMsg);
+                const errorWithCorretType = error as {
+                    errorField?: string;
+                    errorMsg?: string;
+                };
+                this.setErrorFieldMsg(
+                    errorWithCorretType?.errorField || '',
+                    errorWithCorretType?.errorMsg || ''
+                );
             } else if (this.options && this.options.saveValidator) {
-                error = SaveValidator(this.options.saveValidator, this.datadict);
+                error = SaveValidator(this.options.saveValidator, this.datadict) as {
+                    errorField?: string;
+                    errorMsg?: string;
+                };
                 if (error) {
-                    this.setErrorMsg(error.errorMsg);
+                    this.setErrorMsg(error.errorMsg || '');
                 }
             }
 
             if (error) {
-                this.props.handleFormSubmit(/* isSubmitting */ false, /* closeEntity */ false);
+                this.props.handleFormSubmit(false, false);
             } else if (
                 this.isOAuth &&
                 (this.isSingleOauth || (this.isAuthVal && this.datadict.auth_type === 'oauth'))
@@ -494,7 +647,7 @@ class BaseFormView extends PureComponent {
                 let parameters = `?response_type=code&client_id=${this.datadict.client_id}&redirect_uri=${this.datadict.redirect_url}`;
                 // Get the value for state_enabled
                 const stateEnabled = this.isoauthState != null ? this.isoauthState : false;
-                if (stateEnabled === 'true' || stateEnabled === true) {
+                if (stateEnabled === true) {
                     this.state_enabled = true;
                     // Generating a cryptographically strong state parameter, which will be used ONLY during configuration
                     this.oauth_state = uuidv4().replace(/-/g, '');
@@ -507,15 +660,19 @@ class BaseFormView extends PureComponent {
                     parameters = `${parameters}&scope=${this.datadict.scope}`;
                 }
 
-                if (this.oauthConf.authEndpointAccessTokenType) {
+                if (this.oauthConf?.authEndpointAccessTokenType) {
                     parameters = `${parameters}&token_access_type=${this.oauthConf.authEndpointAccessTokenType}`;
                 }
 
                 let host = encodeURI(
-                    `https://${this.datadict.endpoint}${this.oauthConf.authCodeEndpoint}${parameters}`
+                    `https://${this.datadict.endpoint || this.datadict.endpoint_authorize}${
+                        this.oauthConf?.authCodeEndpoint
+                    }${parameters}`
                 );
                 const redirectURI = new URLSearchParams(host).get('redirect_uri');
-                host = host.replace(redirectURI, encodeURIComponent(redirectURI));
+                if (redirectURI) {
+                    host = host.replace(redirectURI, encodeURIComponent(redirectURI));
+                }
 
                 (async () => {
                     this.isCalled = false;
@@ -527,7 +684,7 @@ class BaseFormView extends PureComponent {
                     this.childWin = window.open(
                         host,
                         `${this.appName} OAuth`,
-                        `width=${this.oauthConf.popupWidth}, height=${this.oauthConf.popupHeight}`
+                        `width=${this.oauthConf?.popupWidth}, height=${this.oauthConf?.popupHeight}`
                     );
                     // Callback to receive data from redirect url
                     window.getMessage = (message) => {
@@ -536,25 +693,19 @@ class BaseFormView extends PureComponent {
                         this.handleOauthToken(message);
                     };
                     // Wait till we get auth_code from calling site through redirect url, we will wait for 3 mins
-                    await this.waitForAuthentication(this.oauthConf.authTimeout);
+                    await this.waitForAuthentication(this.oauthConf?.authTimeout || 0);
 
-                    if (!this.isCalled && this.childWin.closed) {
+                    if (!this.isCalled && this.childWin?.closed) {
                         // Add error message if the user has close the authentication window without taking any action
                         this.setErrorMsg(ERROR_AUTH_PROCESS_TERMINATED_TRY_AGAIN);
-                        this.props.handleFormSubmit(
-                            /* isSubmitting */ false,
-                            /* closeEntity */ false
-                        );
+                        this.props.handleFormSubmit(false, false);
                         return false;
                     }
 
                     if (!this.isCalled) {
                         // Add timeout error message
                         this.setErrorMsg(ERROR_REQUEST_TIMEOUT_TRY_AGAIN);
-                        this.props.handleFormSubmit(
-                            /* isSubmitting */ false,
-                            /* closeEntity */ false
-                        );
+                        this.props.handleFormSubmit(false, false);
                         return false;
                     }
 
@@ -609,11 +760,12 @@ class BaseFormView extends PureComponent {
                 // Custom logic for only sending file content in payload, not file name and file size.
                 if (
                     typeof this.datadict[key] === 'object' &&
-                    this.entities.find((x) => x.field === key).type === 'file'
+                    this.entities?.find((x) => x?.field === key)?.type === 'file'
                 ) {
-                    body.append(key, this.datadict[key].fileContent);
-                } else {
-                    body.append(key, this.datadict[key]);
+                    const { fileContent } = this.datadict?.[key] as { fileContent: string };
+                    body.append(key, fileContent);
+                } else if (this.datadict) {
+                    body.append(key, String(this.datadict[key]));
                 }
             }
         });
@@ -647,7 +799,7 @@ class BaseFormView extends PureComponent {
             .then((response) => {
                 const val = response?.data?.entry[0];
                 if (this.props.mode !== MODE_CONFIG) {
-                    const tmpObj = {};
+                    const tmpObj: Record<string, Record<string, AcceptableFormValueOrNull>> = {};
 
                     tmpObj[val.name] = {
                         // ADDON-38581: `datadict` provides fallback values if rh skips
@@ -658,13 +810,13 @@ class BaseFormView extends PureComponent {
                         serviceName: this.props.serviceName,
                     };
 
-                    this.context.setRowData(
+                    this.context?.setRowData(
                         update(this.context?.rowData, {
                             [this.props.serviceName]: { $merge: tmpObj },
                         })
                     );
                 }
-                if (this.hook && typeof this.hook.onSaveSuccess === 'function') {
+                if (typeof this.hook?.onSaveSuccess === 'function') {
                     this.hook.onSaveSuccess();
                 }
                 if (this.props.mode === MODE_EDIT) {
@@ -677,7 +829,7 @@ class BaseFormView extends PureComponent {
                 } else {
                     generateToast(`Created "${val.name}"`, 'success');
                 }
-                this.props.handleFormSubmit(/* isSubmitting */ false, /* closeEntity */ true);
+                this.props.handleFormSubmit(false, true);
             })
             .catch((err) => {
                 const errorSubmitMsg = parseErrorMsg(err);
@@ -685,39 +837,45 @@ class BaseFormView extends PureComponent {
                 if (this.hook && typeof this.hook.onSaveFail === 'function') {
                     this.hook.onSaveFail();
                 }
-                this.props.handleFormSubmit(/* isSubmitting */ false, /* closeEntity */ false);
+                this.props.handleFormSubmit(false, false);
             });
     };
 
-    handleChange = (field, targetValue) => {
+    handleChange = (field: string, targetValue: string) => {
         this.setState((prevState) => {
-            const changes = {};
+            const changes: Record<string, ChangeRecord> = {};
+
             if (field === 'auth_type') {
                 Object.keys(this.authMap).forEach((type) => {
                     if (type === targetValue) {
                         this.authMap[type].forEach((e) => {
+                            // displaying correct oauth fields
                             changes[e] = { display: { $set: true } };
                         });
                     } else {
+                        // hide other oauth fields
                         this.authMap[type].forEach((e) => {
                             changes[e] = { display: { $set: false } };
                         });
+                        // TODO: extract this forEach and apply type === targetValue instead of direct boolean
                     }
                 });
             }
 
             if (this.dependencyMap.has(field)) {
                 const value = this.dependencyMap.get(field);
-                Object.keys(value).forEach((loadField) => {
-                    const data = {};
+                Object.keys(value || {}).forEach((loadField) => {
+                    const data: Record<string, AcceptableFormValueOrNullish> = {};
                     let load = true;
 
-                    value[loadField].forEach((dependency) => {
-                        const required = !!this.entities.find((e) => e.field === dependency)
-                            .required;
+                    value?.[loadField].forEach((dependency) => {
+                        const required = !!this.entities?.find((e) => e.field === dependency)
+                            ?.required;
 
                         const currentValue =
-                            dependency === field ? targetValue : prevState.data[dependency].value;
+                            dependency === field
+                                ? targetValue
+                                : prevState?.data?.[dependency]?.value;
                         if (required && !currentValue) {
                             load = false;
                             data[dependency] = null;
@@ -737,12 +895,13 @@ class BaseFormView extends PureComponent {
 
             changes[field] = { value: { $set: targetValue } };
 
+            // @ts-expect-error variable changes should have property '$apply'
             const newFields = update(prevState, { data: changes });
             const tempState = this.clearAllErrorMsg(newFields);
 
             if (this.hookDeferred) {
                 this.hookDeferred.then(() => {
-                    if (typeof this.hook.onChange === 'function') {
+                    if (typeof this.hook?.onChange === 'function' && tempState) {
                         this.hook.onChange(field, targetValue, tempState);
                     }
                 });
@@ -752,26 +911,31 @@ class BaseFormView extends PureComponent {
         });
     };
 
-    addCustomValidator = (field, validatorFunc) => {
-        const index = this.entities.findIndex((x) => x.field === field);
+    addCustomValidator = (
+        field: string,
+        validatorFunc: (submittedField: string, submittedValue: string) => void
+    ) => {
+        const index = this.entities?.findIndex((x) => x.field === field);
         const validator = [{ type: 'custom', validatorFunc }];
-        this.entities[index].validators = validator;
+        if (index && this.entities?.[index]) {
+            // here the validators already exist for entities so new type is created here
+            // @ts-expect-error todo create a generalized type to also consider it
+            this.entities[index].validators = validator;
+        }
     };
 
     // Set error message to display and set error in perticular field
-    setErrorFieldMsg = (field, msg) => {
+    setErrorFieldMsg = (field: string, msg: string) => {
         this.setState((previousState) => {
             const newFields = update(previousState, {
                 data: { [field]: { error: { $set: true } } },
             });
-            newFields.errorMsg = msg;
-            return newFields;
+            return { ...newFields, errorMsg: msg };
         });
     };
 
     // Set error in perticular field
-    // eslint-disable-next-line react/no-unused-class-component-methods
-    setErrorField = (field) => {
+    setErrorField = (field: string) => {
         this.setState((previousState) =>
             update(previousState, { data: { [field]: { error: { $set: true } } } })
         );
@@ -785,17 +949,18 @@ class BaseFormView extends PureComponent {
     };
 
     // Set error message
-    setErrorMsg = (msg) => {
+    setErrorMsg = (msg: string) => {
         this.setState((previousState) => ({ ...previousState, errorMsg: msg }));
     };
 
     // Clear error/warning message and errors from fields
-    clearAllErrorMsg = (State) => {
+    clearAllErrorMsg = (State: BaseFormState) => {
         const newFields = State ? { ...State } : { ...this.state };
         newFields.errorMsg = '';
-        newFields.warningMsg = this.customWarningMessage || '';
-        const newData = State ? { ...State.data } : { ...this.state.data };
-        const temData = {};
+        newFields.warningMsg =
+            (this.customWarningMessage?.alwaysDisplay && this.customWarningMessage?.message) || '';
+        const newData: BaseFormStateData = State ? { ...State.data } : { ...this.state.data };
+        const temData: BaseFormStateData = {};
         Object.keys(newData).forEach((key) => {
             if (newData[key].error) {
                 temData[key] = { ...newData[key], error: false };
@@ -831,7 +996,7 @@ class BaseFormView extends PureComponent {
     };
 
     // generatesubmitMessage
-    loadHook = (module, type, globalConfig) => {
+    loadHook = (module: string, type: string, globalConfig: unknown) => {
         const myPromise = new Promise((resolve) => {
             if (type === 'external') {
                 import(/* webpackIgnore: true */ `${getBuildDirPath()}/custom/${module}.js`).then(
@@ -849,9 +1014,10 @@ class BaseFormView extends PureComponent {
                     }
                 );
             } else {
+                // @ts-expect-error should be exported to other js module and imported here
                 __non_webpack_require__(
                     [`app/${this.appName}/js/build/custom/${module}`],
-                    (Hook) => {
+                    (Hook: CustomHookClass) => {
                         this.hook = new Hook(
                             globalConfig,
                             this.props.serviceName,
@@ -872,7 +1038,7 @@ class BaseFormView extends PureComponent {
      * using rest call once oauth code received from child window
      */
     // eslint-disable-next-line consistent-return
-    handleOauthToken = (message) => {
+    handleOauthToken = (message: { code: string; error: unknown; state: unknown }) => {
         // Check message for error. If error show error message.
         if (!message || (message && message.error) || message.code === undefined) {
             this.setErrorMsg(ERROR_OCCURRED_TRY_AGAIN);
@@ -890,9 +1056,11 @@ class BaseFormView extends PureComponent {
         }
 
         const code = decodeURIComponent(message.code);
-        const data = {
+        const data: Record<string, AcceptableFormValueOrNullish> = {
             method: 'POST',
-            url: `https://${this.datadict.endpoint}${this.oauthConf.accessTokenEndpoint}`,
+            url: `https://${this.datadict.endpoint || this.datadict.endpoint_token}${
+                this.oauthConf?.accessTokenEndpoint
+            }`,
             grant_type: 'authorization_code',
             client_id: this.datadict.client_id,
             client_secret: this.datadict.client_secret,
@@ -906,7 +1074,10 @@ class BaseFormView extends PureComponent {
 
         const body = new URLSearchParams();
         Object.keys(data).forEach((key) => {
-            body.append(key, data[key]);
+            const value = data[key];
+            if (value) {
+                body.append(key, String(value));
+            }
         });
 
         const OAuthEndpoint = `${this.appName}_oauth/oauth`;
@@ -923,7 +1094,7 @@ class BaseFormView extends PureComponent {
                     const accessToken = response.data.entry[0].content.access_token;
                     const instanceUrl = response.data.entry[0].content.instance_url;
                     const refreshToken = response.data.entry[0].content.refresh_token;
-
+                    // TODO refactor those variables
                     this.datadict.instance_url = instanceUrl;
                     this.datadict.refresh_token = refreshToken;
                     this.datadict.access_token = accessToken;
@@ -945,7 +1116,7 @@ class BaseFormView extends PureComponent {
 
     // Function to wait for authentication call back in child window.
     // eslint-disable-next-line consistent-return
-    waitForAuthentication = async (count) => {
+    waitForAuthentication = async (count: number) => {
         // eslint-disable-next-line no-param-reassign
         count -= 1;
         // Check if callback function called if called then exit from wait
@@ -953,7 +1124,7 @@ class BaseFormView extends PureComponent {
             return true;
         }
         // If callback function is not called and count is not reached to 180 then return error for timeout
-        if (count === 0 || this.childWin.closed) {
+        if (count === 0 || this.childWin?.closed) {
             this.isError = true;
             return false;
         }
@@ -964,7 +1135,7 @@ class BaseFormView extends PureComponent {
     // Function to wait for backend call get response from backend
 
     // eslint-disable-next-line consistent-return
-    waitForBackendResponse = async (count) => {
+    waitForBackendResponse = async (count: number) => {
         // eslint-disable-next-line no-param-reassign
         count += 1;
         // Check if callback function called if called then exit from wait
@@ -982,7 +1153,7 @@ class BaseFormView extends PureComponent {
     /*
      * This function first add sleep for 1 secs and the call the function passed in argument
      */
-    sleep = async (fn, ...args) => {
+    sleep = async (fn: (...someArgs: number[]) => unknown, ...args: number[]) => {
         await this.timeout(1000);
         return fn(...args);
     };
@@ -991,7 +1162,7 @@ class BaseFormView extends PureComponent {
      * This function will resolve the promise once the provided timeout occurs
      */
     // eslint-disable-next-line class-methods-use-this
-    timeout = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // eslint-disable-line no-promise-executor-return
+    timeout = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); // eslint-disable-line no-promise-executor-return
 
     renderGroupElements = () => {
         let el = null;
@@ -1000,22 +1171,26 @@ class BaseFormView extends PureComponent {
                 const collapsibleElement =
                     group.fields?.length &&
                     group.fields.map((fieldName) =>
-                        this.entities.map((e) => {
+                        this.entities?.map((e) => {
                             if (e.field === fieldName) {
-                                const temState = this.state.data[e.field];
+                                const temState = this.state?.data?.[e.field];
                                 return (
                                     <ControlWrapper
                                         key={e.field}
                                         utilityFuncts={this.utilControlWrapper}
-                                        value={temState.value}
-                                        display={temState.display}
-                                        error={temState.error}
+                                        value={temState?.value}
+                                        display={
+                                            typeof temState?.display !== 'undefined'
+                                                ? temState.display
+                                                : true
+                                        }
+                                        error={temState?.error || false}
                                         entity={e}
                                         serviceName={this.props.serviceName}
                                         mode={this.props.mode}
-                                        disabled={temState.disabled}
-                                        markdownMessage={temState.markdownMessage}
-                                        dependencyValues={temState.dependencyValues || null}
+                                        disabled={temState?.disabled || false}
+                                        markdownMessage={temState?.markdownMessage}
+                                        dependencyValues={temState?.dependencyValues || null}
                                     />
                                 );
                             }
@@ -1043,11 +1218,15 @@ class BaseFormView extends PureComponent {
         if (this.flag) {
             if (this.hookDeferred) {
                 this.hookDeferred.then(() => {
-                    if (typeof this.hook.onRender === 'function') {
+                    if (typeof this.hook?.onRender === 'function') {
                         try {
                             this.hook.onRender();
                         } catch (error) {
-                            onCustomHookError({ methodName: 'onRender', error });
+                            const errorInCorrecttype = error as CustomHookError;
+                            onCustomHookError({
+                                methodName: 'onRender',
+                                error: errorInCorrecttype,
+                            });
                         }
                     }
                 });
@@ -1056,11 +1235,15 @@ class BaseFormView extends PureComponent {
             if (this.props.mode === MODE_EDIT) {
                 if (this.hookDeferred) {
                     this.hookDeferred.then(() => {
-                        if (typeof this.hook.onEditLoad === 'function') {
+                        if (typeof this.hook?.onEditLoad === 'function') {
                             try {
                                 this.hook.onEditLoad();
                             } catch (error) {
-                                onCustomHookError({ methodName: 'onEditLoad', error });
+                                const errorInCorrecttype = error as CustomHookError;
+                                onCustomHookError({
+                                    methodName: 'onEditLoad',
+                                    error: errorInCorrecttype,
+                                });
                             }
                         }
                     });
@@ -1070,16 +1253,19 @@ class BaseFormView extends PureComponent {
         }
         return (
             <div>
-                <form style={this.props.mode === MODE_CONFIG ? { marginTop: '25px' } : {}}>
+                <form
+                    onSubmit={this.handleSubmit}
+                    style={this.props.mode === MODE_CONFIG ? { marginTop: '25px' } : {}}
+                >
                     {this.generateWarningMessage()}
                     {this.generateErrorMessage()}
-                    {this.entities.map((e) => {
+                    {this.entities?.map((e) => {
                         // Return null if we need to show element in a group
                         if (this.groupEntities.includes(e.field)) {
                             return null;
                         }
 
-                        const temState = this.state.data[e.field];
+                        const temState = this.state?.data?.[e.field];
 
                         if (!temState) {
                             return null;
@@ -1098,7 +1284,7 @@ class BaseFormView extends PureComponent {
                                 disabled={temState.disabled}
                                 markdownMessage={temState.markdownMessage}
                                 dependencyValues={temState.dependencyValues || null}
-                                fileNameToDisplay={temState.fileNameToDisplay || null}
+                                fileNameToDisplay={temState.fileNameToDisplay}
                             />
                         );
                     })}
@@ -1109,14 +1295,4 @@ class BaseFormView extends PureComponent {
     }
 }
 
-BaseFormView.propTypes = {
-    page: PropTypes.string,
-    serviceName: PropTypes.string,
-    stanzaName: PropTypes.string,
-    currentServiceState: PropTypes.object,
-    mode: PropTypes.string,
-    handleFormSubmit: PropTypes.func,
-    groupName: PropTypes.string,
-};
-
 export default BaseFormView;
diff --git a/ui/src/components/CheckboxGroup/CheckboxGroup.stories.tsx b/ui/src/components/CheckboxGroup/CheckboxGroup.stories.tsx
index d480c5a15..09a5c9eb3 100644
--- a/ui/src/components/CheckboxGroup/CheckboxGroup.stories.tsx
+++ b/ui/src/components/CheckboxGroup/CheckboxGroup.stories.tsx
@@ -1,12 +1,11 @@
 import type { Meta, StoryObj } from '@storybook/react';
-import BaseFormView from '../BaseFormView';
 import CheckboxGroup from './CheckboxGroup';
 import { MODE_CREATE, MODE_EDIT } from '../../constants/modes';
 
 const meta = {
     component: CheckboxGroup,
     title: 'Components/CheckboxGroup',
-} satisfies Meta<typeof BaseFormView>;
+} satisfies Meta<typeof CheckboxGroup>;
 
 export default meta;
 type Story = StoryObj<typeof meta>;
diff --git a/ui/src/components/CheckboxGroup/CheckboxGroupInputPage.stories.tsx b/ui/src/components/CheckboxGroup/CheckboxGroupInputPage.stories.tsx
index ba9f443f7..1dffa8bbe 100644
--- a/ui/src/components/CheckboxGroup/CheckboxGroupInputPage.stories.tsx
+++ b/ui/src/components/CheckboxGroup/CheckboxGroupInputPage.stories.tsx
@@ -28,9 +28,9 @@ const meta = {
         const newInputBtn = canvas.getByRole('button', { name: 'Create New Input' });
         await userEvent.click(newInputBtn);
     },
-} satisfies Meta<typeof BaseFormView>;
+} satisfies Meta;
 
 export default meta;
-type Story = StoryObj<typeof meta>;
+type Story = StoryObj<typeof BaseFormView>;
 
 export const InputPageView: Story = {};
diff --git a/ui/src/components/CheckboxGroup/checkboxGroupMocks.ts b/ui/src/components/CheckboxGroup/checkboxGroupMocks.ts
index 71044c2e4..bc4cf2244 100644
--- a/ui/src/components/CheckboxGroup/checkboxGroupMocks.ts
+++ b/ui/src/components/CheckboxGroup/checkboxGroupMocks.ts
@@ -12,12 +12,4 @@ export const serverHandlers = [
             ],
         })
     ),
-    http.post(`/servicesNS/:user/-/:serviceName`, async ({ request }) =>
-        HttpResponse.json(
-            {
-                messages: [{ text: `Submitted body: ${decodeURIComponent(await request.text())}` }],
-            },
-            { status: 500 }
-        )
-    ),
 ];
diff --git a/ui/src/components/ConfigurationFormView.jsx b/ui/src/components/ConfigurationFormView.jsx
index 949badf82..87b6cc284 100644
--- a/ui/src/components/ConfigurationFormView.jsx
+++ b/ui/src/components/ConfigurationFormView.jsx
@@ -37,8 +37,11 @@ function ConfigurationFormView({ serviceName }) {
         });
     }, [serviceName]);
 
-    const handleSubmit = () => {
-        form.current.handleSubmit();
+    /**
+     * @param event {React.MouseEvent<HTMLButtonElement>}
+     */
+    const handleSubmit = (event) => {
+        form.current.handleSubmit(event);
     };
 
     const handleFormSubmit = (set) => {
diff --git a/ui/src/components/ControlWrapper.stories.ts b/ui/src/components/ControlWrapper.stories.ts
index 29784cccf..419bcd7f3 100644
--- a/ui/src/components/ControlWrapper.stories.ts
+++ b/ui/src/components/ControlWrapper.stories.ts
@@ -12,7 +12,14 @@ type Story = StoryObj<typeof meta>;
 export const Base: Story = {
     args: {
         utilityFuncts: {
-            utilCustomFunctions: {},
+            utilCustomFunctions: {
+                setState: () => {},
+                setErrorFieldMsg: () => {},
+                clearAllErrorMsg: () => {},
+                setErrorMsg: () => {},
+            },
+            handleChange: () => {},
+            addCustomValidator: () => {},
         },
         value: '',
         display: true,
@@ -28,7 +35,7 @@ export const Base: Story = {
             },
             encrypted: true,
             required: true,
-            defaultValue: null,
+            defaultValue: undefined,
         },
         serviceName: 'settings',
         mode: 'config',
diff --git a/ui/src/components/ControlWrapper.tsx b/ui/src/components/ControlWrapper.tsx
index 46259be5d..c3ee6925b 100644
--- a/ui/src/components/ControlWrapper.tsx
+++ b/ui/src/components/ControlWrapper.tsx
@@ -1,9 +1,10 @@
 import React from 'react';
 import ControlGroup from '@splunk/react-ui/ControlGroup';
 import styled from 'styled-components';
-
-import MarkdownMessage from './MarkdownMessage';
+import MarkdownMessage, { MarkdownMessageProps } from './MarkdownMessage';
 import CONTROL_TYPE_MAP, { ComponentTypes } from '../constants/ControlTypeMap';
+import { AnyEntity, UtilControlWrapper } from './BaseFormTypes';
+import { AcceptableFormValueOrNullish } from '../types/components/shareableTypes';
 
 const CustomElement = styled.div``;
 
@@ -25,40 +26,16 @@ const ControlGroupWrapper = styled(ControlGroup).attrs((props: { dataName: strin
 
 interface ControlWrapperProps {
     mode: string;
-    utilityFuncts: {
-        handleChange?: () => void;
-        addCustomValidator?: (
-            field: string,
-            validator: (submittedField: string, submittedValue: string) => void
-        ) => void;
-        utilCustomFunctions?: unknown;
-    };
-    value: unknown;
+    utilityFuncts: UtilControlWrapper;
+    value: AcceptableFormValueOrNullish;
     display: boolean;
     error: boolean;
-    entity: {
-        type: unknown;
-        field: string;
-        label: string;
-        options: Record<string, unknown>;
-        tooltip?: string;
-        help?: string;
-        encrypted?: boolean;
-        required?: boolean;
-        defaultValue?: unknown;
-    };
     disabled: boolean;
-    markdownMessage?: {
-        text: string;
-        link: string;
-        color: string;
-        markdownType: 'link' | 'text' | 'hybrid';
-        token: string;
-        linkText: string;
-    };
     serviceName: string;
     dependencyValues: unknown;
-    fileNameToDisplay: string;
+    entity?: AnyEntity;
+    markdownMessage?: MarkdownMessageProps;
+    fileNameToDisplay?: string;
 }
 
 class ControlWrapper extends React.PureComponent<ControlWrapperProps> {
@@ -68,28 +45,19 @@ class ControlWrapper extends React.PureComponent<ControlWrapperProps> {
 
     constructor(props: ControlWrapperProps) {
         super(props);
-        this.controlType = ControlWrapper.isString(props.entity.type)
-            ? CONTROL_TYPE_MAP[String(props.entity.type)]
+        this.controlType = ControlWrapper.isString(props.entity?.type)
+            ? CONTROL_TYPE_MAP[String(props.entity?.type)]
             : null;
     }
 
     render() {
-        const {
-            field,
-            type,
-            label,
-            tooltip,
-            help,
-            encrypted = false,
-            required,
-        } = this.props.entity;
         const { handleChange, addCustomValidator, utilCustomFunctions } = this.props.utilityFuncts;
         // We have to put empty object because markDownMessage prop can be undefined
         // because we are not explicitly setting it but expecting it from custom hooks only.
         const { text, link, color, markdownType, token, linkText } =
             this.props.markdownMessage || {};
         let rowView;
-        if (this.props.entity.type === 'custom') {
+        if (this.props?.entity?.type === 'custom') {
             const data = {
                 value: this.props.value,
                 mode: this.props.mode,
@@ -99,30 +67,28 @@ class ControlWrapper extends React.PureComponent<ControlWrapperProps> {
             rowView = this.controlType
                 ? React.createElement(this.controlType, {
                       data,
-                      field,
                       handleChange,
                       addCustomValidator,
                       utilCustomFunctions,
                       controlOptions: this.props.entity.options,
+                      ...this?.props?.entity,
                   })
-                : `No View Found for ${type} type`;
+                : `No View Found for ${this?.props?.entity?.type} type`;
         } else {
             rowView = this.controlType
                 ? React.createElement(this.controlType, {
                       handleChange,
                       value: this.props.value,
-                      field,
-                      controlOptions: this.props.entity.options,
+                      controlOptions: this.props.entity?.options,
                       error: this.props.error,
                       disabled: this.props.disabled,
-                      encrypted,
                       dependencyValues: this.props.dependencyValues,
-                      required,
                       addCustomValidator,
                       fileNameToDisplay: this.props.fileNameToDisplay,
                       mode: this.props.mode,
+                      ...this?.props?.entity,
                   })
-                : `No View Found for ${type} type`;
+                : `No View Found for ${this?.props?.entity?.type} type`;
         }
 
         const helpText = (
@@ -135,22 +101,20 @@ class ControlWrapper extends React.PureComponent<ControlWrapperProps> {
                     token={token || ''}
                     linkText={linkText || ''}
                 />
-                {help}
+                {this?.props?.entity?.help || ''}
             </>
         );
 
         return (
             this.props.display && (
                 <ControlGroupWrapper
-                    label={label}
                     help={helpText}
-                    tooltip={tooltip}
                     error={this.props.error}
                     // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                     // @ts-ignore property should be data-name, but is mapped in obj ControlGroupWrapper
-                    dataName={field}
-                    required={required}
+                    dataName={this?.props?.entity.field}
                     labelWidth={240}
+                    {...this?.props?.entity}
                 >
                     <CustomElement>{rowView}</CustomElement>
                 </ControlGroupWrapper>
diff --git a/ui/src/components/DeleteModal/DeleteModal.tsx b/ui/src/components/DeleteModal/DeleteModal.tsx
index 2ef3d0803..b04ac6e41 100644
--- a/ui/src/components/DeleteModal/DeleteModal.tsx
+++ b/ui/src/components/DeleteModal/DeleteModal.tsx
@@ -64,7 +64,7 @@ class DeleteModal extends Component<DeleteModalProps, DeleteModalState> {
                         return Promise.reject(err);
                     })
                     .then(() => {
-                        this.context.setRowData(
+                        this.context?.setRowData(
                             update(this.context.rowData, {
                                 [this.props.serviceName]: { $unset: [this.props.stanzaName] },
                             })
diff --git a/ui/src/components/EntityModal/EntityModal.tsx b/ui/src/components/EntityModal/EntityModal.tsx
index 787ea238f..0c47c6456 100644
--- a/ui/src/components/EntityModal/EntityModal.tsx
+++ b/ui/src/components/EntityModal/EntityModal.tsx
@@ -4,7 +4,8 @@ import styled from 'styled-components';
 import WaitSpinner from '@splunk/react-ui/WaitSpinner';
 import { _ } from '@splunk/ui-utils/i18n';
 
-import { MODE_CLONE, MODE_CREATE, MODE_EDIT } from '../../constants/modes';
+import { ButtonClickHandler } from '@splunk/react-ui/Button';
+import { Mode, MODE_CLONE, MODE_CREATE, MODE_EDIT } from '../../constants/modes';
 import { StyledButton } from '../../pages/EntryPageStyle';
 import BaseFormView from '../BaseFormView';
 
@@ -14,7 +15,7 @@ const ModalWrapper = styled(Modal)`
 
 export interface EntityModalProps {
     page: string;
-    mode: string;
+    mode: Mode;
     serviceName: string;
     handleRequestClose: () => void;
     stanzaName?: string;
@@ -53,8 +54,8 @@ class EntityModal extends Component<EntityModalProps, EntityModalState> {
         this.props.handleRequestClose();
     };
 
-    handleSubmit = () => {
-        const result = this.form.current?.handleSubmit();
+    handleSubmit: ButtonClickHandler = (e) => {
+        const result = this.form.current?.handleSubmit(e);
         if (result) {
             this.handleRequestClose();
         }
@@ -84,7 +85,7 @@ class EntityModal extends Component<EntityModalProps, EntityModalState> {
                         page={this.props.page}
                         serviceName={this.props.serviceName}
                         mode={this.props.mode}
-                        stanzaName={this.props.stanzaName}
+                        stanzaName={this.props.stanzaName || 'unknownStanza'}
                         handleFormSubmit={this.handleFormSubmit}
                         groupName={this.props.groupName}
                     />
diff --git a/ui/src/components/EntityModal/TestConfig.ts b/ui/src/components/EntityModal/TestConfig.ts
index 8c2babd67..fdaa92c58 100644
--- a/ui/src/components/EntityModal/TestConfig.ts
+++ b/ui/src/components/EntityModal/TestConfig.ts
@@ -223,10 +223,17 @@ export const getConfigEnableFalseForOauth = () => {
 };
 
 export const WARNING_MESSAGES = {
-    create: 'Some warning text create',
-    edit: 'Some warning text edit',
-    clone: 'Some warning text clone',
-    config: 'Some warning text config',
+    create: { message: 'Some warning text create' },
+    edit: { message: 'Some warning text edit' },
+    clone: { message: 'Some warning text clone' },
+    config: { message: 'Some warning text config' },
+};
+
+export const WARNING_MESSAGES_ALWAYS_DISPLAY = {
+    create: { message: 'Some warning text create', alwaysDisplay: true },
+    edit: { message: 'Some warning text edit', alwaysDisplay: true },
+    clone: { message: 'Some warning text clone', alwaysDisplay: true },
+    config: { message: 'Some warning text config', alwaysDisplay: true },
 };
 
 export const getConfigWarningMessage = () => {
@@ -246,6 +253,27 @@ export const getConfigWarningMessage = () => {
     return newConfig satisfies z.infer<typeof GlobalConfigSchema>;
 };
 
+export const getConfigWarningMessageAlwaysDisplay = () => {
+    const globalConfig = getGlobalConfigMock();
+    const newConfig = {
+        ...globalConfig,
+        pages: {
+            ...globalConfig.pages,
+            configuration: {
+                ...globalConfig.pages.configuration,
+                tabs: [
+                    {
+                        entity: accessTokenMock,
+                        ...defaultTableProps,
+                        warning: WARNING_MESSAGES_ALWAYS_DISPLAY,
+                    },
+                ],
+            },
+        },
+    };
+    return newConfig satisfies z.infer<typeof GlobalConfigSchema>;
+};
+
 export const getConfigWarningMessageForInputServices = () => {
     const globalConfig = getGlobalConfigMock();
     const newConfig = {
@@ -421,3 +449,74 @@ export const getConfigWithOauthDefaultValue = () => {
     };
     return newConfig satisfies z.infer<typeof GlobalConfigSchema>;
 };
+
+const entityOauthOauthSeparatedEndpoints = [
+    {
+        type: 'oauth',
+        field: 'oauth_jest_test',
+        label: 'Not used',
+        required: true,
+        encrypted: false,
+        options: {
+            auth_type: ['oauth'],
+            oauth: [
+                {
+                    oauth_field: 'client_id',
+                    label: 'Client Id',
+                    field: 'client_id',
+                    help: 'Enter the Client Id for this account.',
+                    defaultValue: 'Client Id',
+                },
+                {
+                    oauth_field: 'client_secret',
+                    label: 'Client Secret',
+                    field: 'client_secret',
+                    encrypted: true,
+                    help: 'Enter the Client Secret key for this account.',
+                    defaultValue: 'Client Secret',
+                },
+                {
+                    oauth_field: 'redirect_url',
+                    label: 'Redirect url',
+                    field: 'redirect_url',
+                    help: 'Copy and paste this URL into your app.',
+                    defaultValue: 'Redirect url',
+                },
+                {
+                    oauth_field: 'endpoint_token',
+                    label: 'Token endpoint',
+                    field: 'endpoint_token',
+                    help: 'Put here endpoint used for token acqusition ie. login.salesforce.com',
+                },
+                {
+                    oauth_field: 'endpoint_authorize',
+                    label: 'Authorize endpoint',
+                    field: 'endpoint_authorize',
+                    help: 'Put here endpoint used for authorization ie. login.salesforce.com',
+                },
+            ],
+            auth_code_endpoint: '/services/oauth2/authorize',
+            access_token_endpoint: '/services/oauth2/token',
+            oauth_timeout: 3000,
+            oauth_state_enabled: false,
+            display: true,
+            disableonEdit: false,
+            enable: true,
+        },
+    } satisfies z.infer<typeof OAuthEntity>,
+];
+
+export const getConfigWithSeparatedEndpointsOAuth = () => {
+    const globalConfig = getGlobalConfigMock();
+    const newConfig = {
+        ...globalConfig,
+        pages: {
+            ...globalConfig.pages,
+            configuration: {
+                ...globalConfig.pages.configuration,
+                tabs: [{ entity: entityOauthOauthSeparatedEndpoints, ...defaultTableProps }],
+            },
+        },
+    };
+    return newConfig satisfies z.infer<typeof GlobalConfigSchema>;
+};
diff --git a/ui/src/components/EntityPage.tsx b/ui/src/components/EntityPage.tsx
index dc7ccf442..fbe689153 100644
--- a/ui/src/components/EntityPage.tsx
+++ b/ui/src/components/EntityPage.tsx
@@ -8,6 +8,7 @@ import { variables } from '@splunk/themes';
 
 import Heading from '@splunk/react-ui/Heading';
 import styled from 'styled-components';
+import { ButtonClickHandler } from '@splunk/react-ui/Button';
 import { MODE_CLONE, MODE_CREATE, MODE_EDIT, Mode } from '../constants/modes';
 import BaseFormView from './BaseFormView';
 import { SubTitleComponent } from '../pages/Input/InputPageStyle';
@@ -55,8 +56,8 @@ function EntityPage({
         buttonText = _('Update');
     }
 
-    const handleSubmit = () => {
-        const result = form.current?.handleSubmit();
+    const handleSubmit: ButtonClickHandler = (e) => {
+        const result = form.current?.handleSubmit(e);
         if (result) {
             handleRequestClose();
         }
@@ -93,7 +94,7 @@ function EntityPage({
                             page={page}
                             serviceName={serviceName}
                             mode={mode}
-                            stanzaName={stanzaName}
+                            stanzaName={stanzaName || ''}
                             handleFormSubmit={handleFormSubmit}
                             groupName={groupName}
                         />
@@ -107,6 +108,7 @@ function EntityPage({
                             style={{ width: '80px' }}
                         />
                         <StyledButton
+                            type="Submit"
                             appearance="primary"
                             label={isSubmitting ? <WaitSpinner /> : buttonText}
                             onClick={handleSubmit}
diff --git a/ui/src/components/FileInputComponent/FileInputComponent.stories.tsx b/ui/src/components/FileInputComponent/FileInputComponent.stories.tsx
index a215a0c33..d7cc54e5f 100644
--- a/ui/src/components/FileInputComponent/FileInputComponent.stories.tsx
+++ b/ui/src/components/FileInputComponent/FileInputComponent.stories.tsx
@@ -1,11 +1,10 @@
 import type { Meta, StoryObj } from '@storybook/react';
 import FileInputComponent from './FileInputComponent';
-import BaseFormView from '../BaseFormView';
 
 const meta = {
     component: FileInputComponent,
     title: 'Components/FileInputComponent',
-} satisfies Meta<typeof BaseFormView>;
+} satisfies Meta<typeof FileInputComponent>;
 
 export default meta;
 type Story = StoryObj<typeof meta>;
diff --git a/ui/src/components/MarkdownMessage.tsx b/ui/src/components/MarkdownMessage.tsx
index a79b385e3..a2ba2b73e 100644
--- a/ui/src/components/MarkdownMessage.tsx
+++ b/ui/src/components/MarkdownMessage.tsx
@@ -6,7 +6,7 @@ const MarkdownWrapper = styled.span`
     color: ${(props) => props.color};
 `;
 
-interface MarkdownMessageProps {
+export interface MarkdownMessageProps {
     text: string;
     link: string;
     color: string;
diff --git a/ui/src/context/TableContext.jsx b/ui/src/context/TableContext.jsx
deleted file mode 100644
index c344c7398..000000000
--- a/ui/src/context/TableContext.jsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React, { createContext, useState } from 'react';
-import PropTypes from 'prop-types';
-
-const TableContext = createContext({
-    rowData: {},
-    setRowData: () => {},
-});
-
-export function TableContextProvider({ children }) {
-    const [rowData, setRowData] = useState({});
-    const [searchText, setSearchText] = useState('');
-    const [searchType, setSearchType] = useState('all');
-    const [pageSize, setPageSize] = useState(10);
-    const [currentPage, setCurrentPage] = useState(0);
-
-    return (
-        <TableContext.Provider
-            // eslint-disable-next-line react/jsx-no-constructed-context-values
-            value={{
-                rowData,
-                setRowData,
-                searchText,
-                setSearchText,
-                searchType,
-                setSearchType,
-                pageSize,
-                setPageSize,
-                currentPage,
-                setCurrentPage,
-            }}
-        >
-            {children}
-        </TableContext.Provider>
-    );
-}
-
-TableContextProvider.propTypes = {
-    children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
-};
-
-export default TableContext;
diff --git a/ui/src/context/TableContext.tsx b/ui/src/context/TableContext.tsx
new file mode 100644
index 000000000..f2d4a1376
--- /dev/null
+++ b/ui/src/context/TableContext.tsx
@@ -0,0 +1,58 @@
+import React, { createContext, useState } from 'react';
+import PropTypes from 'prop-types';
+import { AcceptableFormValueOrNull } from '../types/components/shareableTypes';
+
+// serviceName > specificRowName > dataForRow
+type RowDataType = Record<string, Record<string, Record<string, AcceptableFormValueOrNull>>>;
+
+export type TableContextProviderType = {
+    rowData: RowDataType;
+    setRowData: React.Dispatch<React.SetStateAction<RowDataType>>;
+    searchText: string;
+    setSearchText: React.Dispatch<React.SetStateAction<string>>;
+    searchType: string;
+    setSearchType: React.Dispatch<React.SetStateAction<string>>;
+    pageSize: number;
+    setPageSize: React.Dispatch<React.SetStateAction<number>>;
+    currentPage: number;
+    setCurrentPage: React.Dispatch<React.SetStateAction<number>>;
+};
+
+const TableContext = createContext<TableContextProviderType | null>(null);
+
+export function TableContextProvider({
+    children,
+}: {
+    children: (typeof PropTypes.node | typeof PropTypes.node)[];
+}) {
+    const [rowData, setRowData] = useState<TableContextProviderType['rowData']>({});
+    const [searchText, setSearchText] = useState<string>('');
+    const [searchType, setSearchType] = useState<string>('all');
+    const [pageSize, setPageSize] = useState<number>(10);
+    const [currentPage, setCurrentPage] = useState<number>(0);
+
+    return (
+        <TableContext.Provider
+            value={{
+                rowData,
+                setRowData,
+                searchText,
+                setSearchText,
+                searchType,
+                setSearchType,
+                pageSize,
+                setPageSize,
+                currentPage,
+                setCurrentPage,
+            }}
+        >
+            {children}
+        </TableContext.Provider>
+    );
+}
+
+TableContextProvider.propTypes = {
+    children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
+};
+
+export default TableContext;
diff --git a/ui/src/mocks/globalConfigMock.ts b/ui/src/mocks/globalConfigMock.ts
index bbad17b7a..1812be41c 100644
--- a/ui/src/mocks/globalConfigMock.ts
+++ b/ui/src/mocks/globalConfigMock.ts
@@ -160,6 +160,7 @@ const globalConfigMock: z.input<typeof GlobalConfigSchema> = {
                             type: 'singleSelect',
                             label: 'Account to use',
                             options: {
+                                createSearchChoice: true,
                                 referenceName: 'account',
                             },
                             help: 'Account to use for this input.',
diff --git a/ui/src/pages/Input/stories/InputPage.stories.tsx b/ui/src/pages/Input/stories/InputPage.stories.tsx
index c19b92503..87d47f364 100644
--- a/ui/src/pages/Input/stories/InputPage.stories.tsx
+++ b/ui/src/pages/Input/stories/InputPage.stories.tsx
@@ -1,6 +1,5 @@
 import type { Meta, StoryObj } from '@storybook/react';
 import React from 'react';
-import BaseFormView from 'src/components/BaseFormView';
 import { http, HttpResponse } from 'msw';
 import { userEvent, within } from '@storybook/testing-library';
 import { setUnifiedConfig } from '../../../util/util';
@@ -25,7 +24,7 @@ const meta = {
             ],
         },
     },
-} satisfies Meta<typeof BaseFormView>;
+} satisfies Meta;
 
 export default meta;
 type Story = StoryObj<typeof meta>;
diff --git a/ui/src/public/mockServiceWorker.js b/ui/src/public/mockServiceWorker.js
index e369128ec..a2745d127 100644
--- a/ui/src/public/mockServiceWorker.js
+++ b/ui/src/public/mockServiceWorker.js
@@ -2,13 +2,13 @@
 /* tslint:disable */
 
 /**
- * Mock Service Worker (2.0.11).
+ * Mock Service Worker (2.1.5).
  * @see https://github.com/mswjs/msw
  * - Please do NOT modify this file.
  * - Please do NOT serve this file on production.
  */
 
-const INTEGRITY_CHECKSUM = 'c5f7f8e188b673ea4e677df7ea3c5a39'
+const INTEGRITY_CHECKSUM = '223d191a56023cd36aa88c802961b911'
 const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
 const activeClientIds = new Set()
 
diff --git a/ui/src/types/components/shareableTypes.ts b/ui/src/types/components/shareableTypes.ts
new file mode 100644
index 000000000..9716d612e
--- /dev/null
+++ b/ui/src/types/components/shareableTypes.ts
@@ -0,0 +1,3 @@
+export type AcceptableFormValue = string | number | boolean | { fileContent?: string };
+export type AcceptableFormValueOrNull = AcceptableFormValue | null;
+export type AcceptableFormValueOrNullish = AcceptableFormValueOrNull | undefined;
diff --git a/ui/src/types/globalConfig/entities.ts b/ui/src/types/globalConfig/entities.ts
index cc7b2fc31..c8bf3c0b1 100644
--- a/ui/src/types/globalConfig/entities.ts
+++ b/ui/src/types/globalConfig/entities.ts
@@ -23,16 +23,16 @@ const CommonEntityFields = z.object({
 });
 
 const CommonEditableEntityFields = CommonEntityFields.extend({
-    required: z.boolean().optional().default(false),
-    encrypted: z.boolean().optional().default(false),
+    required: z.boolean().default(false).optional(),
+    encrypted: z.boolean().default(false).optional(),
 });
 
 const CommonEditableEntityOptions = z.object({
     placeholder: z.string().optional(),
-    display: z.boolean().optional().default(true),
-    disableonEdit: z.boolean().optional().default(false),
-    enable: z.boolean().optional().default(true),
-    requiredWhenVisible: z.boolean().optional().default(false),
+    display: z.boolean().default(true).optional(),
+    disableonEdit: z.boolean().default(false).optional(),
+    enable: z.boolean().default(true).optional(),
+    requiredWhenVisible: z.boolean().default(false).optional(),
 });
 
 const AllValidators = z
@@ -53,6 +53,7 @@ export const LinkEntity = CommonEntityFields.extend({
     type: z.literal('helpLink'),
     label: z.string().optional(),
     options: z.object({ text: z.string(), link: z.string() }),
+    required: z.literal(false).default(false).optional(),
 });
 
 export type LinkEntity = z.infer<typeof LinkEntity>;
@@ -60,7 +61,7 @@ export type LinkEntity = z.infer<typeof LinkEntity>;
 export const TextEntity = CommonEditableEntityFields.extend({
     type: z.literal('text'),
     validators: AllValidators.optional(),
-    defaultValue: z.union([z.string(), z.number()]).optional(),
+    defaultValue: z.union([z.string(), z.number(), z.boolean()]).optional(),
     options: CommonEditableEntityOptions.optional(),
 });
 
@@ -85,8 +86,8 @@ const AutoCompleteFields = z.array(
 );
 
 const SelectCommonOptions = CommonEditableEntityOptions.extend({
-    disableSearch: z.boolean().optional().default(false),
-    createSearchChoice: z.boolean().optional().default(false),
+    disableSearch: z.boolean().default(false).optional(),
+    createSearchChoice: z.boolean().default(false).optional(),
     referenceName: z.string().optional(),
     endpointUrl: z.string().optional(),
     allowList: z.string().optional(),
@@ -179,22 +180,26 @@ export const FileEntity = CommonEditableEntityFields.extend({
         .optional(),
 });
 
-const OAuthFields = z
-    .object({
-        oauth_field: z.string(),
-        label: z.string(),
-        field: z.string(),
-        help: z.string(),
-        encrypted: z.boolean().default(false),
-        required: z.boolean().default(false),
-        defaultValue: z.union([z.string(), z.number(), z.boolean()]).optional(),
-        options: z.object({
+export const OAuthFields = z.object({
+    oauth_field: z.string(),
+    label: z.string(),
+    field: z.string(),
+    type: z.literal('text').default('text').optional(),
+    help: z.string(),
+    encrypted: z.boolean().default(false).optional(),
+    required: z.boolean().default(false).optional(),
+    defaultValue: z.union([z.string(), z.number(), z.boolean()]).optional(),
+    options: z
+        .object({
             placeholder: z.string().optional(),
             disableonEdit: z.boolean().optional(),
-            enable: z.boolean().optional().default(true),
-        }),
-    })
-    .partial();
+            enable: z.boolean().default(true).optional(),
+            display: z.literal(true).default(true).optional(),
+            requiredWhenVisible: z.boolean().default(false).optional(),
+        })
+        .optional(),
+});
+
 export const OAuthEntity = CommonEditableEntityFields.extend({
     type: z.literal('oauth'),
     defaultValue: z.string().optional(),
diff --git a/ui/src/types/globalConfig/meta.ts b/ui/src/types/globalConfig/meta.ts
index 9139054c3..d0a1d19b6 100644
--- a/ui/src/types/globalConfig/meta.ts
+++ b/ui/src/types/globalConfig/meta.ts
@@ -7,7 +7,7 @@ export const meta = z.object({
     apiVersion: z.string().optional(),
     version: z.string(),
     schemaVersion: z.string().optional(),
-    checkForUpdates: z.boolean().default(true),
+    checkForUpdates: z.boolean().default(true).optional(),
 });
 
 export type meta = z.infer<typeof meta>;
diff --git a/ui/src/types/globalConfig/pages.ts b/ui/src/types/globalConfig/pages.ts
index 4e99a4baa..5f7cbec1d 100644
--- a/ui/src/types/globalConfig/pages.ts
+++ b/ui/src/types/globalConfig/pages.ts
@@ -30,12 +30,17 @@ const HooksSchema = z
     })
     .optional();
 
+const WarningMessageSchema = z.object({
+    message: z.string(),
+    alwaysDisplay: z.boolean().default(false).optional(),
+});
+
 const WarningSchema = z
     .object({
-        create: z.string().optional(),
-        edit: z.string().optional(),
-        config: z.string().optional(),
-        clone: z.string().optional(),
+        create: WarningMessageSchema.optional(),
+        edit: WarningMessageSchema.optional(),
+        config: WarningMessageSchema.optional(),
+        clone: WarningMessageSchema.optional(),
     })
     .optional();
 
diff --git a/ui/src/types/modules.d.ts b/ui/src/types/modules.d.ts
index 18c1ddb96..808e1381a 100644
--- a/ui/src/types/modules.d.ts
+++ b/ui/src/types/modules.d.ts
@@ -3,3 +3,4 @@ declare module '@splunk/splunk-utils/url';
 // declaring modules as utils does not seem to have types
 
 declare module '@splunk/ui-utils/i18n';
+declare module 'uuid';
diff --git a/ui/src/types/window.d.ts b/ui/src/types/window.d.ts
new file mode 100644
index 000000000..f1b7cf20b
--- /dev/null
+++ b/ui/src/types/window.d.ts
@@ -0,0 +1,4 @@
+interface Window {
+    open: () => void;
+    getMessage: (message: { code: string; error: unknown; state: unknown }) => void;
+}
diff --git a/ui/src/util/axiosCallWrapper.ts b/ui/src/util/axiosCallWrapper.ts
index 95fec9782..b181d3354 100755
--- a/ui/src/util/axiosCallWrapper.ts
+++ b/ui/src/util/axiosCallWrapper.ts
@@ -18,7 +18,7 @@ interface CommonAxiosCall {
     cancelToken?: CancelToken;
     customHeaders?: Record<string, string>;
     method?: 'get' | 'post' | 'delete';
-    body?: Record<string, unknown>;
+    body?: URLSearchParams;
     handleError?: boolean;
     callbackOnError?: (error: unknown) => void;
 }
diff --git a/ui/src/util/messageUtil.js b/ui/src/util/messageUtil.js
index ee18c55d4..969792855 100644
--- a/ui/src/util/messageUtil.js
+++ b/ui/src/util/messageUtil.js
@@ -4,7 +4,7 @@ import messageDict from '../constants/messageDict';
 
 /**
  * @param {number} code  a int value.
- * @param {(string|number)[]=} msg arguments to format the message.
+ * @param {(string|number|boolean)[]=} msg arguments to format the message.
  * @returns {string}
  */
 export const getFormattedMessage = (code, msg /* , ... , args */) => {
diff --git a/ui/yarn.lock b/ui/yarn.lock
index 54904f279..e6a1f76bd 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -8,9 +8,9 @@
   integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
 
 "@adobe/css-tools@^4.3.2":
-  version "4.3.2"
-  resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11"
-  integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==
+  version "4.3.3"
+  resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff"
+  integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==
 
 "@ampproject/remapping@^2.2.0":
   version "2.2.1"
@@ -34,7 +34,7 @@
   dependencies:
     "@babel/highlight" "^7.10.4"
 
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.23.5":
   version "7.23.5"
   resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
   integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
@@ -47,52 +47,31 @@
   resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
   integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
 
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4"
-  integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
+  integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==
   dependencies:
     "@ampproject/remapping" "^2.2.0"
     "@babel/code-frame" "^7.23.5"
     "@babel/generator" "^7.23.6"
     "@babel/helper-compilation-targets" "^7.23.6"
     "@babel/helper-module-transforms" "^7.23.3"
-    "@babel/helpers" "^7.23.6"
-    "@babel/parser" "^7.23.6"
-    "@babel/template" "^7.22.15"
-    "@babel/traverse" "^7.23.6"
-    "@babel/types" "^7.23.6"
+    "@babel/helpers" "^7.23.9"
+    "@babel/parser" "^7.23.9"
+    "@babel/template" "^7.23.9"
+    "@babel/traverse" "^7.23.9"
+    "@babel/types" "^7.23.9"
     convert-source-map "^2.0.0"
     debug "^4.1.0"
     gensync "^1.0.0-beta.2"
     json5 "^2.2.3"
     semver "^6.3.1"
 
-"@babel/core@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f"
-  integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==
-  dependencies:
-    "@ampproject/remapping" "^2.2.0"
-    "@babel/code-frame" "^7.23.5"
-    "@babel/generator" "^7.23.6"
-    "@babel/helper-compilation-targets" "^7.23.6"
-    "@babel/helper-module-transforms" "^7.23.3"
-    "@babel/helpers" "^7.23.7"
-    "@babel/parser" "^7.23.6"
-    "@babel/template" "^7.22.15"
-    "@babel/traverse" "^7.23.7"
-    "@babel/types" "^7.23.6"
-    convert-source-map "^2.0.0"
-    debug "^4.1.0"
-    gensync "^1.0.0-beta.2"
-    json5 "^2.2.3"
-    semver "^6.3.1"
-
-"@babel/eslint-parser@^7.23.3":
-  version "7.23.3"
-  resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca"
-  integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==
+"@babel/eslint-parser@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.9.tgz#052c13b39144e21fdd1e03fc9b67e98976a1ebfc"
+  integrity sha512-xPndlO7qxiJbn0ATvfXQBjCS7qApc9xmKHArgI/FTEFxXas5dnjC/VqM37lfZun9dclRYcn+YQAr6uDFy0bB2g==
   dependencies:
     "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
     eslint-visitor-keys "^2.1.0"
@@ -134,9 +113,9 @@
     semver "^6.3.1"
 
 "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953"
-  integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.9.tgz#fddfdf51fca28f23d16b9e3935a4732690acfad6"
+  integrity sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
     "@babel/helper-environment-visitor" "^7.22.20"
@@ -157,10 +136,10 @@
     regexpu-core "^5.3.1"
     semver "^6.3.1"
 
-"@babel/helper-define-polyfill-provider@^0.4.4":
-  version "0.4.4"
-  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088"
-  integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==
+"@babel/helper-define-polyfill-provider@^0.5.0":
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b"
+  integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==
   dependencies:
     "@babel/helper-compilation-targets" "^7.22.6"
     "@babel/helper-plugin-utils" "^7.22.5"
@@ -288,23 +267,14 @@
     "@babel/template" "^7.22.15"
     "@babel/types" "^7.22.19"
 
-"@babel/helpers@^7.23.6":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a"
-  integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==
+"@babel/helpers@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
+  integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
   dependencies:
-    "@babel/template" "^7.22.15"
-    "@babel/traverse" "^7.23.6"
-    "@babel/types" "^7.23.6"
-
-"@babel/helpers@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz#eb543c36f81da2873e47b76ee032343ac83bba60"
-  integrity sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==
-  dependencies:
-    "@babel/template" "^7.22.15"
-    "@babel/traverse" "^7.23.7"
-    "@babel/types" "^7.23.6"
+    "@babel/template" "^7.23.9"
+    "@babel/traverse" "^7.23.9"
+    "@babel/types" "^7.23.9"
 
 "@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4":
   version "7.23.4"
@@ -315,10 +285,10 @@
     chalk "^2.4.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.23.6", "@babel/parser@^7.7.0":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
-  integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.7.0":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
+  integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
 
 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
   version "7.23.3"
@@ -336,14 +306,6 @@
     "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
     "@babel/plugin-transform-optional-chaining" "^7.23.3"
 
-"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3":
-  version "7.23.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098"
-  integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.22.20"
-    "@babel/helper-plugin-utils" "^7.22.5"
-
 "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7":
   version "7.23.7"
   resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b"
@@ -538,20 +500,10 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.22.5"
 
-"@babel/plugin-transform-async-generator-functions@^7.23.4":
-  version "7.23.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a"
-  integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.22.20"
-    "@babel/helper-plugin-utils" "^7.22.5"
-    "@babel/helper-remap-async-to-generator" "^7.22.20"
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-
-"@babel/plugin-transform-async-generator-functions@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd"
-  integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==
+"@babel/plugin-transform-async-generator-functions@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce"
+  integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==
   dependencies:
     "@babel/helper-environment-visitor" "^7.22.20"
     "@babel/helper-plugin-utils" "^7.22.5"
@@ -598,16 +550,15 @@
     "@babel/helper-plugin-utils" "^7.22.5"
     "@babel/plugin-syntax-class-static-block" "^7.14.5"
 
-"@babel/plugin-transform-classes@^7.23.5":
-  version "7.23.5"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2"
-  integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==
+"@babel/plugin-transform-classes@^7.23.8":
+  version "7.23.8"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92"
+  integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
-    "@babel/helper-compilation-targets" "^7.22.15"
+    "@babel/helper-compilation-targets" "^7.23.6"
     "@babel/helper-environment-visitor" "^7.22.20"
     "@babel/helper-function-name" "^7.23.0"
-    "@babel/helper-optimise-call-expression" "^7.22.5"
     "@babel/helper-plugin-utils" "^7.22.5"
     "@babel/helper-replace-supers" "^7.22.20"
     "@babel/helper-split-export-declaration" "^7.22.6"
@@ -739,10 +690,10 @@
     "@babel/helper-plugin-utils" "^7.22.5"
     "@babel/helper-simple-access" "^7.22.5"
 
-"@babel/plugin-transform-modules-systemjs@^7.23.3":
-  version "7.23.3"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81"
-  integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==
+"@babel/plugin-transform-modules-systemjs@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be"
+  integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==
   dependencies:
     "@babel/helper-hoist-variables" "^7.22.5"
     "@babel/helper-module-transforms" "^7.23.3"
@@ -904,16 +855,16 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.22.5"
 
-"@babel/plugin-transform-runtime@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz#52bbd20054855beb9deae3bee9ceb05289c343e6"
-  integrity sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==
+"@babel/plugin-transform-runtime@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz#2c64d0680fc8e09e1dfe8fd5c646fe72abd82004"
+  integrity sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==
   dependencies:
     "@babel/helper-module-imports" "^7.22.15"
     "@babel/helper-plugin-utils" "^7.22.5"
-    babel-plugin-polyfill-corejs2 "^0.4.7"
-    babel-plugin-polyfill-corejs3 "^0.8.7"
-    babel-plugin-polyfill-regenerator "^0.5.4"
+    babel-plugin-polyfill-corejs2 "^0.4.8"
+    babel-plugin-polyfill-corejs3 "^0.9.0"
+    babel-plugin-polyfill-regenerator "^0.5.5"
     semver "^6.3.1"
 
 "@babel/plugin-transform-shorthand-properties@^7.23.3":
@@ -993,96 +944,10 @@
     "@babel/helper-create-regexp-features-plugin" "^7.22.15"
     "@babel/helper-plugin-utils" "^7.22.5"
 
-"@babel/preset-env@^7.2.0", "@babel/preset-env@^7.23.2":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a"
-  integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==
-  dependencies:
-    "@babel/compat-data" "^7.23.5"
-    "@babel/helper-compilation-targets" "^7.23.6"
-    "@babel/helper-plugin-utils" "^7.22.5"
-    "@babel/helper-validator-option" "^7.23.5"
-    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3"
-    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3"
-    "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3"
-    "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-    "@babel/plugin-syntax-class-properties" "^7.12.13"
-    "@babel/plugin-syntax-class-static-block" "^7.14.5"
-    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
-    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-    "@babel/plugin-syntax-import-assertions" "^7.23.3"
-    "@babel/plugin-syntax-import-attributes" "^7.23.3"
-    "@babel/plugin-syntax-import-meta" "^7.10.4"
-    "@babel/plugin-syntax-json-strings" "^7.8.3"
-    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
-    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-    "@babel/plugin-syntax-top-level-await" "^7.14.5"
-    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
-    "@babel/plugin-transform-arrow-functions" "^7.23.3"
-    "@babel/plugin-transform-async-generator-functions" "^7.23.4"
-    "@babel/plugin-transform-async-to-generator" "^7.23.3"
-    "@babel/plugin-transform-block-scoped-functions" "^7.23.3"
-    "@babel/plugin-transform-block-scoping" "^7.23.4"
-    "@babel/plugin-transform-class-properties" "^7.23.3"
-    "@babel/plugin-transform-class-static-block" "^7.23.4"
-    "@babel/plugin-transform-classes" "^7.23.5"
-    "@babel/plugin-transform-computed-properties" "^7.23.3"
-    "@babel/plugin-transform-destructuring" "^7.23.3"
-    "@babel/plugin-transform-dotall-regex" "^7.23.3"
-    "@babel/plugin-transform-duplicate-keys" "^7.23.3"
-    "@babel/plugin-transform-dynamic-import" "^7.23.4"
-    "@babel/plugin-transform-exponentiation-operator" "^7.23.3"
-    "@babel/plugin-transform-export-namespace-from" "^7.23.4"
-    "@babel/plugin-transform-for-of" "^7.23.6"
-    "@babel/plugin-transform-function-name" "^7.23.3"
-    "@babel/plugin-transform-json-strings" "^7.23.4"
-    "@babel/plugin-transform-literals" "^7.23.3"
-    "@babel/plugin-transform-logical-assignment-operators" "^7.23.4"
-    "@babel/plugin-transform-member-expression-literals" "^7.23.3"
-    "@babel/plugin-transform-modules-amd" "^7.23.3"
-    "@babel/plugin-transform-modules-commonjs" "^7.23.3"
-    "@babel/plugin-transform-modules-systemjs" "^7.23.3"
-    "@babel/plugin-transform-modules-umd" "^7.23.3"
-    "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
-    "@babel/plugin-transform-new-target" "^7.23.3"
-    "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4"
-    "@babel/plugin-transform-numeric-separator" "^7.23.4"
-    "@babel/plugin-transform-object-rest-spread" "^7.23.4"
-    "@babel/plugin-transform-object-super" "^7.23.3"
-    "@babel/plugin-transform-optional-catch-binding" "^7.23.4"
-    "@babel/plugin-transform-optional-chaining" "^7.23.4"
-    "@babel/plugin-transform-parameters" "^7.23.3"
-    "@babel/plugin-transform-private-methods" "^7.23.3"
-    "@babel/plugin-transform-private-property-in-object" "^7.23.4"
-    "@babel/plugin-transform-property-literals" "^7.23.3"
-    "@babel/plugin-transform-regenerator" "^7.23.3"
-    "@babel/plugin-transform-reserved-words" "^7.23.3"
-    "@babel/plugin-transform-shorthand-properties" "^7.23.3"
-    "@babel/plugin-transform-spread" "^7.23.3"
-    "@babel/plugin-transform-sticky-regex" "^7.23.3"
-    "@babel/plugin-transform-template-literals" "^7.23.3"
-    "@babel/plugin-transform-typeof-symbol" "^7.23.3"
-    "@babel/plugin-transform-unicode-escapes" "^7.23.3"
-    "@babel/plugin-transform-unicode-property-regex" "^7.23.3"
-    "@babel/plugin-transform-unicode-regex" "^7.23.3"
-    "@babel/plugin-transform-unicode-sets-regex" "^7.23.3"
-    "@babel/preset-modules" "0.1.6-no-external-plugins"
-    babel-plugin-polyfill-corejs2 "^0.4.6"
-    babel-plugin-polyfill-corejs3 "^0.8.5"
-    babel-plugin-polyfill-regenerator "^0.5.3"
-    core-js-compat "^3.31.0"
-    semver "^6.3.1"
-
-"@babel/preset-env@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.7.tgz#e5d69b9f14db8a13bae4d8e5ce7f360973626241"
-  integrity sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==
+"@babel/preset-env@^7.2.0", "@babel/preset-env@^7.23.2", "@babel/preset-env@^7.23.9":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669"
+  integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==
   dependencies:
     "@babel/compat-data" "^7.23.5"
     "@babel/helper-compilation-targets" "^7.23.6"
@@ -1111,13 +976,13 @@
     "@babel/plugin-syntax-top-level-await" "^7.14.5"
     "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
     "@babel/plugin-transform-arrow-functions" "^7.23.3"
-    "@babel/plugin-transform-async-generator-functions" "^7.23.7"
+    "@babel/plugin-transform-async-generator-functions" "^7.23.9"
     "@babel/plugin-transform-async-to-generator" "^7.23.3"
     "@babel/plugin-transform-block-scoped-functions" "^7.23.3"
     "@babel/plugin-transform-block-scoping" "^7.23.4"
     "@babel/plugin-transform-class-properties" "^7.23.3"
     "@babel/plugin-transform-class-static-block" "^7.23.4"
-    "@babel/plugin-transform-classes" "^7.23.5"
+    "@babel/plugin-transform-classes" "^7.23.8"
     "@babel/plugin-transform-computed-properties" "^7.23.3"
     "@babel/plugin-transform-destructuring" "^7.23.3"
     "@babel/plugin-transform-dotall-regex" "^7.23.3"
@@ -1133,7 +998,7 @@
     "@babel/plugin-transform-member-expression-literals" "^7.23.3"
     "@babel/plugin-transform-modules-amd" "^7.23.3"
     "@babel/plugin-transform-modules-commonjs" "^7.23.3"
-    "@babel/plugin-transform-modules-systemjs" "^7.23.3"
+    "@babel/plugin-transform-modules-systemjs" "^7.23.9"
     "@babel/plugin-transform-modules-umd" "^7.23.3"
     "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
     "@babel/plugin-transform-new-target" "^7.23.3"
@@ -1159,9 +1024,9 @@
     "@babel/plugin-transform-unicode-regex" "^7.23.3"
     "@babel/plugin-transform-unicode-sets-regex" "^7.23.3"
     "@babel/preset-modules" "0.1.6-no-external-plugins"
-    babel-plugin-polyfill-corejs2 "^0.4.7"
-    babel-plugin-polyfill-corejs3 "^0.8.7"
-    babel-plugin-polyfill-regenerator "^0.5.4"
+    babel-plugin-polyfill-corejs2 "^0.4.8"
+    babel-plugin-polyfill-corejs3 "^0.9.0"
+    babel-plugin-polyfill-regenerator "^0.5.5"
     core-js-compat "^3.31.0"
     semver "^6.3.1"
 
@@ -1207,14 +1072,14 @@
     "@babel/plugin-transform-typescript" "^7.23.3"
 
 "@babel/register@^7.22.15":
-  version "7.22.15"
-  resolved "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7"
-  integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==
+  version "7.23.7"
+  resolved "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038"
+  integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==
   dependencies:
     clone-deep "^4.0.1"
     find-cache-dir "^2.0.0"
     make-dir "^2.1.0"
-    pirates "^4.0.5"
+    pirates "^4.0.6"
     source-map-support "^0.5.16"
 
 "@babel/regjsgen@^0.8.0":
@@ -1223,41 +1088,25 @@
   integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
 
 "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d"
-  integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7"
+  integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==
   dependencies:
     regenerator-runtime "^0.14.0"
 
-"@babel/template@^7.22.15", "@babel/template@^7.3.3":
-  version "7.22.15"
-  resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
-  integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
-  dependencies:
-    "@babel/code-frame" "^7.22.13"
-    "@babel/parser" "^7.22.15"
-    "@babel/types" "^7.22.15"
-
-"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.6", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5"
-  integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==
+"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
+  integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
   dependencies:
     "@babel/code-frame" "^7.23.5"
-    "@babel/generator" "^7.23.6"
-    "@babel/helper-environment-visitor" "^7.22.20"
-    "@babel/helper-function-name" "^7.23.0"
-    "@babel/helper-hoist-variables" "^7.22.5"
-    "@babel/helper-split-export-declaration" "^7.22.6"
-    "@babel/parser" "^7.23.6"
-    "@babel/types" "^7.23.6"
-    debug "^4.3.1"
-    globals "^11.1.0"
+    "@babel/parser" "^7.23.9"
+    "@babel/types" "^7.23.9"
 
-"@babel/traverse@^7.23.7":
-  version "7.23.7"
-  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305"
-  integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.9", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
+  integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
   dependencies:
     "@babel/code-frame" "^7.23.5"
     "@babel/generator" "^7.23.6"
@@ -1265,15 +1114,15 @@
     "@babel/helper-function-name" "^7.23.0"
     "@babel/helper-hoist-variables" "^7.22.5"
     "@babel/helper-split-export-declaration" "^7.22.6"
-    "@babel/parser" "^7.23.6"
-    "@babel/types" "^7.23.6"
+    "@babel/parser" "^7.23.9"
+    "@babel/types" "^7.23.9"
     debug "^4.3.1"
     globals "^11.1.0"
 
-"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
-  version "7.23.6"
-  resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
-  integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
+"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+  version "7.23.9"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
+  integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
   dependencies:
     "@babel/helper-string-parser" "^7.23.4"
     "@babel/helper-validator-identifier" "^7.22.20"
@@ -1296,13 +1145,6 @@
   dependencies:
     cookie "^0.5.0"
 
-"@bundled-es-modules/js-levenshtein@^2.0.1":
-  version "2.0.1"
-  resolved "https://registry.npmjs.org/@bundled-es-modules/js-levenshtein/-/js-levenshtein-2.0.1.tgz#b02bbbd546358ab77080a430f0911cfc2b3779c4"
-  integrity sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==
-  dependencies:
-    js-levenshtein "^1.1.6"
-
 "@bundled-es-modules/statuses@^1.0.1":
   version "1.0.1"
   resolved "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872"
@@ -1544,32 +1386,32 @@
   resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff"
   integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==
 
-"@floating-ui/core@^1.4.2":
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz#53a0f7a98c550e63134d504f26804f6b83dbc071"
-  integrity sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==
+"@floating-ui/core@^1.6.0":
+  version "1.6.0"
+  resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1"
+  integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==
   dependencies:
-    "@floating-ui/utils" "^0.1.3"
+    "@floating-ui/utils" "^0.2.1"
 
-"@floating-ui/dom@^1.5.1":
-  version "1.5.3"
-  resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa"
-  integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==
+"@floating-ui/dom@^1.6.0":
+  version "1.6.0"
+  resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.0.tgz#282f31c5c7d2aaef3999e09f2c06280a020364d1"
+  integrity sha512-SZ0BEXzsaaS6THZfZJUcAobbZTD+MvfGM42bxgeg0Tnkp4/an/avqwAXiVLsFtIBZtfsx3Ymvwx0+KnnhdA/9g==
   dependencies:
-    "@floating-ui/core" "^1.4.2"
-    "@floating-ui/utils" "^0.1.3"
+    "@floating-ui/core" "^1.6.0"
+    "@floating-ui/utils" "^0.2.1"
 
 "@floating-ui/react-dom@^2.0.0":
-  version "2.0.4"
-  resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz#b076fafbdfeb881e1d86ae748b7ff95150e9f3ec"
-  integrity sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==
+  version "2.0.7"
+  resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.7.tgz#873e0a55a25d8ddbbccd159d6ab4a4b98eb05494"
+  integrity sha512-B5GJxKUyPcGsvE1vua+Abvw0t6zVMyTbtG+Jk7BoI4hfc5Ahv50dstRIAn0nS0274kR9gnKwxIXyGA8EzBZJrA==
   dependencies:
-    "@floating-ui/dom" "^1.5.1"
+    "@floating-ui/dom" "^1.6.0"
 
-"@floating-ui/utils@^0.1.3":
-  version "0.1.6"
-  resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9"
-  integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
+"@floating-ui/utils@^0.2.1":
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
+  integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
 
 "@humanwhocodes/config-array@^0.5.0":
   version "0.5.0"
@@ -1856,10 +1698,10 @@
     "@jridgewell/resolve-uri" "^3.0.3"
     "@jridgewell/sourcemap-codec" "^1.4.10"
 
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
-  version "0.3.20"
-  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
-  integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.22"
+  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c"
+  integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==
   dependencies:
     "@jridgewell/resolve-uri" "^3.1.0"
     "@jridgewell/sourcemap-codec" "^1.4.14"
@@ -1882,10 +1724,10 @@
   resolved "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b"
   integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==
 
-"@mswjs/interceptors@^0.25.13":
-  version "0.25.13"
-  resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.13.tgz#c7f8b845b5fdbd8f0f71fbbde06d8a40a9e81b35"
-  integrity sha512-xfjR81WwXPHwhDbqJRHlxYmboJuiSaIKpP4I5TJVFl/EmByOU13jOBT9hmEnxcjR3jvFYoqoNKt7MM9uqerj9A==
+"@mswjs/interceptors@^0.25.15":
+  version "0.25.15"
+  resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.15.tgz#183c5761d3c20e07ac49a206df39a5b6df9e8242"
+  integrity sha512-s4jdyxmq1eeftfDXJ7MUiK/jlvYaU8Sr75+42hHCVBrYez0k51RHbMitKIKdmsF92Q6gwhp8Sm1MmvdA9llpcg==
   dependencies:
     "@open-draft/deferred-promise" "^2.2.0"
     "@open-draft/logger" "^0.3.0"
@@ -2365,10 +2207,10 @@
     "@react-spring/shared" "~9.2.6-beta.0"
     "@react-spring/types" "~9.2.6-beta.0"
 
-"@remix-run/router@1.14.1":
-  version "1.14.1"
-  resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz#6d2dd03d52e604279c38911afc1079d58c50a755"
-  integrity sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==
+"@remix-run/router@1.14.2":
+  version "1.14.2"
+  resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz#4d58f59908d9197ba3179310077f25c88e49ed17"
+  integrity sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==
 
 "@sinclair/typebox@^0.27.8":
   version "0.27.8"
@@ -2376,9 +2218,9 @@
   integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
 
 "@sinonjs/commons@^3.0.0":
-  version "3.0.0"
-  resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72"
-  integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd"
+  integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
   dependencies:
     type-detect "4.0.8"
 
@@ -2443,10 +2285,10 @@
     prop-types "^15.6.2"
     react-flip-move "^3.0.1"
 
-"@splunk/react-ui@^4.22.0", "@splunk/react-ui@^4.23.0":
-  version "4.23.0"
-  resolved "https://registry.npmjs.org/@splunk/react-ui/-/react-ui-4.23.0.tgz#16b32add8ce35cc68a04654df10e345e2490e93f"
-  integrity sha512-rlhRvhjVnRgJrvGRcDd+WXdkW6ihc5m6H/Gu2khKuFS3ycXQSDR/hZgYhih7Gz2bHSjd8B3FQslfQItcPVcUgA==
+"@splunk/react-ui@^4.22.0", "@splunk/react-ui@^4.23.0", "@splunk/react-ui@^4.24.0":
+  version "4.24.0"
+  resolved "https://registry.npmjs.org/@splunk/react-ui/-/react-ui-4.24.0.tgz#1250eda179f30c51d22c289d41a07ff0e2fd7c3e"
+  integrity sha512-qrPKWe8H4w6hl3dIPPeIDgvWqwAk9DjhkVbKw3ffInrLk32bbA816y5WfQZdi0rBhZLOKNl1j4Om875qO33mpQ==
   dependencies:
     "@dnd-kit/core" "6.0.8"
     "@dnd-kit/sortable" "7.0.2"
@@ -2482,6 +2324,15 @@
     scriptjs "^2.5.8"
     semver "^7.3.8"
 
+"@splunk/splunk-utils@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/@splunk/splunk-utils/-/splunk-utils-3.0.0.tgz#8e0a13b689c6161f19fc4a5e0cb2392b6485c7d2"
+  integrity sha512-v2MpSrBqvqjgnKM4+VZmijpeb7Xt3D7KE6mahXwj7QfL0SisDYFIGzA4bNQF5KzBmyoRkyNVnL76FjEblLGDUA==
+  dependencies:
+    "@splunk/ui-utils" "^1.6.0"
+    lodash "^4.17.14"
+    scriptjs "^2.5.8"
+
 "@splunk/themes@^0.16.3", "@splunk/themes@^0.16.4":
   version "0.16.4"
   resolved "https://registry.npmjs.org/@splunk/themes/-/themes-0.16.4.tgz#883ad2ebb2527e8a62d5ed97036906553b44144b"
@@ -2512,152 +2363,152 @@
     webpack-livereload-plugin "^3.0.2"
     webpack-merge "^5.9.0"
 
-"@storybook/addon-actions@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.7.tgz#2985d5417c65a9a0bce75a487b09bf1d1140b943"
-  integrity sha512-+6EZvhIeKEqG/RNsU3R5DxOrd60BL5GEvmzE2w60s2eKaNNxtyilDjiO1g4z2s2zDNyr7JL/Ft03pJ0Jgo0lew==
+"@storybook/addon-actions@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.10.tgz#5b43534e158797114db032f4ad8505a81809ed00"
+  integrity sha512-pcKmf0H/caGzKDy8cz1adNSjv+KOBWLJ11RzGExrWm+Ad5ACifwlsQPykJ3TQ/21sTd9IXVrE9uuq4LldEnPbg==
   dependencies:
-    "@storybook/core-events" "7.6.7"
+    "@storybook/core-events" "7.6.10"
     "@storybook/global" "^5.0.0"
     "@types/uuid" "^9.0.1"
     dequal "^2.0.2"
     polished "^4.2.2"
     uuid "^9.0.0"
 
-"@storybook/addon-backgrounds@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.7.tgz#1795abcb45def9ac05fec1d293bf69061201315a"
-  integrity sha512-55sBy1YUqponAVe+qL16qtWxdf63vHEnIoqFyHEwGpk7K9IhFA1BmdSpFr5VnWEwXeJXKj30db78frh2LUdk3Q==
+"@storybook/addon-backgrounds@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.10.tgz#4ecfc017befd400e5eabad347ab1819c2ea67a8c"
+  integrity sha512-kGzsN1QkfyI8Cz7TErEx9OCB3PMzpCFGLd/iy7FreXwbMbeAQ3/9fYgKUsNOYgOhuTz7S09koZUWjS/WJuZGFA==
   dependencies:
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-controls@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.7.tgz#b9ba4ab78efecf01fde2eecb18ec26e2a2412f6a"
-  integrity sha512-DJ3gfvcdCgqi7AQxu83vx0AEUKiuJrNcSATfWV3Jqi8dH6fYO2yqpemHEeWOEy+DAHxIOaqLKwb1QjIBj+vSRQ==
+"@storybook/addon-controls@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.10.tgz#6cd309440bf2b86c21f11a8b5f20bc1340d6c045"
+  integrity sha512-LjwCQRMWq1apLtFwDi6U8MI6ITUr+KhxJucZ60tfc58RgB2v8ayozyDAonFEONsx9YSR1dNIJ2Z/e2rWTBJeYA==
   dependencies:
-    "@storybook/blocks" "7.6.7"
+    "@storybook/blocks" "7.6.10"
     lodash "^4.17.21"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-docs@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.7.tgz#47f111c4bcf0ea8f238d70219b2c65562f6810ee"
-  integrity sha512-2dfajNhweofJ3LxjGO83UE5sBMvKtJB0Agj7q8mMtK/9PUCUcbvsFSyZnO/s6X1zAjSn5ZrirbSoTXU4IqxwSA==
+"@storybook/addon-docs@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.10.tgz#aab69f253a9cfbb57fd84062f00fac08f9c796cd"
+  integrity sha512-GtyQ9bMx1AOOtl6ZS9vwK104HFRK+tqzxddRRxhXkpyeKu3olm9aMgXp35atE/3fJSqyyDm2vFtxxH8mzBA20A==
   dependencies:
     "@jest/transform" "^29.3.1"
     "@mdx-js/react" "^2.1.5"
-    "@storybook/blocks" "7.6.7"
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/components" "7.6.7"
-    "@storybook/csf-plugin" "7.6.7"
-    "@storybook/csf-tools" "7.6.7"
+    "@storybook/blocks" "7.6.10"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/components" "7.6.10"
+    "@storybook/csf-plugin" "7.6.10"
+    "@storybook/csf-tools" "7.6.10"
     "@storybook/global" "^5.0.0"
     "@storybook/mdx2-csf" "^1.0.0"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/postinstall" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
-    "@storybook/react-dom-shim" "7.6.7"
-    "@storybook/theming" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/postinstall" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
+    "@storybook/react-dom-shim" "7.6.10"
+    "@storybook/theming" "7.6.10"
+    "@storybook/types" "7.6.10"
     fs-extra "^11.1.0"
     remark-external-links "^8.0.0"
     remark-slug "^6.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-essentials@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.7.tgz#6de31f175b0771739ec56dcf445dee0535f1847c"
-  integrity sha512-nNLMrpIvc04z4XCA+kval/44eKAFJlUJeeL2pxwP7F/PSzjWe5BXv1bQHOiw8inRO5II0PzqwWnVCI9jsj7K5A==
-  dependencies:
-    "@storybook/addon-actions" "7.6.7"
-    "@storybook/addon-backgrounds" "7.6.7"
-    "@storybook/addon-controls" "7.6.7"
-    "@storybook/addon-docs" "7.6.7"
-    "@storybook/addon-highlight" "7.6.7"
-    "@storybook/addon-measure" "7.6.7"
-    "@storybook/addon-outline" "7.6.7"
-    "@storybook/addon-toolbars" "7.6.7"
-    "@storybook/addon-viewport" "7.6.7"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/manager-api" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
+"@storybook/addon-essentials@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.10.tgz#9078abe56b15d976e3d4c15247c748b2e8e53c30"
+  integrity sha512-cjbuCCK/3dtUity0Uqi5LwbkgfxqCCE5x5mXZIk9lTMeDz5vB9q6M5nzncVDy8F8przF3NbDLLgxKlt8wjiICg==
+  dependencies:
+    "@storybook/addon-actions" "7.6.10"
+    "@storybook/addon-backgrounds" "7.6.10"
+    "@storybook/addon-controls" "7.6.10"
+    "@storybook/addon-docs" "7.6.10"
+    "@storybook/addon-highlight" "7.6.10"
+    "@storybook/addon-measure" "7.6.10"
+    "@storybook/addon-outline" "7.6.10"
+    "@storybook/addon-toolbars" "7.6.10"
+    "@storybook/addon-viewport" "7.6.10"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/manager-api" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-highlight@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.7.tgz#53fb3ba648fcbcfafa2162299fa240b492631d0b"
-  integrity sha512-2F/tJdn45d4zrvf/cmE1vsczl99wK8+I+kkj0G7jLsrJR0w1zTgbgjy6T9j86HBTBvWcnysNFNIRWPAOh5Wdbw==
+"@storybook/addon-highlight@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.10.tgz#19cad3d67655e9b9eef3d2f6760789fc29ba0790"
+  integrity sha512-dIuS5QmoT1R+gFOcf6CoBa6D9UR5/wHCfPqPRH8dNNcCLtIGSHWQ4v964mS5OCq1Huj7CghmR15lOUk7SaYwUA==
   dependencies:
     "@storybook/global" "^5.0.0"
 
-"@storybook/addon-interactions@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.7.tgz#742ea9816bb6eb41abd5f22d6ebac81dc997b7ee"
-  integrity sha512-iXE2m9i/1D2baYkRgoYe9zwcAjtBOxBfW4o2AS0pzBNPN7elpP9C6mIa0ScpSltawBfIjfe6iQRXAMXOsIIh3Q==
+"@storybook/addon-interactions@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.10.tgz#e1522ed169021f808401dfc46271b8c896abd258"
+  integrity sha512-lEsAdP/PrOZK/KmRbZ/fU4RjEqDP+e/PBlVVVJT2QvHniWK/xxkjCD0axsHU/XuaeQRFhmg0/KR342PC/cIf9A==
   dependencies:
     "@storybook/global" "^5.0.0"
-    "@storybook/types" "7.6.7"
+    "@storybook/types" "7.6.10"
     jest-mock "^27.0.6"
     polished "^4.2.2"
     ts-dedent "^2.2.0"
 
-"@storybook/addon-links@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.7.tgz#9f9c9a259bcb383d6d139c49472a9cd932a157ff"
-  integrity sha512-O5LekPslkAIDtXC/TCIyg/3c0htBxDYwb/s+NrZUPTNWJsngxvTAwp6aIk6aVSeSCFUMWvBFcVsuV3hv+ndK6w==
+"@storybook/addon-links@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.10.tgz#e437d35b360ac9a33ee6078d901417a73f916629"
+  integrity sha512-s/WkSYHpr2pb9p57j6u/xDBg3TKJhBq55YMl0GB5gXgkRPIeuGbPhGJhm2yTGVFLvXgr/aHHnOxb/R/W8PiRhA==
   dependencies:
     "@storybook/csf" "^0.1.2"
     "@storybook/global" "^5.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-measure@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.7.tgz#32f8c53a0cead48040017493d2d8e088038fc65d"
-  integrity sha512-t1RnnNO4Xzgnsxu63FlZwsCTF0+9jKxr44NiJAUOxW9ppbCvs/JfSDOOvcDRtPWyjgnyzexNUUctMfxvLrU01A==
+"@storybook/addon-measure@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.10.tgz#5e41d64aa6e02b9c6df1696d918058979598250e"
+  integrity sha512-OVfTI56+kc4hLWfZ/YPV3WKj/aA9e4iKXYxZyPdhfX4Z8TgZdD1wv9Z6e8DKS0H5kuybYrHKHaID5ki6t7qz3w==
   dependencies:
     "@storybook/global" "^5.0.0"
     tiny-invariant "^1.3.1"
 
-"@storybook/addon-outline@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.7.tgz#5f33444af0c07482ee75a381742fef002fb0b52e"
-  integrity sha512-gu2y46ijjMkXlxy1f8Cctgjw5b5y8vSIqNAYlrs5/Qy+hJAWyU6lj2PFGOCCUG4L+F45fAjwWAin6qz43+WnRQ==
+"@storybook/addon-outline@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.10.tgz#02b51084cc1d555c270995cebfe512924df0ce7e"
+  integrity sha512-RVJrEoPArhI6zAIMNl1Gz0zrj84BTfEWYYz0yDWOTVgvN411ugsoIk1hw0671MOneXJ2RcQ9MFIeV/v6AVDQYg==
   dependencies:
     "@storybook/global" "^5.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-toolbars@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.7.tgz#666641dd01f5e0291b857c19c738dceac279f2da"
-  integrity sha512-vT+YMzw8yVwndhJglI0XtELfXWq1M0HEy5ST3XPzbjmsJ54LgTf1b29UMkh0E/05qBQNFCcbT9B/tLxqWezxlg==
+"@storybook/addon-toolbars@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.10.tgz#4d841e87acca5455a8339a29c1062612ccb07df6"
+  integrity sha512-PaXY/oj9yxF7/H0CNdQKcioincyCkfeHpISZriZbZqhyqsjn3vca7RFEmsB88Q+ou6rMeqyA9st+6e2cx/Ct6A==
 
-"@storybook/addon-viewport@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.7.tgz#ea1cdb71abf2ed3be6e6b89d78ea1f5cd506723c"
-  integrity sha512-Q/BKjJaKzl4RWxH45K2iIXwkicj4ReVAUIpIyd7dPBb/Bx+hEDYZxR5dDg82AMkZdA71x5ttMnuDSuVpmWAE6g==
+"@storybook/addon-viewport@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.10.tgz#834bad76a56e4117ffb2dc935d349dca3b49bcc3"
+  integrity sha512-+bA6juC/lH4vEhk+w0rXakaG8JgLG4MOYrIudk5vJKQaC6X58LIM9N4kzIS2KSExRhkExXBPrWsnMfCo7uxmKg==
   dependencies:
     memoizerific "^1.11.3"
 
-"@storybook/blocks@7.6.7", "@storybook/blocks@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.7.tgz#7fad3d24d9d66ddd04483156b720adcdf9d41812"
-  integrity sha512-+QEvGQ0he/YvFS3lsZORJWxhQIyqcCDWsxbJxJiByePd+Z4my3q8xwtPhHW0TKRL0xUgNE/GnTfMMqJfevTuSw==
+"@storybook/blocks@7.6.10", "@storybook/blocks@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.10.tgz#353a5efa6a922a9a3766254f9f24cc2adad34f83"
+  integrity sha512-oSIukGC3yuF8pojABC/HLu5tv2axZvf60TaUs8eDg7+NiiKhzYSPoMQxs5uMrKngl+EJDB92ESgWT9vvsfvIPg==
   dependencies:
-    "@storybook/channels" "7.6.7"
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/components" "7.6.7"
-    "@storybook/core-events" "7.6.7"
+    "@storybook/channels" "7.6.10"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/components" "7.6.10"
+    "@storybook/core-events" "7.6.10"
     "@storybook/csf" "^0.1.2"
-    "@storybook/docs-tools" "7.6.7"
+    "@storybook/docs-tools" "7.6.10"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager-api" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
-    "@storybook/theming" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/manager-api" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
+    "@storybook/theming" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/lodash" "^4.14.167"
     color-convert "^2.0.1"
     dequal "^2.0.2"
@@ -2671,15 +2522,15 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/builder-manager@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.7.tgz#03ac44dfd4127d147d69af495c1e9aba2d9eda9c"
-  integrity sha512-6HYpj6+g/qbDMvImVz/G/aANbkhppyBa1ozfHxLK7tRD79YvozCWmj2Z9umRekPv9VIeMxnI5EEzJXOsoMX5DQ==
+"@storybook/builder-manager@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.10.tgz#fc30b19dd74e6f6ae896d8f4045552c3206c25f9"
+  integrity sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw==
   dependencies:
     "@fal-works/esbuild-plugin-global-externals" "^2.1.2"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/manager" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/manager" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
     "@types/ejs" "^3.1.1"
     "@types/find-cache-dir" "^3.2.1"
     "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10"
@@ -2693,26 +2544,27 @@
     process "^0.11.10"
     util "^0.12.4"
 
-"@storybook/builder-webpack5@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.7.tgz#65c830e1bf24879ddddf5ff4163278d9fa842b28"
-  integrity sha512-b5AaWXOHwIXl5Q1iRRl6eRhljId0Zsg0ANawDoubK1y1jsBoQtWal7c4TQPMeLAd2G30fc3sW5zCdb9rCo2Vrg==
+"@storybook/builder-webpack5@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.10.tgz#9cd8ae541e836c089e17e5f8d527b9cad6d4d99f"
+  integrity sha512-ja47rdy75tAs37T+JLSqgUGJiba+74zM/8IpEZAzgJmGxLetnHuCWEDskZWh3NXemxYS2uCvsg5rNc+dL9z4RA==
   dependencies:
     "@babel/core" "^7.23.2"
-    "@storybook/channels" "7.6.7"
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/core-events" "7.6.7"
-    "@storybook/core-webpack" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/preview" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
+    "@storybook/channels" "7.6.10"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/core-events" "7.6.10"
+    "@storybook/core-webpack" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/preview" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
     "@swc/core" "^1.3.82"
     "@types/node" "^18.0.0"
     "@types/semver" "^7.3.4"
     babel-loader "^9.0.0"
     browser-assert "^1.2.1"
     case-sensitive-paths-webpack-plugin "^2.4.0"
+    cjs-module-lexer "^1.2.3"
     constants-browserify "^1.0.0"
     css-loader "^6.7.1"
     es-module-lexer "^1.4.1"
@@ -2736,35 +2588,35 @@
     webpack-hot-middleware "^2.25.1"
     webpack-virtual-modules "^0.5.0"
 
-"@storybook/channels@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.7.tgz#23a0c59ebfdfbb83e4a49d8d3fafdd25a9a67140"
-  integrity sha512-u1hURhfQHHtZyRIDUENRCp+CRRm7IQfcjQaoWI06XCevQPuhVEtFUfXHjG+J74aA/JuuTLFUtqwNm1zGqbXTAQ==
+"@storybook/channels@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.10.tgz#04fd2c2f0b530bb8d236f5763e8df8cb5fa7c921"
+  integrity sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg==
   dependencies:
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-events" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-events" "7.6.10"
     "@storybook/global" "^5.0.0"
     qs "^6.10.0"
     telejson "^7.2.0"
     tiny-invariant "^1.3.1"
 
-"@storybook/cli@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.7.tgz#51f12a6cb2cdd10b78f255caca61ef12ffccebc6"
-  integrity sha512-DwDWzkifBH17ry+n+d+u52Sv69dZQ+04ETJdDDzghcyAcKnFzrRNukj4tJ21cm+ZAU/r0fKR9d4Qpbogca9fAg==
+"@storybook/cli@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.10.tgz#2436276c5404b166a9f795fef44bbd75826d9bfe"
+  integrity sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ==
   dependencies:
     "@babel/core" "^7.23.2"
     "@babel/preset-env" "^7.23.2"
     "@babel/types" "^7.23.0"
     "@ndelangen/get-tarball" "^3.0.7"
-    "@storybook/codemod" "7.6.7"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/core-events" "7.6.7"
-    "@storybook/core-server" "7.6.7"
-    "@storybook/csf-tools" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/telemetry" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/codemod" "7.6.10"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/core-events" "7.6.10"
+    "@storybook/core-server" "7.6.10"
+    "@storybook/csf-tools" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/telemetry" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/semver" "^7.3.4"
     "@yarnpkg/fslib" "2.10.3"
     "@yarnpkg/libzip" "2.3.0"
@@ -2789,31 +2641,30 @@
     puppeteer-core "^2.1.1"
     read-pkg-up "^7.0.1"
     semver "^7.3.7"
-    simple-update-notifier "^2.0.0"
     strip-json-comments "^3.0.1"
     tempy "^1.0.1"
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/client-logger@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.7.tgz#a2cb75a668c09bf091c1925c3403e3f2f8b1e4e1"
-  integrity sha512-A16zpWgsa0gSdXMR9P3bWVdC9u/1B1oG4H7Z1+JhNzgnL3CdyOYO0qFSiAtNBso4nOjIAJVb6/AoBzdRhmSVQg==
+"@storybook/client-logger@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.10.tgz#5d66feb18a21836f84b63f71cf5b3a85d669f049"
+  integrity sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A==
   dependencies:
     "@storybook/global" "^5.0.0"
 
-"@storybook/codemod@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.7.tgz#49ee0e824dcb0ae8f1d887266e82ee694d149b6f"
-  integrity sha512-an2pD5OHqO7CE8Wb7JxjrDnpQgeoxB22MyOs8PPJ9Rvclhpjg+Ku9RogoObYm//zR4g406l7Ec8mTltUkVCEOA==
+"@storybook/codemod@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.10.tgz#21cc0e69df6f57d567fc27264310f820662d62fa"
+  integrity sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw==
   dependencies:
     "@babel/core" "^7.23.2"
     "@babel/preset-env" "^7.23.2"
     "@babel/types" "^7.23.0"
     "@storybook/csf" "^0.1.2"
-    "@storybook/csf-tools" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/csf-tools" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/cross-spawn" "^6.0.2"
     cross-spawn "^7.0.3"
     globby "^11.0.2"
@@ -2822,38 +2673,38 @@
     prettier "^2.8.0"
     recast "^0.23.1"
 
-"@storybook/components@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/components/-/components-7.6.7.tgz#a9d58745b7a11cd7fcb154cfebdbd22b9d210c4e"
-  integrity sha512-1HN4p+MCI4Tx9VGZayZyqbW7SB7mXQLnS5fUbTE1gXaMYHpzFvcrRNROeV1LZPClJX6qx1jgE5ngZojhxGuxMA==
+"@storybook/components@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/components/-/components-7.6.10.tgz#2d1b8c66c374327663b91f65db3b1be5749a1a6b"
+  integrity sha512-H5hF8pxwtbt0LxV24KMMsPlbYG9Oiui3ObvAQkvGu6q62EYxRPeNSrq3GBI5XEbI33OJY9bT24cVaZx18dXqwQ==
   dependencies:
     "@radix-ui/react-select" "^1.2.2"
     "@radix-ui/react-toolbar" "^1.0.4"
-    "@storybook/client-logger" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
     "@storybook/csf" "^0.1.2"
     "@storybook/global" "^5.0.0"
-    "@storybook/theming" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/theming" "7.6.10"
+    "@storybook/types" "7.6.10"
     memoizerific "^1.11.3"
     use-resize-observer "^9.1.0"
     util-deprecate "^1.0.2"
 
-"@storybook/core-client@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.7.tgz#5dfd61519101ead2056a2f2b6ef3f265b257899a"
-  integrity sha512-ZQivyEzYsZok8vRj5Qan7LbiMUnO89rueWzTnZs4IS6JIaQtjoPI1rGVq+h6qOCM6tki478hic8FS+zwGQ6q+w==
+"@storybook/core-client@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.10.tgz#cd427d7017c1f32b2e956b4eb8ea89f3424b60c9"
+  integrity sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg==
   dependencies:
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
 
-"@storybook/core-common@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.7.tgz#69801d7a70b4ed6dab5dec589f612814628d3807"
-  integrity sha512-F1fJnauVSPQtAlpicbN/O4XW38Ai8kf/IoU0Hgm9gEwurIk6MF5hiVLsaTI/5GUbrepMl9d9J+iIL4lHAT8IyA==
+"@storybook/core-common@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.10.tgz#00b73761eb3c4452105a7d79b5179237a6f01b32"
+  integrity sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q==
   dependencies:
-    "@storybook/core-events" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/core-events" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/find-cache-dir" "^3.2.1"
     "@types/node" "^18.0.0"
     "@types/node-fetch" "^2.6.4"
@@ -2875,33 +2726,33 @@
     resolve-from "^5.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/core-events@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.7.tgz#ee8823090cc4e30fddebe72be29738e4b2e66b11"
-  integrity sha512-KZ5d03c47pnr5/kY26pJtWq7WpmCPXLbgyjJZDSc+TTY153BdZksvlBXRHtqM1yj2UM6QsSyIuiJaADJNAbP2w==
+"@storybook/core-events@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.10.tgz#d521cbdadebfa56caaa8815a1e132694a20f05e9"
+  integrity sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag==
   dependencies:
     ts-dedent "^2.0.0"
 
-"@storybook/core-server@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.7.tgz#6d1c3b0d71296bf00438ba5112156f96fc78b2cb"
-  integrity sha512-elKRv/DNahNNkGcQY/FdOBrLPmZF0T0fwmAmbc4qqeAisjl+to9TO77zdo2ieaEHKyRwE3B3dOB4EXomdF4N/g==
+"@storybook/core-server@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.10.tgz#53bf43b8b3c999c87196774a0b92e2e10a434e4c"
+  integrity sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw==
   dependencies:
     "@aw-web-design/x-default-browser" "1.4.126"
     "@discoveryjs/json-ext" "^0.5.3"
-    "@storybook/builder-manager" "7.6.7"
-    "@storybook/channels" "7.6.7"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/core-events" "7.6.7"
+    "@storybook/builder-manager" "7.6.10"
+    "@storybook/channels" "7.6.10"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/core-events" "7.6.10"
     "@storybook/csf" "^0.1.2"
-    "@storybook/csf-tools" "7.6.7"
+    "@storybook/csf-tools" "7.6.10"
     "@storybook/docs-mdx" "^0.1.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
-    "@storybook/telemetry" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/manager" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
+    "@storybook/telemetry" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/detect-port" "^1.3.0"
     "@types/node" "^18.0.0"
     "@types/pretty-hrtime" "^1.0.0"
@@ -2929,36 +2780,36 @@
     watchpack "^2.2.0"
     ws "^8.2.3"
 
-"@storybook/core-webpack@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.7.tgz#ca7d70171e104403709d83d8ad8a4027cee5b5c1"
-  integrity sha512-+UpjJc1fXs9KPIRbTzsBVDgsGQb+VlU3Z7w7XJM1M6ERQrvNAX3oj0iLdDK/AO1ks1qTg+meLFnVwpgKxcTTqg==
+"@storybook/core-webpack@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.10.tgz#e4ca086973d4d10f08b5bed789f1398eb983d8b1"
+  integrity sha512-+GiCRp+2Hw0NO3NYRKamG/U5SyOQ8tOfRUxuAqWI7nduXwB3WWdjji3/ofjqOm/ryKesuQFtfhozaczvBJBvng==
   dependencies:
-    "@storybook/core-common" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/node" "^18.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/csf-plugin@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.7.tgz#c4eb87aab082febd8d13dd6c20a01bb2f2bc19af"
-  integrity sha512-YL7e6H4iVcsDI0UpgpdQX2IiGDrlbgaQMHQgDLWXmZyKxBcy0ONROAX5zoT1ml44EHkL60TMaG4f7SinviJCog==
+"@storybook/csf-plugin@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.10.tgz#479cffe04c68a87f60589a6891a306805c758437"
+  integrity sha512-Sc+zZg/BnPH2X28tthNaQBnDiFfO0QmfjVoOx0fGYM9SvY3P5ehzWwp5hMRBim6a/twOTzePADtqYL+t6GMqqg==
   dependencies:
-    "@storybook/csf-tools" "7.6.7"
+    "@storybook/csf-tools" "7.6.10"
     unplugin "^1.3.1"
 
-"@storybook/csf-tools@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.7.tgz#1707bc5d6289ec79aeab472877aadda76def5015"
-  integrity sha512-hyRbUGa2Uxvz3U09BjcOfMNf/5IYgRum1L6XszqK2O8tK9DGte1r6hArCIAcqiEmFMC40d0kalPzqu6WMNn7sg==
+"@storybook/csf-tools@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.10.tgz#320638f64e2e14cf539dd55188f676fd82789be5"
+  integrity sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA==
   dependencies:
     "@babel/generator" "^7.23.0"
     "@babel/parser" "^7.23.0"
     "@babel/traverse" "^7.23.2"
     "@babel/types" "^7.23.0"
     "@storybook/csf" "^0.1.2"
-    "@storybook/types" "7.6.7"
+    "@storybook/types" "7.6.10"
     fs-extra "^11.1.0"
     recast "^0.23.1"
     ts-dedent "^2.0.0"
@@ -2982,14 +2833,14 @@
   resolved "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316"
   integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==
 
-"@storybook/docs-tools@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.7.tgz#dc496827c50e9ae30dffd0f42076dd085b9b2cd3"
-  integrity sha512-enTO/xVjBqwUraGCYTwdyjMvug3OSAM7TPPUEJ3KPieJNwAzcYkww/qNDMIAR4S39zPMrkAmtS3STvVadlJz7g==
+"@storybook/docs-tools@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.10.tgz#90ce6bcf468b8d0a479fb75e9a6ff87f482095dc"
+  integrity sha512-UgbikducoXzqQHf2TozO0f2rshaeBNnShVbL5Ai4oW7pDymBmrfzdjGbF/milO7yxNKcoIByeoNmu384eBamgQ==
   dependencies:
-    "@storybook/core-common" "7.6.7"
-    "@storybook/preview-api" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/preview-api" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/doctrine" "^0.0.3"
     assert "^2.1.0"
     doctrine "^3.0.0"
@@ -3000,19 +2851,19 @@
   resolved "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed"
   integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==
 
-"@storybook/manager-api@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.7.tgz#6e7816df4e789aca73456a383d8da8fc984b7815"
-  integrity sha512-3Wk/BvuGUlw/X05s57zZO7gJbzfUeE9Xe+CSIvuH7RY5jx9PYnNwqNlTXPXhJ5LPvwMthae7WJVn3SuBpbptoQ==
+"@storybook/manager-api@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.10.tgz#0c2932f42bb97de8fb25240844fcf64474fc8905"
+  integrity sha512-8eGVpRlpunuFScDtc7nxpPJf/4kJBAAZlNdlhmX09j8M3voX6GpcxabBamSEX5pXZqhwxQCshD4IbqBmjvadlw==
   dependencies:
-    "@storybook/channels" "7.6.7"
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-events" "7.6.7"
+    "@storybook/channels" "7.6.10"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-events" "7.6.10"
     "@storybook/csf" "^0.1.2"
     "@storybook/global" "^5.0.0"
-    "@storybook/router" "7.6.7"
-    "@storybook/theming" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/router" "7.6.10"
+    "@storybook/theming" "7.6.10"
+    "@storybook/types" "7.6.10"
     dequal "^2.0.2"
     lodash "^4.17.21"
     memoizerific "^1.11.3"
@@ -3020,38 +2871,38 @@
     telejson "^7.2.0"
     ts-dedent "^2.0.0"
 
-"@storybook/manager@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.7.tgz#993b4dd4800496ee4161c29e853efe7ee2c1a67f"
-  integrity sha512-ZCrkB2zEXogzdOcVzD242ZVm4tlHqrayotnI6iOn9uiun0Pgny0m2d7s9Zge6K2dTOO1vZiOHuA/Mr6nnIDjsA==
+"@storybook/manager@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.10.tgz#eb1b71c802fbf04353f3bf017dfb102eb0db217e"
+  integrity sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog==
 
 "@storybook/mdx2-csf@^1.0.0":
   version "1.1.0"
   resolved "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5"
   integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==
 
-"@storybook/node-logger@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.7.tgz#35cee2b3e4d234b0b0735715d8856dc141d4a9b0"
-  integrity sha512-XLih8MxylkpZG9+8tgp8sPGc2tldlWF+DpuAkUv6J3Mc81mPyc3cQKQWZ7Hb+m1LpRGqKV4wyOQj1rC+leVMoQ==
+"@storybook/node-logger@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.10.tgz#d4c52d04384d2728d6610fb0afff6eb1feb50fd4"
+  integrity sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA==
 
-"@storybook/postinstall@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.7.tgz#edb389a2b2d5c85cdf5dfdcc3f19971437e24e89"
-  integrity sha512-mrpRmcwFd9FcvtHPXA9x6vOrHLVCKScZX/Xx2QPWgAvB3W6uzP8G+8QNb1u834iToxrWeuszUMB9UXZK4Qj5yg==
+"@storybook/postinstall@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.10.tgz#9e81c54b1f23f71a59a6db7ee8a4d5ac40852d17"
+  integrity sha512-SMdXtednPCy3+SRJ7oN1OPN1oVFhj3ih+ChOEX8/kZ5J3nfmV3wLPtsZvFGUCf0KWQEP1xL+1Urv48mzMKcV/w==
 
-"@storybook/preset-react-webpack@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.7.tgz#e5eb2a516a7590b46d146c9a3b9caca333327324"
-  integrity sha512-olKTivJmbyuiPIa99/4Gx3zxbBplyXgbNso9ZAXHnSf7rBD0irV5oRqk+gFlEFJDHkK9vnpWMenly7vzX8QCXQ==
+"@storybook/preset-react-webpack@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.10.tgz#86b34f7156258ddf6481bffd6c638e5382d01054"
+  integrity sha512-fUcr4dmXJdPIQdjkhA4bE8QF8Pavr4BSLxovtTRupbWxtRjZxJrH5hf+0HZycq1cp9umO/11Lsmw9Nx5Xg3Eww==
   dependencies:
     "@babel/preset-flow" "^7.22.15"
     "@babel/preset-react" "^7.22.15"
     "@pmmmwh/react-refresh-webpack-plugin" "^0.5.11"
-    "@storybook/core-webpack" "7.6.7"
-    "@storybook/docs-tools" "7.6.7"
-    "@storybook/node-logger" "7.6.7"
-    "@storybook/react" "7.6.7"
+    "@storybook/core-webpack" "7.6.10"
+    "@storybook/docs-tools" "7.6.10"
+    "@storybook/node-logger" "7.6.10"
+    "@storybook/react" "7.6.10"
     "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0"
     "@types/node" "^18.0.0"
     "@types/semver" "^7.3.4"
@@ -3063,17 +2914,17 @@
     semver "^7.3.7"
     webpack "5"
 
-"@storybook/preview-api@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.7.tgz#4f963c95749157f0f9db7fc92c431214057f90e8"
-  integrity sha512-ja85ItrT6q2TeBQ6n0CNoRi1R6L8yF2kkis9hVeTQHpwLdZyHUTRqqR5WmhtLqqQXcofyasBPOeJV06wuOhgRQ==
+"@storybook/preview-api@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.10.tgz#b8d5a4f897745fc28f0ae75f7e0e9278b0e4a50a"
+  integrity sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw==
   dependencies:
-    "@storybook/channels" "7.6.7"
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-events" "7.6.7"
+    "@storybook/channels" "7.6.10"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-events" "7.6.10"
     "@storybook/csf" "^0.1.2"
     "@storybook/global" "^5.0.0"
-    "@storybook/types" "7.6.7"
+    "@storybook/types" "7.6.10"
     "@types/qs" "^6.9.5"
     dequal "^2.0.2"
     lodash "^4.17.21"
@@ -3083,10 +2934,10 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/preview@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.7.tgz#50b70a58f9a8f95273e1fd963bbe358935b04dde"
-  integrity sha512-/ddKIyT+6b8CKGJAma1wood4nwCAoi/E1olCqgpCmviMeUtAiMzgK0xzPwvq5Mxkz/cPeXVi8CQgaQZCa4yvNA==
+"@storybook/preview@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.10.tgz#895053c97f7e09141c6321fa42390fa8af377bef"
+  integrity sha512-F07BzVXTD3byq+KTWtvsw3pUu3fQbyiBNLFr2CnfU4XSdLKja5lDt8VqDQq70TayVQOf5qfUTzRd4M6pQkjw1w==
 
 "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0":
   version "1.0.6--canary.9.0c3f3b7.0"
@@ -3101,33 +2952,33 @@
     react-docgen-typescript "^2.2.2"
     tslib "^2.0.0"
 
-"@storybook/react-dom-shim@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.7.tgz#73db51e895998e91984de751814b22cf7cdfb426"
-  integrity sha512-b/rmy/YzVrwP+ifyZG4yXVIdeFVdTbmziodHUlbrWiUNsqtTZZur9kqkKRUH/7ofji9MFe81nd0MRlcTNFomqg==
+"@storybook/react-dom-shim@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.10.tgz#d16df5d65a51ed66df92430d8f51d50bd177f2c2"
+  integrity sha512-M+N/h6ximacaFdIDjMN2waNoWwApeVYTpFeoDppiFTvdBTXChyIuiPgYX9QSg7gDz92OaA52myGOot4wGvXVzg==
 
-"@storybook/react-webpack5@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.7.tgz#a31658bc9d8129bf359dc2d73a566f381093de67"
-  integrity sha512-/HK+v8vmeApN4WI5RyaDdhPhjFuEQfMQmvZLl+ewpamhJNMRr4nvrdvxOSfBw46zFubKgieuxEcW+VxHwvZ1og==
+"@storybook/react-webpack5@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.10.tgz#f9d3cb4abc4177d43cefcc62d497b2cbee2b5181"
+  integrity sha512-LWwasiSLEg4wqsMjoRHcOn6BXv2ZyZfTfQV7gCvaX732xf0teblh+/GltAz8x+BtFXruXWmZ8bJ5cd9U4I6hUg==
   dependencies:
-    "@storybook/builder-webpack5" "7.6.7"
-    "@storybook/preset-react-webpack" "7.6.7"
-    "@storybook/react" "7.6.7"
+    "@storybook/builder-webpack5" "7.6.10"
+    "@storybook/preset-react-webpack" "7.6.10"
+    "@storybook/react" "7.6.10"
     "@types/node" "^18.0.0"
 
-"@storybook/react@7.6.7", "@storybook/react@^7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/react/-/react-7.6.7.tgz#53af9e97c1c3d0a59601637f655cefb93a426505"
-  integrity sha512-uT9IBPDM1SQg6FglWqb7IemOJ1Z8kYB5rehIDEDToi0u5INihSY8rHd003TxG4Wx4REp6J+rfbDJO2aVui/gxA==
+"@storybook/react@7.6.10", "@storybook/react@^7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/react/-/react-7.6.10.tgz#aca5c446f43de75981f19d112a8a04d7abd0a03d"
+  integrity sha512-wwBn1cg2uZWW4peqqBjjU7XGmFq8HdkVUtWwh6dpfgmlY1Aopi+vPgZt7pY9KkWcTOq5+DerMdSfwxukpc3ajQ==
   dependencies:
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-client" "7.6.7"
-    "@storybook/docs-tools" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-client" "7.6.10"
+    "@storybook/docs-tools" "7.6.10"
     "@storybook/global" "^5.0.0"
-    "@storybook/preview-api" "7.6.7"
-    "@storybook/react-dom-shim" "7.6.7"
-    "@storybook/types" "7.6.7"
+    "@storybook/preview-api" "7.6.10"
+    "@storybook/react-dom-shim" "7.6.10"
+    "@storybook/types" "7.6.10"
     "@types/escodegen" "^0.0.6"
     "@types/estree" "^0.0.51"
     "@types/node" "^18.0.0"
@@ -3143,23 +2994,23 @@
     type-fest "~2.19"
     util-deprecate "^1.0.2"
 
-"@storybook/router@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/router/-/router-7.6.7.tgz#790eed44a20496376c6e6fad2dc79c18bb79d28e"
-  integrity sha512-kkhNSdC3fXaQxILg8a26RKk4/ZbF/AUVrepUEyO8lwvbJ6LItTyWSE/4I9Ih4qV2Mjx33ncc8vLqM9p8r5qnMA==
+"@storybook/router@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/router/-/router-7.6.10.tgz#b1f2c550eeb9f7146eefa33c5460e4149a62d721"
+  integrity sha512-G/H4Jn2+y8PDe8Zbq4DVxF/TPn0/goSItdILts39JENucHiuGBCjKjSWGBe1rkwKi1tUbB3yhxJVrLagxFEPpQ==
   dependencies:
-    "@storybook/client-logger" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
     memoizerific "^1.11.3"
     qs "^6.10.0"
 
-"@storybook/telemetry@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.7.tgz#46aed41588fca4f081a9127c473cde1ae8b954e0"
-  integrity sha512-NHGzC/LGLXpK4AFbVj8ln5ab86ZiiNFvORQMn3+LNGwUt3ZdsHBzExN+WPZdw7OPtfk4ubUY89FXH2GedhTALw==
+"@storybook/telemetry@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.10.tgz#31c0edfb9c7005cf9b5922e51ca896218e3d81ea"
+  integrity sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg==
   dependencies:
-    "@storybook/client-logger" "7.6.7"
-    "@storybook/core-common" "7.6.7"
-    "@storybook/csf-tools" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
+    "@storybook/core-common" "7.6.10"
+    "@storybook/csf-tools" "7.6.10"
     chalk "^4.1.0"
     detect-package-manager "^2.0.1"
     fetch-retry "^5.0.2"
@@ -3175,94 +3026,94 @@
     "@testing-library/user-event" "^14.4.0"
     ts-dedent "^2.2.0"
 
-"@storybook/theming@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.7.tgz#82450f9c8f59c266e2fa22a1d893fb14bb690d37"
-  integrity sha512-+42rfC4rZtWVAXJ7JBUQKnQ6vWBXJVHZ9HtNUWzQLPR9sJSMmHnnSMV6y5tizGgZqmBnAIkuoYk+Tt6NfwUmSA==
+"@storybook/theming@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.10.tgz#c09d66d19f5756964cc89b1f94051545fc4aaea7"
+  integrity sha512-f5tuy7yV3TOP3fIboSqpgLHy0wKayAw/M8HxX0jVET4Z4fWlFK0BiHJabQ+XEdAfQM97XhPFHB2IPbwsqhCEcQ==
   dependencies:
     "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
-    "@storybook/client-logger" "7.6.7"
+    "@storybook/client-logger" "7.6.10"
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
 
-"@storybook/types@7.6.7":
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/@storybook/types/-/types-7.6.7.tgz#f3935fbd3ba7f958e18106fd1626452a8961ef8c"
-  integrity sha512-VcGwrI4AkBENxkoAUJ+Z7SyMK73hpoY0TTtw2J7tc05/xdiXhkQTX15Qa12IBWIkoXCyNrtaU+q7KR8Tjzi+uw==
+"@storybook/types@7.6.10":
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/@storybook/types/-/types-7.6.10.tgz#20cfb2dfeba2ecf54721de131276041d073fe42e"
+  integrity sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ==
   dependencies:
-    "@storybook/channels" "7.6.7"
+    "@storybook/channels" "7.6.10"
     "@types/babel__core" "^7.0.0"
     "@types/express" "^4.7.0"
     file-system-cache "2.3.0"
 
-"@swc/core-darwin-arm64@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.101.tgz#9ffdc0e77c31b20877fa7405c82905e0c76738d0"
-  integrity sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ==
-
-"@swc/core-darwin-x64@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.101.tgz#e50130e21e3cfd3029fd6cea43e8309b58ad9fa6"
-  integrity sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw==
-
-"@swc/core-linux-arm-gnueabihf@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.101.tgz#8cd36328e794b3c42b6c8e578bb1f42e59ba0231"
-  integrity sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw==
-
-"@swc/core-linux-arm64-gnu@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.101.tgz#d15e3885eb13a1512ba62f00ce4f5bb19f710a0c"
-  integrity sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA==
-
-"@swc/core-linux-arm64-musl@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.101.tgz#851d4cc1079b091fee36f5f64335232210749d7a"
-  integrity sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==
-
-"@swc/core-linux-x64-gnu@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz#3a2a7c584db2e05a798e28361440424914563fa3"
-  integrity sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==
-
-"@swc/core-linux-x64-musl@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz#45d1d53945994f08e93703b8de24ccac88538d0c"
-  integrity sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==
-
-"@swc/core-win32-arm64-msvc@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.101.tgz#b2610b8354e5fbca7cc5be3f728e61b046227fa8"
-  integrity sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==
-
-"@swc/core-win32-ia32-msvc@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.101.tgz#c919175bb4cd5e9fcfa56fbd3708167c1d445c68"
-  integrity sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA==
-
-"@swc/core-win32-x64-msvc@1.3.101":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.101.tgz#17743fe425caffc596fde5965c9c4cf9a48aa26a"
-  integrity sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ==
+"@swc/core-darwin-arm64@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.106.tgz#05adb015d4f8abe7b8b435af10b6e24863cf3b6c"
+  integrity sha512-XYcbViNyHnnm7RWOAO1YipMmthM7m2aXF32b0y+JMLYFBEyFpjVX9btLkzeL7wRx/5B3I35yJNhE+xyx0Q1Gkw==
+
+"@swc/core-darwin-x64@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.106.tgz#da3aa19bcea1caf77b9267b48c40506b3fbc9e3e"
+  integrity sha512-YKDPhUdfuwhmOUS9+CaIwl/0Tp+f1b73BH2EIESuxSNsogZf18a8HQ8O0fQEwdiwmA5LEqw47cj+kfOWV/0+kw==
+
+"@swc/core-linux-arm-gnueabihf@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.106.tgz#08c4f0b56c4607e124868f9793d5d6e198abdb3e"
+  integrity sha512-bHxxJXogvFfocLL5inZxxtx/x/WgKozigp80Vbx0viac1fPDJrqKBw2X4MzpMiuTRAGVQ03jJI6pDwbSBf+yDw==
+
+"@swc/core-linux-arm64-gnu@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.106.tgz#cfa2ac91ca279bf09db8ef001a139a3840a2b05a"
+  integrity sha512-c7jue++CHLgtpeaakEukoCLT9eNrImizbleE9Y7Is8CHqLq/7DG4s+7ma9DFKXIzW2MpTg9byIEQfpqSphVW6A==
+
+"@swc/core-linux-arm64-musl@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.106.tgz#1eff9b3e51a84ea13e0be4de2784bbb28a0e097b"
+  integrity sha512-51EaC3Q8qAhLtWVnAVqoYX/gk3tK31cCBzUpwCcmhianhEBM2/WtKRAS4MqPhE8VVZuN3WjO2c2JaF2mX0yuoA==
+
+"@swc/core-linux-x64-gnu@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.106.tgz#c3c7681efaeb36c528eb0cd133e0e52a85554a5b"
+  integrity sha512-tOUi8BB6jAeCXgx7ESLNnX7nrbMVKQ/XajK77v7Ad4SXf9HYArnimBJpXUUyVFJTXLSv4e6c7s6XHHqXb5Lwcg==
+
+"@swc/core-linux-x64-musl@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.106.tgz#1e7287e379c503f8e565eab7fc5065739611690f"
+  integrity sha512-binLw4Lbd83NPy4/m/teH2nbaifxveSD+sKDvpxywRbvYW2I0w/iCBpUBcbnl16TQF4TPOGpq5YwG9lVxPVw5g==
+
+"@swc/core-win32-arm64-msvc@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.106.tgz#02d7418c202a33906949a5e6924baaaa0a3fce5f"
+  integrity sha512-n4ttBWr8tM7DPzwcEOIBTyTMHZTzCmbic/HTtxEsPyMAf/Daen+yrTKzjPP6k2usfSrjkxA780RSJJxI1N8r2w==
+
+"@swc/core-win32-ia32-msvc@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.106.tgz#22f07b4710e79e22c7828ad89e87636671680e2d"
+  integrity sha512-GhDNIwxE5FhkujESI6h/4ysT3wxwmrzTUlZYaR8rRui6a6SdX9feIPUHPEE5o5hpyp+xqlmvRxKkRxOnwsq8iA==
+
+"@swc/core-win32-x64-msvc@1.3.106":
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.106.tgz#cc28822b1476345ef4ee2a1895ff7c51a42dd45f"
+  integrity sha512-2M6yWChuMS1+/MPo3Dor0SOMkvmiugonWlzsZBAu/oZboH2xKrHSRv7brsBujb2Oe47r+NsbV+vq9tnnP9Vl1Q==
 
 "@swc/core@^1.3.82":
-  version "1.3.101"
-  resolved "https://registry.npmjs.org/@swc/core/-/core-1.3.101.tgz#4e8f1583094a73c410e48a0bebdeccdc6c66d4a5"
-  integrity sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A==
+  version "1.3.106"
+  resolved "https://registry.npmjs.org/@swc/core/-/core-1.3.106.tgz#7e054f8a7db56de3f519c48db03f58e3f09fe8ee"
+  integrity sha512-++QPSPkFq2qELYVScxNHJC42hKQChjiTWS2P0QQ5JWT4NHb9lmNSfrc1ylFIyImwRnxsW2MTBALLYLf95EFAsg==
   dependencies:
     "@swc/counter" "^0.1.1"
     "@swc/types" "^0.1.5"
   optionalDependencies:
-    "@swc/core-darwin-arm64" "1.3.101"
-    "@swc/core-darwin-x64" "1.3.101"
-    "@swc/core-linux-arm-gnueabihf" "1.3.101"
-    "@swc/core-linux-arm64-gnu" "1.3.101"
-    "@swc/core-linux-arm64-musl" "1.3.101"
-    "@swc/core-linux-x64-gnu" "1.3.101"
-    "@swc/core-linux-x64-musl" "1.3.101"
-    "@swc/core-win32-arm64-msvc" "1.3.101"
-    "@swc/core-win32-ia32-msvc" "1.3.101"
-    "@swc/core-win32-x64-msvc" "1.3.101"
+    "@swc/core-darwin-arm64" "1.3.106"
+    "@swc/core-darwin-x64" "1.3.106"
+    "@swc/core-linux-arm-gnueabihf" "1.3.106"
+    "@swc/core-linux-arm64-gnu" "1.3.106"
+    "@swc/core-linux-arm64-musl" "1.3.106"
+    "@swc/core-linux-x64-gnu" "1.3.106"
+    "@swc/core-linux-x64-musl" "1.3.106"
+    "@swc/core-win32-arm64-msvc" "1.3.106"
+    "@swc/core-win32-ia32-msvc" "1.3.106"
+    "@swc/core-win32-x64-msvc" "1.3.106"
 
 "@swc/counter@^0.1.1":
   version "0.1.2"
@@ -3289,9 +3140,9 @@
     pretty-format "^27.0.2"
 
 "@testing-library/dom@^9.0.0":
-  version "9.3.3"
-  resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5"
-  integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==
+  version "9.3.4"
+  resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce"
+  integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==
   dependencies:
     "@babel/code-frame" "^7.10.4"
     "@babel/runtime" "^7.12.5"
@@ -3302,17 +3153,17 @@
     lz-string "^1.5.0"
     pretty-format "^27.0.2"
 
-"@testing-library/jest-dom@^6.1.6":
-  version "6.1.6"
-  resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.6.tgz#d9a3ce61cd74ea792622d3da78a830f6786e8d93"
-  integrity sha512-YwuiOdYEcxhfC2u5iNKlvg2Q5MgbutovP6drq7J1HrCbvR+G58BbtoCoq+L/kNlrNFsu2Kt3jaFAviLVxYHJZg==
+"@testing-library/jest-dom@^6.3.0":
+  version "6.3.0"
+  resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.3.0.tgz#e8d308e0c0e91d882340cbbfdea0e4daa7987d36"
+  integrity sha512-hJVIrkFizEQxoWsGBlycTcQhrpoCH4DhXfrnHFFXgkx3Xdm15zycsq5Ep+vpw4W8S0NJa8cxDHcuJib+1tEbhg==
   dependencies:
     "@adobe/css-tools" "^4.3.2"
     "@babel/runtime" "^7.9.2"
     aria-query "^5.0.0"
     chalk "^3.0.0"
     css.escape "^1.5.1"
-    dom-accessibility-api "^0.5.6"
+    dom-accessibility-api "^0.6.3"
     lodash "^4.17.15"
     redent "^3.0.0"
 
@@ -3325,12 +3176,7 @@
     "@testing-library/dom" "^8.0.0"
     "@types/react-dom" "<18.0.0"
 
-"@testing-library/user-event@^14.4.0":
-  version "14.5.1"
-  resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f"
-  integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==
-
-"@testing-library/user-event@^14.5.2":
+"@testing-library/user-event@^14.4.0", "@testing-library/user-event@^14.5.2":
   version "14.5.2"
   resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd"
   integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==
@@ -3392,9 +3238,9 @@
     "@babel/types" "^7.0.0"
 
 "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6", "@types/babel__traverse@^7.18.0":
-  version "7.20.4"
-  resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b"
-  integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==
+  version "7.20.5"
+  resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
+  integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
   dependencies:
     "@babel/types" "^7.20.7"
 
@@ -3418,10 +3264,10 @@
   dependencies:
     "@types/node" "*"
 
-"@types/cookie@^0.4.1":
-  version "0.4.1"
-  resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
-  integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
+"@types/cookie@^0.6.0":
+  version "0.6.0"
+  resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
+  integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
 
 "@types/cross-spawn@^6.0.2":
   version "6.0.6"
@@ -3469,14 +3315,14 @@
     "@types/estree" "*"
 
 "@types/eslint@*":
-  version "8.56.0"
-  resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz#e28d045b8e530a33c9cbcfbf02332df0d1380a2c"
-  integrity sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==
+  version "8.56.2"
+  resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb"
+  integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==
   dependencies:
     "@types/estree" "*"
     "@types/json-schema" "*"
 
-"@types/estree@*", "@types/estree@^1.0.0":
+"@types/estree@*", "@types/estree@^1.0.5":
   version "1.0.5"
   resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
   integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
@@ -3487,9 +3333,9 @@
   integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
 
 "@types/express-serve-static-core@^4.17.33":
-  version "4.17.41"
-  resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6"
-  integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==
+  version "4.17.42"
+  resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz#2a276952acc73d1b8dc63fd4210647abbc553a71"
+  integrity sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==
   dependencies:
     "@types/node" "*"
     "@types/qs" "*"
@@ -3563,11 +3409,6 @@
     expect "^29.0.0"
     pretty-format "^29.0.0"
 
-"@types/js-levenshtein@^1.1.1":
-  version "1.1.3"
-  resolved "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz#a6fd0bdc8255b274e5438e0bfb25f154492d1106"
-  integrity sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ==
-
 "@types/js-yaml@^4.0.9":
   version "4.0.9"
   resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2"
@@ -3623,31 +3464,24 @@
   integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==
 
 "@types/node-fetch@^2.6.4":
-  version "2.6.10"
-  resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.10.tgz#ff5c1ceacab782f2b7ce69957d38c1c27b0dc469"
-  integrity sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==
+  version "2.6.11"
+  resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
+  integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
   dependencies:
     "@types/node" "*"
     form-data "^4.0.0"
 
-"@types/node@*":
-  version "20.10.5"
-  resolved "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
-  integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
+"@types/node@*", "@types/node@^20.11.7":
+  version "20.11.7"
+  resolved "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz#cb49aedd758c978c30806d0c38b520ed2a3df6e0"
+  integrity sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==
   dependencies:
     undici-types "~5.26.4"
 
 "@types/node@^18.0.0":
-  version "18.19.3"
-  resolved "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz#e4723c4cb385641d61b983f6fe0b716abd5f8fc0"
-  integrity sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==
-  dependencies:
-    undici-types "~5.26.4"
-
-"@types/node@^20.10.6":
-  version "20.10.6"
-  resolved "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5"
-  integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==
+  version "18.19.10"
+  resolved "https://registry.npmjs.org/@types/node/-/node-18.19.10.tgz#4de314ab66faf6bc8ba691021a091ddcdf13a158"
+  integrity sha512-IZD8kAM02AW1HRDTPOlz3npFava678pr8Ie9Vp8uRhBROXAv8MXT2pCnGZZAKYdromsNQLHQcfWQ6EOatVLtqA==
   dependencies:
     undici-types "~5.26.4"
 
@@ -3703,9 +3537,9 @@
     "@types/react" "*"
 
 "@types/react@*", "@types/react@>=16", "@types/react@^16", "@types/react@^16.14.35", "@types/react@^16.14.51", "@types/react@^16.9.38", "@types/react@^17":
-  version "16.14.54"
-  resolved "https://registry.npmjs.org/@types/react/-/react-16.14.54.tgz#43bba37fca0af34f6fd52468098331f0a218aea3"
-  integrity sha512-54MOeVbxTlC8U6XBy2sLhLaHg/QGP0gPEWIpl1E5tNTJDz/SdFktT3OuvAfKxpSXATUmKXDozHvxbT3XohJgDQ==
+  version "16.14.56"
+  resolved "https://registry.npmjs.org/@types/react/-/react-16.14.56.tgz#4cf37850a87edcb9f3526648338eff35d283c9ab"
+  integrity sha512-MxuHB7dvVm5yOxRr7hJoonLG0JY8YvqZtaQ9Quirp3Oe4FLFjAgxkxsKE6IspdHPpRVZKo2ZoDEravWO81EeYA==
   dependencies:
     "@types/prop-types" "*"
     "@types/scheduler" "*"
@@ -3748,7 +3582,7 @@
   resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
   integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
 
-"@types/statuses@^2.0.1":
+"@types/statuses@^2.0.4":
   version "2.0.4"
   resolved "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315"
   integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==
@@ -3778,9 +3612,9 @@
   integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==
 
 "@types/uuid@^9.0.1":
-  version "9.0.7"
-  resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8"
-  integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==
+  version "9.0.8"
+  resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba"
+  integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==
 
 "@types/yargs-parser@*":
   version "21.0.3"
@@ -3801,16 +3635,16 @@
   dependencies:
     "@types/yargs-parser" "*"
 
-"@typescript-eslint/eslint-plugin@^6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.17.0.tgz#dfc38f790704ba8a54a1277c51efdb489f6ecf9f"
-  integrity sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==
+"@typescript-eslint/eslint-plugin@^6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz#bb0676af940bc23bf299ca58dbdc6589c2548c2e"
+  integrity sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==
   dependencies:
     "@eslint-community/regexpp" "^4.5.1"
-    "@typescript-eslint/scope-manager" "6.17.0"
-    "@typescript-eslint/type-utils" "6.17.0"
-    "@typescript-eslint/utils" "6.17.0"
-    "@typescript-eslint/visitor-keys" "6.17.0"
+    "@typescript-eslint/scope-manager" "6.19.1"
+    "@typescript-eslint/type-utils" "6.19.1"
+    "@typescript-eslint/utils" "6.19.1"
+    "@typescript-eslint/visitor-keys" "6.19.1"
     debug "^4.3.4"
     graphemer "^1.4.0"
     ignore "^5.2.4"
@@ -3818,15 +3652,15 @@
     semver "^7.5.4"
     ts-api-utils "^1.0.1"
 
-"@typescript-eslint/parser@^6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.17.0.tgz#8cd7a0599888ca6056082225b2fdf9a635bf32a1"
-  integrity sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==
+"@typescript-eslint/parser@^6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz#68a87bb21afaf0b1689e9cdce0e6e75bc91ada78"
+  integrity sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==
   dependencies:
-    "@typescript-eslint/scope-manager" "6.17.0"
-    "@typescript-eslint/types" "6.17.0"
-    "@typescript-eslint/typescript-estree" "6.17.0"
-    "@typescript-eslint/visitor-keys" "6.17.0"
+    "@typescript-eslint/scope-manager" "6.19.1"
+    "@typescript-eslint/types" "6.19.1"
+    "@typescript-eslint/typescript-estree" "6.19.1"
+    "@typescript-eslint/visitor-keys" "6.19.1"
     debug "^4.3.4"
 
 "@typescript-eslint/scope-manager@5.62.0":
@@ -3837,21 +3671,21 @@
     "@typescript-eslint/types" "5.62.0"
     "@typescript-eslint/visitor-keys" "5.62.0"
 
-"@typescript-eslint/scope-manager@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4"
-  integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==
+"@typescript-eslint/scope-manager@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz#2f527ee30703a6169a52b31d42a1103d80acd51b"
+  integrity sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==
   dependencies:
-    "@typescript-eslint/types" "6.17.0"
-    "@typescript-eslint/visitor-keys" "6.17.0"
+    "@typescript-eslint/types" "6.19.1"
+    "@typescript-eslint/visitor-keys" "6.19.1"
 
-"@typescript-eslint/type-utils@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.17.0.tgz#5febad3f523e393006614cbda28b826925b728d5"
-  integrity sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==
+"@typescript-eslint/type-utils@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz#6a130e3afe605a4898e043fa9f72e96309b54935"
+  integrity sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==
   dependencies:
-    "@typescript-eslint/typescript-estree" "6.17.0"
-    "@typescript-eslint/utils" "6.17.0"
+    "@typescript-eslint/typescript-estree" "6.19.1"
+    "@typescript-eslint/utils" "6.19.1"
     debug "^4.3.4"
     ts-api-utils "^1.0.1"
 
@@ -3860,10 +3694,10 @@
   resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
   integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
 
-"@typescript-eslint/types@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb"
-  integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==
+"@typescript-eslint/types@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz#2d4c9d492a63ede15e7ba7d129bdf7714b77f771"
+  integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==
 
 "@typescript-eslint/typescript-estree@5.62.0":
   version "5.62.0"
@@ -3878,13 +3712,13 @@
     semver "^7.3.7"
     tsutils "^3.21.0"
 
-"@typescript-eslint/typescript-estree@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa"
-  integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==
+"@typescript-eslint/typescript-estree@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz#796d88d88882f12e85bb33d6d82d39e1aea54ed1"
+  integrity sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==
   dependencies:
-    "@typescript-eslint/types" "6.17.0"
-    "@typescript-eslint/visitor-keys" "6.17.0"
+    "@typescript-eslint/types" "6.19.1"
+    "@typescript-eslint/visitor-keys" "6.19.1"
     debug "^4.3.4"
     globby "^11.1.0"
     is-glob "^4.0.3"
@@ -3892,17 +3726,17 @@
     semver "^7.5.4"
     ts-api-utils "^1.0.1"
 
-"@typescript-eslint/utils@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e"
-  integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==
+"@typescript-eslint/utils@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz#df93497f9cfddde2bcc2a591da80536e68acd151"
+  integrity sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==
   dependencies:
     "@eslint-community/eslint-utils" "^4.4.0"
     "@types/json-schema" "^7.0.12"
     "@types/semver" "^7.5.0"
-    "@typescript-eslint/scope-manager" "6.17.0"
-    "@typescript-eslint/types" "6.17.0"
-    "@typescript-eslint/typescript-estree" "6.17.0"
+    "@typescript-eslint/scope-manager" "6.19.1"
+    "@typescript-eslint/types" "6.19.1"
+    "@typescript-eslint/typescript-estree" "6.19.1"
     semver "^7.5.4"
 
 "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.45.0":
@@ -3927,12 +3761,12 @@
     "@typescript-eslint/types" "5.62.0"
     eslint-visitor-keys "^3.3.0"
 
-"@typescript-eslint/visitor-keys@6.17.0":
-  version "6.17.0"
-  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6"
-  integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==
+"@typescript-eslint/visitor-keys@6.19.1":
+  version "6.19.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz#2164073ed4fc34a5ff3b5e25bb5a442100454c4c"
+  integrity sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==
   dependencies:
-    "@typescript-eslint/types" "6.17.0"
+    "@typescript-eslint/types" "6.19.1"
     eslint-visitor-keys "^3.4.1"
 
 "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
@@ -4141,9 +3975,9 @@ acorn-walk@^7.2.0:
   integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
 
 acorn-walk@^8.0.2, acorn-walk@^8.1.1:
-  version "8.3.1"
-  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43"
-  integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==
+  version "8.3.2"
+  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+  integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
 
 acorn@^7.4.0, acorn@^7.4.1:
   version "7.4.1"
@@ -4151,9 +3985,9 @@ acorn@^7.4.0, acorn@^7.4.1:
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
 acorn@^8.1.0, acorn@^8.11.2, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2:
-  version "8.11.2"
-  resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
-  integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
+  version "8.11.3"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
 
 address@^1.0.1:
   version "1.2.2"
@@ -4472,10 +4306,10 @@ axe-core@=4.7.0:
   resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
   integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
 
-axios@^1.6.5:
-  version "1.6.5"
-  resolved "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8"
-  integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==
+axios@^1.6.7:
+  version "1.6.7"
+  resolved "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7"
+  integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==
   dependencies:
     follow-redirects "^1.15.4"
     form-data "^4.0.0"
@@ -4562,29 +4396,29 @@ babel-plugin-jest-hoist@^29.6.3:
     "@types/babel__core" "^7.1.14"
     "@types/babel__traverse" "^7.0.6"
 
-babel-plugin-polyfill-corejs2@^0.4.6, babel-plugin-polyfill-corejs2@^0.4.7:
-  version "0.4.7"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c"
-  integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==
+babel-plugin-polyfill-corejs2@^0.4.8:
+  version "0.4.8"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269"
+  integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==
   dependencies:
     "@babel/compat-data" "^7.22.6"
-    "@babel/helper-define-polyfill-provider" "^0.4.4"
+    "@babel/helper-define-polyfill-provider" "^0.5.0"
     semver "^6.3.1"
 
-babel-plugin-polyfill-corejs3@^0.8.5, babel-plugin-polyfill-corejs3@^0.8.7:
-  version "0.8.7"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04"
-  integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==
+babel-plugin-polyfill-corejs3@^0.9.0:
+  version "0.9.0"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81"
+  integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.4.4"
-    core-js-compat "^3.33.1"
+    "@babel/helper-define-polyfill-provider" "^0.5.0"
+    core-js-compat "^3.34.0"
 
-babel-plugin-polyfill-regenerator@^0.5.3, babel-plugin-polyfill-regenerator@^0.5.4:
-  version "0.5.4"
-  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4"
-  integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==
+babel-plugin-polyfill-regenerator@^0.5.5:
+  version "0.5.5"
+  resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a"
+  integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.4.4"
+    "@babel/helper-define-polyfill-provider" "^0.5.0"
 
 "babel-plugin-styled-components@>= 1.12.0":
   version "2.1.4"
@@ -4743,7 +4577,7 @@ browserify-zlib@^0.1.4:
   dependencies:
     pako "~0.2.0"
 
-browserslist@^4.14.5, browserslist@^4.22.2:
+browserslist@^4.21.10, browserslist@^4.22.2:
   version "4.22.2"
   resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
   integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
@@ -4845,9 +4679,9 @@ camelize@^1.0.0:
   integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
 
 caniuse-lite@^1.0.30001565:
-  version "1.0.30001572"
-  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz#1ccf7dc92d2ee2f92ed3a54e11b7b4a3041acfa0"
-  integrity sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==
+  version "1.0.30001580"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz#e3c76bc6fe020d9007647044278954ff8cd17d1e"
+  integrity sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==
 
 case-sensitive-paths-webpack-plugin@^2.4.0:
   version "2.4.0"
@@ -4924,14 +4758,14 @@ ci-info@^3.2.0:
   resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
   integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
 
-citty@^0.1.4, citty@^0.1.5:
+citty@^0.1.5:
   version "0.1.5"
   resolved "https://registry.npmjs.org/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50"
   integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==
   dependencies:
     consola "^3.2.3"
 
-cjs-module-lexer@^1.0.0:
+cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.2.3:
   version "1.2.3"
   resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
   integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
@@ -5185,17 +5019,17 @@ cookie@0.5.0, cookie@^0.5.0:
   resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
   integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
 
-core-js-compat@^3.31.0, core-js-compat@^3.33.1:
-  version "3.34.0"
-  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17"
-  integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==
+core-js-compat@^3.31.0, core-js-compat@^3.34.0:
+  version "3.35.1"
+  resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2"
+  integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==
   dependencies:
     browserslist "^4.22.2"
 
 core-js-pure@^3.23.3:
-  version "3.34.0"
-  resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.34.0.tgz#981e462500708664c91b827a75b011f04a8134a0"
-  integrity sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==
+  version "3.35.1"
+  resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz#f33ad7fdf9dddae260339a30e5f8363f5c49a3bc"
+  integrity sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==
 
 core-util-is@~1.0.0:
   version "1.0.3"
@@ -5272,19 +5106,19 @@ css-functions-list@^3.1.0:
   resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea"
   integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==
 
-css-loader@^6.7.1, css-loader@^6.8.1:
-  version "6.8.1"
-  resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
-  integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==
+css-loader@^6.7.1, css-loader@^6.9.1:
+  version "6.9.1"
+  resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.9.1.tgz#9ec9a434368f2bdfeffbf8f6901a1ce773586c6b"
+  integrity sha512-OzABOh0+26JKFdMzlK6PY1u5Zx8+Ck7CVRlcGNZoY9qwJjdfu2VWFuprTIpPW+Av5TZTVViYWcFQaEEQURLknQ==
   dependencies:
     icss-utils "^5.1.0"
-    postcss "^8.4.21"
+    postcss "^8.4.33"
     postcss-modules-extract-imports "^3.0.0"
-    postcss-modules-local-by-default "^4.0.3"
-    postcss-modules-scope "^3.0.0"
+    postcss-modules-local-by-default "^4.0.4"
+    postcss-modules-scope "^3.1.1"
     postcss-modules-values "^4.0.0"
     postcss-value-parser "^4.2.0"
-    semver "^7.3.8"
+    semver "^7.5.4"
 
 css-select@^4.1.3:
   version "4.3.0"
@@ -5484,9 +5318,9 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
     object-keys "^1.1.1"
 
 defu@^6.1.3:
-  version "6.1.3"
-  resolved "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz#6d7f56bc61668e844f9f593ace66fd67ef1205fd"
-  integrity sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==
+  version "6.1.4"
+  resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479"
+  integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==
 
 del@^6.0.0:
   version "6.1.1"
@@ -5583,11 +5417,16 @@ doctrine@^3.0.0:
   dependencies:
     esutils "^2.0.2"
 
-dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9:
+dom-accessibility-api@^0.5.9:
   version "0.5.16"
   resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453"
   integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==
 
+dom-accessibility-api@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8"
+  integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==
+
 dom-converter@^0.2.0:
   version "0.2.0"
   resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
@@ -5646,9 +5485,9 @@ dotenv-expand@^10.0.0:
   integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==
 
 dotenv@^16.0.0:
-  version "16.3.1"
-  resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
-  integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
+  version "16.4.1"
+  resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11"
+  integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==
 
 duplexify@^3.5.0, duplexify@^3.6.0:
   version "3.7.1"
@@ -5673,9 +5512,9 @@ ejs@^3.1.8:
     jake "^10.8.5"
 
 electron-to-chromium@^1.4.601:
-  version "1.4.616"
-  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz#4bddbc2c76e1e9dbf449ecd5da3d8119826ea4fb"
-  integrity sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==
+  version "1.4.647"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz#3c8d4815e5ed2fbdd37f4ab7333cd9f8fc56d53a"
+  integrity sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw==
 
 emittery@^0.13.1:
   version "0.13.1"
@@ -6041,10 +5880,10 @@ eslint-plugin-import@^2.29.1:
     semver "^6.3.1"
     tsconfig-paths "^3.15.0"
 
-eslint-plugin-jest@^27.6.1:
-  version "27.6.1"
-  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.1.tgz#5e43b07f3ca48d72e4b4fa243531e5153d9ca1dc"
-  integrity sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q==
+eslint-plugin-jest@^27.6.3:
+  version "27.6.3"
+  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz#8acb8b1e45597fe1f4d4cf25163d90119efc12be"
+  integrity sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==
   dependencies:
     "@typescript-eslint/utils" "^5.10.0"
 
@@ -6550,14 +6389,14 @@ flatted@^3.2.9:
   integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
 
 flow-parser@0.*:
-  version "0.225.1"
-  resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.225.1.tgz#78f16d90c724bfa2149acf5e129bc5a85fc82988"
-  integrity sha512-50fjR6zbLQcpq5IFNkheUSY/AFPxVeeLiBM5B3NQBSKId2G0cUuExOlDDOguxc49dl9lnh8hI1xcYlPJWNp4KQ==
+  version "0.227.0"
+  resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.227.0.tgz#e50b65be9dc6810438c975e816a68005fbcd5107"
+  integrity sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==
 
 follow-redirects@^1.15.4:
-  version "1.15.4"
-  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
-  integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
+  version "1.15.5"
+  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
+  integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
 
 for-each@^0.3.3:
   version "0.3.3"
@@ -6945,7 +6784,7 @@ has-flag@^4.0.0:
   resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-has-property-descriptors@^1.0.0:
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
   integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
@@ -6981,7 +6820,7 @@ he@^1.2.0:
   resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
   integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
 
-headers-polyfill@^4.0.1:
+headers-polyfill@^4.0.2:
   version "4.0.2"
   resolved "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a"
   integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==
@@ -8038,11 +7877,6 @@ jest@^29.7.0:
     import-local "^3.0.2"
     jest-cli "^29.7.0"
 
-js-levenshtein@^1.1.6:
-  version "1.1.6"
-  resolved "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
-  integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-
 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
   version "4.0.0"
   resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -8380,9 +8214,9 @@ lru-cache@^6.0.0:
     yallist "^4.0.0"
 
 "lru-cache@^9.1.1 || ^10.0.0":
-  version "10.1.0"
-  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484"
-  integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==
+  version "10.2.0"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+  integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
 
 lz-string@^1.5.0:
   version "1.5.0"
@@ -8446,9 +8280,9 @@ map-or-similar@^1.5.0:
   integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==
 
 markdown-to-jsx@^7.1.8:
-  version "7.3.2"
-  resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz#f286b4d112dad3028acc1e77dfe1f653b347e131"
-  integrity sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==
+  version "7.4.0"
+  resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.0.tgz#4606c5c549a6f6cb87604c35f5ee4f42959ffb6b"
+  integrity sha512-zilc+MIkVVXPyTb4iIUTIz9yyqfcWjszGXnwF9K/aiBWcHXFcmdEMTkG01/oQhwSCH7SY1BnG6+ev5BzWmbPrg==
 
 mathml-tag-names@^2.1.3:
   version "2.1.3"
@@ -8678,32 +8512,29 @@ msw-storybook-addon@2.0.0--canary.122.06f0c92.0:
   dependencies:
     is-node-process "^1.0.1"
 
-msw@^2.0.11:
-  version "2.0.11"
-  resolved "https://registry.npmjs.org/msw/-/msw-2.0.11.tgz#f0a5878952a79bb5c0ef489bd01755170ed01adf"
-  integrity sha512-dAXFS2DxZX0uFqMPhS3oUAu8S/5IQ5qKKSwtXl3/dMTeML0C8JfSvbeWtowYg6pu4Iehgp5L/pHLrlIcG++y/A==
+msw@^2.1.5:
+  version "2.1.5"
+  resolved "https://registry.npmjs.org/msw/-/msw-2.1.5.tgz#f6736ad33120f01e939416275625dcf7e7b28d14"
+  integrity sha512-r39AZk4taMmUEYwtzDAgFy38feqJy1yaKykvo0QE8q7H7c28yH/WIlOmE7oatjkC3dMgpTYfND8MaxeywgU+Yg==
   dependencies:
     "@bundled-es-modules/cookie" "^2.0.0"
-    "@bundled-es-modules/js-levenshtein" "^2.0.1"
     "@bundled-es-modules/statuses" "^1.0.1"
     "@mswjs/cookies" "^1.1.0"
-    "@mswjs/interceptors" "^0.25.13"
+    "@mswjs/interceptors" "^0.25.15"
     "@open-draft/until" "^2.1.0"
-    "@types/cookie" "^0.4.1"
-    "@types/js-levenshtein" "^1.1.1"
-    "@types/statuses" "^2.0.1"
+    "@types/cookie" "^0.6.0"
+    "@types/statuses" "^2.0.4"
     chalk "^4.1.2"
     chokidar "^3.4.2"
     graphql "^16.8.1"
-    headers-polyfill "^4.0.1"
+    headers-polyfill "^4.0.2"
     inquirer "^8.2.0"
     is-node-process "^1.2.0"
-    js-levenshtein "^1.1.6"
-    outvariant "^1.4.0"
+    outvariant "^1.4.2"
     path-to-regexp "^6.2.0"
-    strict-event-emitter "^0.5.0"
-    type-fest "^2.19.0"
-    yargs "^17.3.1"
+    strict-event-emitter "^0.5.1"
+    type-fest "^4.9.0"
+    yargs "^17.7.2"
 
 mute-stream@0.0.8:
   version "0.0.8"
@@ -8855,14 +8686,14 @@ nwsapi@^2.2.2:
   integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
 
 nypm@^0.3.3:
-  version "0.3.3"
-  resolved "https://registry.npmjs.org/nypm/-/nypm-0.3.3.tgz#e775fd8f62c3ed7d60958ede80911410cb792724"
-  integrity sha512-FHoxtTscAE723e80d2M9cJRb4YVjL82Ra+ZV+YqC6rfNZUWahi+ZhPF+krnR+bdMvibsfHCtgKXnZf5R6kmEPA==
+  version "0.3.6"
+  resolved "https://registry.npmjs.org/nypm/-/nypm-0.3.6.tgz#940b558e6e56c2ed5dc43adf6dcf2c16577a80ff"
+  integrity sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==
   dependencies:
-    citty "^0.1.4"
+    citty "^0.1.5"
     execa "^8.0.1"
-    pathe "^1.1.1"
-    ufo "^1.3.0"
+    pathe "^1.1.2"
+    ufo "^1.3.2"
 
 object-assign@^4.1.0, object-assign@^4.1.1:
   version "4.1.1"
@@ -9026,7 +8857,7 @@ os-tmpdir@~1.0.2:
   resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
   integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
 
-outvariant@^1.2.1, outvariant@^1.4.0:
+outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2:
   version "1.4.2"
   resolved "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066"
   integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==
@@ -9210,10 +9041,10 @@ path-type@^4.0.0:
   resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
 
-pathe@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a"
-  integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
+pathe@^1.1.1, pathe@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
+  integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
 
 peek-stream@^1.1.0:
   version "1.1.3"
@@ -9244,7 +9075,7 @@ pify@^4.0.1:
   resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
   integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
 
-pirates@^4.0.4, pirates@^4.0.5:
+pirates@^4.0.4, pirates@^4.0.6:
   version "4.0.6"
   resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
   integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
@@ -9303,19 +9134,19 @@ postcss-modules-extract-imports@^3.0.0:
   resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
   integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
 
-postcss-modules-local-by-default@^4.0.3:
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524"
-  integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==
+postcss-modules-local-by-default@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6"
+  integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==
   dependencies:
     icss-utils "^5.0.0"
     postcss-selector-parser "^6.0.2"
     postcss-value-parser "^4.1.0"
 
-postcss-modules-scope@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz#fbfddfda93a31f310f1d152c2bb4d3f3c5592ee0"
-  integrity sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==
+postcss-modules-scope@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134"
+  integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==
   dependencies:
     postcss-selector-parser "^6.0.4"
 
@@ -9337,9 +9168,9 @@ postcss-safe-parser@^6.0.0:
   integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
 
 postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
-  version "6.0.14"
-  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz#9d45f1afbebedae6811a17f49d09754f2ad153b3"
-  integrity sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==
+  version "6.0.15"
+  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
+  integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
   dependencies:
     cssesc "^3.0.0"
     util-deprecate "^1.0.2"
@@ -9349,10 +9180,10 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^
   resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
-postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.32:
-  version "8.4.32"
-  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
-  integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
+postcss@^8.4.19, postcss@^8.4.33:
+  version "8.4.33"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
+  integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
   dependencies:
     nanoid "^3.3.7"
     picocolors "^1.0.0"
@@ -9605,9 +9436,9 @@ react-docgen-typescript@^2.2.2:
   integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==
 
 react-docgen@^7.0.0:
-  version "7.0.1"
-  resolved "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.1.tgz#b6528fe45385908645ffbee1ec0d65709e1e047c"
-  integrity sha512-rCz0HBIT0LWbIM+///LfRrJoTKftIzzwsYDf0ns5KwaEjejMHQRtphcns+IXFHDNY9pnz6G8l/JbbI6pD4EAIA==
+  version "7.0.3"
+  resolved "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz#f811b785f07b1f2023cb899b6bcf9d522b21b95d"
+  integrity sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==
   dependencies:
     "@babel/core" "^7.18.9"
     "@babel/traverse" "^7.18.9"
@@ -9698,20 +9529,20 @@ react-resize-detector@^3.2.1:
     prop-types "^15.6.2"
     resize-observer-polyfill "^1.5.1"
 
-react-router-dom@^6.21.1:
-  version "6.21.1"
-  resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz#58b459d2fe1841388c95bb068f85128c45e27349"
-  integrity sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==
+react-router-dom@^6.21.3:
+  version "6.21.3"
+  resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.3.tgz#ef3a7956a3699c7b82c21fcb3dbc63c313ed8c5d"
+  integrity sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g==
   dependencies:
-    "@remix-run/router" "1.14.1"
-    react-router "6.21.1"
+    "@remix-run/router" "1.14.2"
+    react-router "6.21.3"
 
-react-router@6.21.1:
-  version "6.21.1"
-  resolved "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz#8db7ee8d7cfc36513c9a66b44e0897208c33be34"
-  integrity sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==
+react-router@6.21.3:
+  version "6.21.3"
+  resolved "https://registry.npmjs.org/react-router/-/react-router-6.21.3.tgz#8086cea922c2bfebbb49c6594967418f1f167d70"
+  integrity sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg==
   dependencies:
-    "@remix-run/router" "1.14.1"
+    "@remix-run/router" "1.14.2"
 
 react-spring@9.2.4:
   version "9.2.4"
@@ -10051,12 +9882,12 @@ rxjs@^7.5.5:
     tslib "^2.1.0"
 
 safe-array-concat@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
-  integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692"
+  integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==
   dependencies:
-    call-bind "^1.0.2"
-    get-intrinsic "^1.2.1"
+    call-bind "^1.0.5"
+    get-intrinsic "^1.2.2"
     has-symbols "^1.0.3"
     isarray "^2.0.5"
 
@@ -10076,12 +9907,12 @@ safe-json-parse@~1.0.1:
   integrity sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==
 
 safe-regex-test@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
-  integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5"
+  integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==
   dependencies:
-    call-bind "^1.0.2"
-    get-intrinsic "^1.1.3"
+    call-bind "^1.0.5"
+    get-intrinsic "^1.2.2"
     is-regex "^1.1.4"
 
 "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
@@ -10164,9 +9995,9 @@ send@0.18.0:
     statuses "2.0.1"
 
 serialize-javascript@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
-  integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
+  integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
   dependencies:
     randombytes "^2.1.0"
 
@@ -10181,14 +10012,15 @@ serve-static@1.15.0:
     send "0.18.0"
 
 set-function-length@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
-  integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1"
+  integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==
   dependencies:
     define-data-property "^1.1.1"
-    get-intrinsic "^1.2.1"
+    function-bind "^1.1.2"
+    get-intrinsic "^1.2.2"
     gopd "^1.0.1"
-    has-property-descriptors "^1.0.0"
+    has-property-descriptors "^1.0.1"
 
 set-function-name@^2.0.0, set-function-name@^2.0.1:
   version "2.0.1"
@@ -10247,13 +10079,6 @@ signal-exit@^4.0.1, signal-exit@^4.1.0:
   resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
   integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
 
-simple-update-notifier@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
-  integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
-  dependencies:
-    semver "^7.5.3"
-
 sisteransi@^1.0.5:
   version "1.0.5"
   resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -10318,9 +10143,9 @@ spdx-correct@^3.0.0:
     spdx-license-ids "^3.0.0"
 
 spdx-exceptions@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
-  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+  version "2.4.0"
+  resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b"
+  integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==
 
 spdx-expression-parse@^3.0.0:
   version "3.0.1"
@@ -10369,19 +10194,19 @@ store2@^2.14.2:
   resolved "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068"
   integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==
 
-storybook@^7.6.7:
-  version "7.6.7"
-  resolved "https://registry.npmjs.org/storybook/-/storybook-7.6.7.tgz#90865997e806cbce278481fce1bb5be1984964fc"
-  integrity sha512-1Cd895dqYIT5MOUOCDlD73OTWoJubLq/sWC7AMzkMrLu76yD4Cu6f+wv1HDrRAheRaCaeT3yhYEhsMB6qHIcaA==
+storybook@^7.6.10:
+  version "7.6.10"
+  resolved "https://registry.npmjs.org/storybook/-/storybook-7.6.10.tgz#2185d26cd7b43390e3e2c7581586e2f60cdbd9bd"
+  integrity sha512-ypFeGhQTUBBfqSUVZYh7wS5ghn3O2wILCiQc4459SeUpvUn+skcqw/TlrwGSoF5EWjDA7gtRrWDxO3mnlPt5Cw==
   dependencies:
-    "@storybook/cli" "7.6.7"
+    "@storybook/cli" "7.6.10"
 
 stream-shift@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
-  integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
+  integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
 
-strict-event-emitter@^0.5.0, strict-event-emitter@^0.5.1:
+strict-event-emitter@^0.5.1:
   version "0.5.1"
   resolved "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93"
   integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==
@@ -10525,10 +10350,10 @@ strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1
   resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
-style-loader@^3.3.1, style-loader@^3.3.3:
-  version "3.3.3"
-  resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff"
-  integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==
+style-loader@^3.3.1, style-loader@^3.3.4:
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7"
+  integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==
 
 style-search@^0.1.0:
   version "0.1.0"
@@ -10728,21 +10553,21 @@ tempy@^1.0.1:
     type-fest "^0.16.0"
     unique-string "^2.0.0"
 
-terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.7:
-  version "5.3.9"
-  resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
-  integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
+terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.10:
+  version "5.3.10"
+  resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
+  integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
   dependencies:
-    "@jridgewell/trace-mapping" "^0.3.17"
+    "@jridgewell/trace-mapping" "^0.3.20"
     jest-worker "^27.4.5"
     schema-utils "^3.1.1"
     serialize-javascript "^6.0.1"
-    terser "^5.16.8"
+    terser "^5.26.0"
 
-terser@^5.10.0, terser@^5.16.8:
-  version "5.26.0"
-  resolved "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1"
-  integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==
+terser@^5.10.0, terser@^5.26.0:
+  version "5.27.0"
+  resolved "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c"
+  integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==
   dependencies:
     "@jridgewell/source-map" "^0.3.3"
     acorn "^8.8.2"
@@ -10962,6 +10787,11 @@ type-fest@^2.19.0, type-fest@~2.19:
   resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
   integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
 
+type-fest@^4.9.0:
+  version "4.10.1"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.10.1.tgz#35e6cd34d1fe331cf261d8ebb83e64788b89db4b"
+  integrity sha512-7ZnJYTp6uc04uYRISWtiX3DSKB/fxNQT0B5o1OUeCqiQiwF+JC9+rJiZIDrPrNCLLuTqyQmh4VdQqh/ZOkv9MQ==
+
 type-is@~1.6.18:
   version "1.6.18"
   resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -11019,7 +10849,7 @@ typescript@^5.3.3:
   resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
   integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
 
-ufo@^1.3.0:
+ufo@^1.3.2:
   version "1.3.2"
   resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496"
   integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==
@@ -11383,19 +11213,19 @@ webpack-virtual-modules@^0.6.1:
   resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f"
   integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==
 
-webpack@5, webpack@^5.89.0:
-  version "5.89.0"
-  resolved "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc"
-  integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==
+webpack@5, webpack@^5.90.0:
+  version "5.90.0"
+  resolved "https://registry.npmjs.org/webpack/-/webpack-5.90.0.tgz#313bfe16080d8b2fee6e29b6c986c0714ad4290e"
+  integrity sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==
   dependencies:
     "@types/eslint-scope" "^3.7.3"
-    "@types/estree" "^1.0.0"
+    "@types/estree" "^1.0.5"
     "@webassemblyjs/ast" "^1.11.5"
     "@webassemblyjs/wasm-edit" "^1.11.5"
     "@webassemblyjs/wasm-parser" "^1.11.5"
     acorn "^8.7.1"
     acorn-import-assertions "^1.9.0"
-    browserslist "^4.14.5"
+    browserslist "^4.21.10"
     chrome-trace-event "^1.0.2"
     enhanced-resolve "^5.15.0"
     es-module-lexer "^1.2.1"
@@ -11409,7 +11239,7 @@ webpack@5, webpack@^5.89.0:
     neo-async "^2.6.2"
     schema-utils "^3.2.0"
     tapable "^2.1.1"
-    terser-webpack-plugin "^5.3.7"
+    terser-webpack-plugin "^5.3.10"
     watchpack "^2.4.0"
     webpack-sources "^3.2.3"
 
@@ -11530,7 +11360,6 @@ wordwrap@^1.0.0:
   integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
 
 "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
-  name wrap-ansi-cjs
   version "7.0.0"
   resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
   integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -11641,7 +11470,7 @@ yargs-parser@^21.1.1:
   resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
   integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
-yargs@^17.3.1:
+yargs@^17.3.1, yargs@^17.7.2:
   version "17.7.2"
   resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
   integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==


Test patch:
diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml
index 21b801592..c03df1097 100644
--- a/.github/workflows/build-test-release.yml
+++ b/.github/workflows/build-test-release.yml
@@ -94,10 +94,13 @@ jobs:
         with:
           name: UCC-UI-build
           path: built-ui/
+
       - uses: actions/download-artifact@v4
+        if: "! github.event.pull_request.head.repo.fork "
         with:
           name: THIRDPARTY
       - run: cp -f THIRDPARTY NOTICE
+        if: "! github.event.pull_request.head.repo.fork "
       - run: curl -sSL https://install.python-poetry.org | python3 - --version 1.5.1
       - run: poetry install
       - name: Check docs
@@ -282,7 +285,7 @@ jobs:
           poetry install
           mkdir tests/packaged
           poetry run ucc-gen package --path tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample -o tests/packaged
-      - uses: splunk/appinspect-cli-action@v2.0
+      - uses: splunk/appinspect-cli-action@v2.2
         with:
           app_path: tests/packaged
           included_tags: ${{ matrix.tags }}
@@ -301,6 +304,7 @@ jobs:
       - semgrep
       - pre-commit
     runs-on: ubuntu-latest
+    if: "! github.event.pull_request.head.repo.fork "
     steps:
       - uses: actions/checkout@v4
         with:
diff --git a/tests/smoke/test_ucc_build.py b/tests/smoke/test_ucc_build.py
index ce17f08a6..15dc73276 100644
--- a/tests/smoke/test_ucc_build.py
+++ b/tests/smoke/test_ucc_build.py
@@ -11,6 +11,7 @@
 import addonfactory_splunk_conf_parser_lib as conf_parser
 
 from splunk_add_on_ucc_framework.commands import build
+from splunk_add_on_ucc_framework import __version__
 
 PYTEST_SKIP_REASON = """Python 3.8 and higher preserves the order of the attrib
 fields when `tostring` function is used.
@@ -59,7 +60,28 @@ def test_ucc_generate():
 def test_ucc_generate_with_config_param():
     """
     Checks whether the package is build when the `config` flag is provided in the CLI.
+    Check if globalConfig and app.manifest contains current ucc version
     """
+
+    def check_ucc_versions():
+        global_config_path = path.join(
+            path.dirname(path.realpath(__file__)),
+            "..",
+            "..",
+            "output",
+            "Splunk_TA_UCCExample",
+            "appserver",
+            "static",
+            "js",
+            "build",
+            "globalConfig.json",
+        )
+
+        with open(global_config_path) as _f:
+            global_config = json.load(_f)
+
+        assert global_config["meta"]["_uccVersion"] == __version__
+
     package_folder = path.join(
         path.dirname(path.realpath(__file__)),
         "..",
@@ -76,8 +98,11 @@ def test_ucc_generate_with_config_param():
         "package_global_config_everything",
         "globalConfig.json",
     )
+
     build.generate(source=package_folder, config_path=config_path)
 
+    check_ucc_versions()
+
 
 @pytest.mark.skipif(sys.version_info >= (3, 8), reason=PYTEST_SKIP_REASON)
 def test_ucc_generate_with_everything():
@@ -160,6 +185,18 @@ def test_ucc_generate_with_everything():
             assert path.exists(expected_file_path)
 
 
+def test_ucc_generate_with_multiple_inputs_tabs():
+    package_folder = path.join(
+        path.dirname(path.realpath(__file__)),
+        "..",
+        "testdata",
+        "test_addons",
+        "package_global_config_multi_input",
+        "package",
+    )
+    build.generate(source=package_folder)
+
+
 @pytest.mark.skipif(sys.version_info >= (3, 8), reason=PYTEST_SKIP_REASON)
 def test_ucc_generate_with_configuration():
     with tempfile.TemporaryDirectory() as temp_dir:
@@ -392,3 +429,91 @@ def summarize_types(raw_expected_logs):
         # summary messages must be the same but might come in different order
         assert log_line.message in expected_logs.keys()
         assert log_line.levelname == expected_logs[log_line.message]
+
+
+@pytest.mark.skipif(sys.version_info >= (3, 8), reason=PYTEST_SKIP_REASON)
+def test_ucc_generate_with_everything_uccignore(caplog):
+    with tempfile.TemporaryDirectory() as temp_dir:
+        package_folder = path.join(
+            path.dirname(path.realpath(__file__)),
+            "..",
+            "testdata",
+            "test_addons",
+            "package_global_config_everything_uccignore",
+            "package",
+        )
+        build.generate(source=package_folder, output_directory=temp_dir)
+
+        expected_warning_msg = (
+            f"No files found for the specified pattern: "
+            f"{temp_dir}/Splunk_TA_UCCExample/bin/wrong_pattern"
+        )
+
+        edm1 = "Removed:"
+        edm2 = f"\n{temp_dir}/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_example_input_one.py"
+        edm3 = f"\n{temp_dir}/Splunk_TA_UCCExample/bin/example_input_one.py"
+        edm4 = f"\n{temp_dir}/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_example_input_two.py"
+
+        assert expected_warning_msg in caplog.text
+        assert (edm1 + edm2 + edm3 + edm4) in caplog.text or (
+            edm1 + edm3 + edm2 + edm4
+        ) in caplog.text
+
+        expected_folder = path.join(
+            path.dirname(__file__),
+            "..",
+            "testdata",
+            "expected_addons",
+            "expected_output_global_config_everything",
+            "Splunk_TA_UCCExample",
+        )
+        actual_folder = path.join(temp_dir, "Splunk_TA_UCCExample")
+        _compare_app_conf(expected_folder, actual_folder)
+        files_to_be_equal = [
+            ("README.txt",),
+            ("default", "alert_actions.conf"),
+            ("default", "eventtypes.conf"),
+            ("default", "inputs.conf"),
+            ("default", "restmap.conf"),
+            ("default", "tags.conf"),
+            ("default", "splunk_ta_uccexample_settings.conf"),
+            ("default", "web.conf"),
+            ("default", "server.conf"),
+            ("default", "data", "ui", "alerts", "test_alert.html"),
+            ("default", "data", "ui", "nav", "default.xml"),
+            ("default", "data", "ui", "views", "configuration.xml"),
+            ("default", "data", "ui", "views", "inputs.xml"),
+            ("default", "data", "ui", "views", "dashboard.xml"),
+            ("default", "data", "ui", "views", "splunk_ta_uccexample_redirect.xml"),
+            ("bin", "splunk_ta_uccexample", "modalert_test_alert_helper.py"),
+            ("bin", "example_input_two.py"),
+            ("bin", "example_input_three.py"),
+            ("bin", "example_input_four.py"),
+            ("bin", "import_declare_test.py"),
+            ("bin", "splunk_ta_uccexample_rh_account.py"),
+            ("bin", "splunk_ta_uccexample_rh_three_custom.py"),
+            ("bin", "splunk_ta_uccexample_rh_example_input_four.py"),
+            ("bin", "splunk_ta_uccexample_custom_rh.py"),
+            ("bin", "splunk_ta_uccexample_rh_oauth.py"),
+            ("bin", "splunk_ta_uccexample_rh_settings.py"),
+            ("bin", "test_alert.py"),
+            ("README", "alert_actions.conf.spec"),
+            ("README", "inputs.conf.spec"),
+            ("README", "splunk_ta_uccexample_account.conf.spec"),
+            ("README", "splunk_ta_uccexample_settings.conf.spec"),
+            ("metadata", "default.meta"),
+        ]
+        helpers.compare_file_content(
+            files_to_be_equal,
+            expected_folder,
+            actual_folder,
+        )
+        files_to_exist = [
+            ("static", "appIcon.png"),
+            ("static", "appIcon_2x.png"),
+            ("static", "appIconAlt.png"),
+            ("static", "appIconAlt_2x.png"),
+        ]
+        for f in files_to_exist:
+            expected_file_path = path.join(expected_folder, *f)
+            assert path.exists(expected_file_path)
diff --git a/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input.py b/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input.py
index b81e105d5..2a0f9aee9 100644
--- a/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input.py
+++ b/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input.py
@@ -1,7 +1,6 @@
 import json
 import logging
 import sys
-import traceback
 
 import import_declare_test
 from solnlib import conf_manager, log
@@ -98,11 +97,7 @@ def stream_events(self, inputs: smi.InputDefinition, event_writer: smi.EventWrit
                 )
                 log.modular_input_end(logger, normalized_input_name)
             except Exception as e:
-                logger.error(
-                    f"Exception raised while ingesting data for "
-                    f"demo_input: {e}. Traceback: "
-                    f"{traceback.format_exc()}"
-                )
+                log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
 
 
 if __name__ == "__main__":
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/README/splunk_ta_uccexample_account.conf.spec b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/README/splunk_ta_uccexample_account.conf.spec
index dc513ec51..6e906e88e 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/README/splunk_ta_uccexample_account.conf.spec
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/README/splunk_ta_uccexample_account.conf.spec
@@ -14,6 +14,8 @@ basic_oauth_text =
 client_id = 
 client_secret = 
 redirect_url = 
+endpoint_token = 
+endpoint_authorize = 
 oauth_oauth_text = 
 access_token = 
 refresh_token = 
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/appserver/static/js/build/globalConfig.json b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/appserver/static/js/build/globalConfig.json
index 752e047a4..0c0148ac7 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/appserver/static/js/build/globalConfig.json
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/appserver/static/js/build/globalConfig.json
@@ -176,6 +176,18 @@
                                         "label": "Redirect url",
                                         "field": "redirect_url",
                                         "help": "Copy and paste this URL into your app."
+                                    },
+                                    {
+                                        "oauth_field": "endpoint_token",
+                                        "label": "Token endpoint",
+                                        "field": "endpoint_token",
+                                        "help": "Put here endpoint used for token acqusition ie. login.salesforce.com"
+                                    },
+                                    {
+                                        "oauth_field": "endpoint_authorize",
+                                        "label": "Authorize endpoint",
+                                        "field": "endpoint_authorize",
+                                        "help": "Put here endpoint used for authorization ie. login.salesforce.com"
                                     }
                                 ],
                                 "auth_code_endpoint": "/services/oauth2/authorize",
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_account.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_account.py
index 2fd5e5dac..9d5b17c9d 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_account.py
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_account.py
@@ -120,6 +120,20 @@
         default=None,
         validator=None
     ), 
+    field.RestField(
+        'endpoint_token',
+        required=False,
+        encrypted=False,
+        default=None,
+        validator=None
+    ), 
+    field.RestField(
+        'endpoint_authorize',
+        required=False,
+        encrypted=False,
+        default=None,
+        validator=None
+    ), 
     field.RestField(
         'oauth_oauth_text',
         required=False,
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/default/data/ui/views/dashboard.xml b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/default/data/ui/views/dashboard.xml
index b5822d593..d571a84f9 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/default/data/ui/views/dashboard.xml
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/default/data/ui/views/dashboard.xml
@@ -31,11 +31,11 @@
       <chart>
         <search>
           <query>index=_internal source=*splunk_ta_uccexample* action=events_ingested
-| timechart avg(n_events) by sourcetype_ingested</query>
+| timechart sum(n_events) by sourcetype_ingested</query>
           <earliest>$log_time.earliest$</earliest>
           <latest>$log_time.latest$</latest>
         </search>
-        <option name="charting.chart">line</option>
+        <option name="charting.chart">column</option>
         <option name="charting.drilldown">none</option>
       </chart>
     </panel>
diff --git a/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json b/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json
index 102b67c94..1e645f86b 100644
--- a/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json
+++ b/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json
@@ -212,8 +212,9 @@
     "meta": {
         "name": "test_addon",
         "restRoot": "test_addon",
-        "version": "5.34.1Racdcfb2e",
+        "version": "5.36.2Ref7d7543",
         "displayName": "This is my add-on",
-        "schemaVersion": "0.0.3"
+        "schemaVersion": "0.0.3",
+        "_uccVersion": "5.36.2"
     }
 }
diff --git a/tests/testdata/test_addons/package_global_config_configuration/globalConfig.json b/tests/testdata/test_addons/package_global_config_configuration/globalConfig.json
index 13be07054..c30ad3aa8 100644
--- a/tests/testdata/test_addons/package_global_config_configuration/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_configuration/globalConfig.json
@@ -420,6 +420,7 @@
         "restRoot": "splunk_ta_uccexample",
         "version": "1.1.1",
         "displayName": "Splunk UCC test Add-on",
-        "schemaVersion": "0.0.3"
+        "schemaVersion": "0.0.3",
+        "_uccVersion": "5.36.2"
     }
 }
diff --git a/tests/testdata/test_addons/package_global_config_everything/globalConfig.json b/tests/testdata/test_addons/package_global_config_everything/globalConfig.json
index 0eefdc20f..646918be7 100644
--- a/tests/testdata/test_addons/package_global_config_everything/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_everything/globalConfig.json
@@ -5,9 +5,16 @@
                 {
                     "name": "account",
                     "warning": {
-                        "create": "Some warning for account text create",
-                        "edit": "Some warning for account text edit",
-                        "clone": "Some warning for account text clone"
+                        "create": {
+                            "message": "Some warning for account text create",
+                            "alwaysDisplay": true
+                        },
+                        "edit": {
+                            "message": "Some warning for account text edit"
+                        },
+                        "clone": {
+                            "message": "Some warning for account text clone"
+                        }
                     },
                     "table": {
                         "actions": [
@@ -190,6 +197,18 @@
                                         "field": "redirect_url",
                                         "help": "Copy and paste this URL into your app."
                                     },
+                                    {
+                                        "oauth_field": "endpoint_token",
+                                        "label": "Token endpoint",
+                                        "field": "endpoint_token",
+                                        "help": "Put here endpoint used for token acqusition ie. login.salesforce.com"
+                                    },
+                                    {
+                                        "oauth_field": "endpoint_authorize",
+                                        "label": "Authorize endpoint",
+                                        "field": "endpoint_authorize",
+                                        "help": "Put here endpoint used for authorization ie. login.salesforce.com"
+                                    },
                                     {
                                         "oauth_field": "oauth_some_text",
                                         "label": "Disabled on edit for oauth",
@@ -197,7 +216,8 @@
                                         "field": "oauth_oauth_text",
                                         "required": false,
                                         "options": {
-                                            "disableonEdit": true
+                                            "disableonEdit": true,
+                                            "enable": false
                                         }
                                     }
                                 ],
@@ -238,7 +258,9 @@
                 {
                     "name": "proxy",
                     "warning": {
-                        "config": "Some warning for proxy text config"
+                        "config": {
+                            "message": "Some warning for account text config"
+                        }
                     },
                     "entity": [
                         {
@@ -342,7 +364,9 @@
                 {
                     "name": "logging",
                     "warning": {
-                        "config": "Some logging for proxy text config"
+                        "config": {
+                            "message": "Some warning for account text config"
+                        }
                     },
                     "entity": [
                         {
@@ -482,9 +506,18 @@
                 {
                     "name": "example_input_one",
                     "warning": {
-                        "create": "Some warning for input text create",
-                        "edit": "Some warning for input text edit",
-                        "clone": "Some warning for input text clone"
+                        "create": {
+                            "message": "Some warning for account text create"
+                        },
+                        "edit": {
+                            "message": "Some warning for account text edit"
+                        },
+                        "clone": {
+                            "message": "Some warning for account text clone"
+                        },
+                        "delete": {
+                            "message": "Some warning for account text delete"
+                        }
                     },
                     "entity": [
                         {
@@ -1375,8 +1408,9 @@
     "meta": {
         "name": "Splunk_TA_UCCExample",
         "restRoot": "splunk_ta_uccexample",
-        "version": "5.35.1R7fe3d58d",
+        "version": "5.36.2Ref7d7543",
         "displayName": "Splunk UCC test Add-on",
-        "schemaVersion": "0.0.3"
+        "schemaVersion": "0.0.3",
+        "_uccVersion": "5.36.2"
     }
 }
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/.uccignore b/tests/testdata/test_addons/package_global_config_everything_uccignore/.uccignore
new file mode 100644
index 000000000..9ab92ea97
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/.uccignore
@@ -0,0 +1,4 @@
+**/**one.py
+
+bin/splunk_ta_uccexample_rh_example_input_two.py
+bin/wrong_pattern
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/LICENSES/Apache-2.0.txt b/tests/testdata/test_addons/package_global_config_everything_uccignore/LICENSES/Apache-2.0.txt
new file mode 100644
index 000000000..33195b0f8
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/LICENSES/Apache-2.0.txt
@@ -0,0 +1,1 @@
+dummy apache license
\ No newline at end of file
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/globalConfig.json b/tests/testdata/test_addons/package_global_config_everything_uccignore/globalConfig.json
new file mode 100644
index 000000000..646918be7
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/globalConfig.json
@@ -0,0 +1,1416 @@
+{
+    "pages": {
+        "configuration": {
+            "tabs": [
+                {
+                    "name": "account",
+                    "warning": {
+                        "create": {
+                            "message": "Some warning for account text create",
+                            "alwaysDisplay": true
+                        },
+                        "edit": {
+                            "message": "Some warning for account text edit"
+                        },
+                        "clone": {
+                            "message": "Some warning for account text clone"
+                        }
+                    },
+                    "table": {
+                        "actions": [
+                            "edit",
+                            "delete",
+                            "clone"
+                        ],
+                        "header": [
+                            {
+                                "label": "Name",
+                                "field": "name"
+                            },
+                            {
+                                "label": "Auth Type",
+                                "field": "auth_type"
+                            }
+                        ]
+                    },
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of ID should be between 1 and 50",
+                                    "minLength": 1,
+                                    "maxLength": 50
+                                },
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                }
+                            ],
+                            "field": "name",
+                            "help": "Enter a unique name for this account.",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Example Environment",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "login.example.com",
+                                        "label": "Value1"
+                                    },
+                                    {
+                                        "value": "test.example.com",
+                                        "label": "Value2"
+                                    },
+                                    {
+                                        "value": "other",
+                                        "label": "Other"
+                                    }
+                                ],
+                                "display": true
+                            },
+                            "help": "",
+                            "field": "custom_endpoint",
+                            "defaultValue": "login.example.com",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Endpoint URL",
+                            "help": "Enter the endpoint URL.",
+                            "field": "endpoint",
+                            "options": {
+                                "display": false,
+                                "requiredWhenVisible": true
+                            }
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Example Checkbox",
+                            "field": "account_checkbox",
+                            "help": "This is an example checkbox for the account entity"
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Example Radio",
+                            "field": "account_radio",
+                            "defaultValue": "yes",
+                            "help": "This is an example radio button for the account entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": true
+                            }
+                        },
+                        {
+                            "type": "multipleSelect",
+                            "label": "Example Multiple Select",
+                            "field": "account_multiple_select",
+                            "help": "This is an example multipleSelect for account entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "one",
+                                        "label": "Option One"
+                                    },
+                                    {
+                                        "value": "two",
+                                        "label": "Option Two"
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "type": "oauth",
+                            "field": "oauth",
+                            "label": "Not used",
+                            "options": {
+                                "auth_type": [
+                                    "basic",
+                                    "oauth"
+                                ],
+                                "basic": [
+                                    {
+                                        "oauth_field": "username",
+                                        "label": "Username",
+                                        "help": "Enter the username for this account.",
+                                        "field": "username"
+                                    },
+                                    {
+                                        "oauth_field": "password",
+                                        "label": "Password",
+                                        "encrypted": true,
+                                        "help": "Enter the password for this account.",
+                                        "field": "password"
+                                    },
+                                    {
+                                        "oauth_field": "security_token",
+                                        "label": "Security Token",
+                                        "encrypted": true,
+                                        "help": "Enter the security token.",
+                                        "field": "token"
+                                    },
+                                    {
+                                        "oauth_field": "some_text",
+                                        "label": "Disabled on edit for oauth",
+                                        "help": "Enter text for field disabled on edit",
+                                        "field": "basic_oauth_text",
+                                        "required": false,
+                                        "options": {
+                                            "disableonEdit": true
+                                        }
+                                    }
+                                ],
+                                "oauth": [
+                                    {
+                                        "oauth_field": "client_id",
+                                        "label": "Client Id",
+                                        "field": "client_id",
+                                        "help": "Enter the Client Id for this account."
+                                    },
+                                    {
+                                        "oauth_field": "client_secret",
+                                        "label": "Client Secret",
+                                        "field": "client_secret",
+                                        "encrypted": true,
+                                        "help": "Enter the Client Secret key for this account."
+                                    },
+                                    {
+                                        "oauth_field": "redirect_url",
+                                        "label": "Redirect url",
+                                        "field": "redirect_url",
+                                        "help": "Copy and paste this URL into your app."
+                                    },
+                                    {
+                                        "oauth_field": "endpoint_token",
+                                        "label": "Token endpoint",
+                                        "field": "endpoint_token",
+                                        "help": "Put here endpoint used for token acqusition ie. login.salesforce.com"
+                                    },
+                                    {
+                                        "oauth_field": "endpoint_authorize",
+                                        "label": "Authorize endpoint",
+                                        "field": "endpoint_authorize",
+                                        "help": "Put here endpoint used for authorization ie. login.salesforce.com"
+                                    },
+                                    {
+                                        "oauth_field": "oauth_some_text",
+                                        "label": "Disabled on edit for oauth",
+                                        "help": "Enter text for field disabled on edit",
+                                        "field": "oauth_oauth_text",
+                                        "required": false,
+                                        "options": {
+                                            "disableonEdit": true,
+                                            "enable": false
+                                        }
+                                    }
+                                ],
+                                "auth_code_endpoint": "/services/oauth2/authorize",
+                                "access_token_endpoint": "/services/oauth2/token",
+                                "oauth_timeout": 30,
+                                "oauth_state_enabled": false
+                            }
+                        },
+                        {
+                            "field": "example_help_link",
+                            "label": "",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "Help Link",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        },
+                        {
+                            "field": "config1_help_link",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "Add-on configuration documentation",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        },
+                        {
+                            "field": "config2_help_link",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "SSL configuration documentation",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        }
+                    ],
+                    "title": "Account"
+                },
+                {
+                    "name": "proxy",
+                    "warning": {
+                        "config": {
+                            "message": "Some warning for account text config"
+                        }
+                    },
+                    "entity": [
+                        {
+                            "type": "checkbox",
+                            "label": "Enable",
+                            "field": "proxy_enabled"
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Proxy Type",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "http",
+                                        "label": "http"
+                                    },
+                                    {
+                                        "value": "socks4",
+                                        "label": "socks4"
+                                    },
+                                    {
+                                        "value": "socks5",
+                                        "label": "socks5"
+                                    }
+                                ]
+                            },
+                            "defaultValue": "http",
+                            "field": "proxy_type"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Host",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max host length is 4096",
+                                    "minLength": 0,
+                                    "maxLength": 4096
+                                },
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Proxy Host should not have special characters",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                }
+                            ],
+                            "field": "proxy_url"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Port",
+                            "validators": [
+                                {
+                                    "type": "number",
+                                    "range": [
+                                        1,
+                                        65535
+                                    ]
+                                }
+                            ],
+                            "field": "proxy_port"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Username",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of username is 50",
+                                    "minLength": 0,
+                                    "maxLength": 50
+                                }
+                            ],
+                            "field": "proxy_username"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Password",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of password is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "encrypted": true,
+                            "field": "proxy_password"
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Reverse DNS resolution",
+                            "field": "proxy_rdns"
+                        }
+                    ],
+                    "options": {
+                        "saveValidator": "function(formData) { if(!formData.proxy_enabled || formData.proxy_enabled === '0') {return true; } if(!formData.proxy_url) { return 'Proxy Host can not be empty'; } if(!formData.proxy_port) { return 'Proxy Port can not be empty'; } return true; }"
+                    },
+                    "title": "Proxy"
+                },
+                {
+                    "name": "logging",
+                    "warning": {
+                        "config": {
+                            "message": "Some warning for account text config"
+                        }
+                    },
+                    "entity": [
+                        {
+                            "type": "singleSelect",
+                            "label": "Log level",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "DEBUG",
+                                        "label": "DEBUG"
+                                    },
+                                    {
+                                        "value": "INFO",
+                                        "label": "INFO"
+                                    },
+                                    {
+                                        "value": "WARNING",
+                                        "label": "WARNING"
+                                    },
+                                    {
+                                        "value": "ERROR",
+                                        "label": "ERROR"
+                                    },
+                                    {
+                                        "value": "CRITICAL",
+                                        "label": "CRITICAL"
+                                    }
+                                ]
+                            },
+                            "defaultValue": "INFO",
+                            "field": "loglevel"
+                        }
+                    ],
+                    "title": "Logging"
+                },
+                {
+                    "name": "custom_abc",
+                    "title": "Customized tab",
+                    "entity": [
+                        {
+                            "field": "testString",
+                            "label": "Test String",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "maxLength": 10,
+                                    "minLength": 5
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testNumber",
+                            "label": "Test Number",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "number",
+                                    "range": [
+                                        1,
+                                        10
+                                    ]
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testRegex",
+                            "label": "Test Regex",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "pattern": "^\\w+$",
+                                    "errorMsg": "Characters of Name should match regex ^\\w+$ ."
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testEmail",
+                            "label": "Test Email",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "email"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testIpv4",
+                            "label": "Test Ipv4",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "ipv4"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testDate",
+                            "label": "Test Date",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "date"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testUrl",
+                            "label": "Test Url",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "url"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ],
+            "title": "Configuration",
+            "description": "Set up your add-on",
+            "subDescription": {
+                "text": "Configuration page - Ingesting data from to Splunk Cloud? Have you tried the new Splunk Data Manager yet?\nData Manager makes AWS data ingestion simpler, more automated and centrally managed for you, while co-existing with AWS and/or Kinesis TAs.\nRead our [[blogPost]] to learn more about Data Manager and it's availability on your Splunk Cloud instance.",
+                "links": [
+                    {
+                        "slug": "blogPost",
+                        "link": "https://splk.it/31oy2b2",
+                        "linkText": "blog post"
+                    }
+                ]
+            }
+        },
+        "inputs": {
+            "services": [
+                {
+                    "name": "example_input_one",
+                    "warning": {
+                        "create": {
+                            "message": "Some warning for account text create"
+                        },
+                        "edit": {
+                            "message": "Some warning for account text edit"
+                        },
+                        "clone": {
+                            "message": "Some warning for account text clone"
+                        },
+                        "delete": {
+                            "message": "Some warning for account text delete"
+                        }
+                    },
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Input Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                },
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of input name should be between 1 and 100",
+                                    "minLength": 1,
+                                    "maxLength": 100
+                                }
+                            ],
+                            "field": "name",
+                            "help": "A unique name for the data input.",
+                            "required": true
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Example Checkbox",
+                            "field": "input_one_checkbox",
+                            "help": "This is an example checkbox for the input one entity",
+                            "defaultValue": true
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Example Radio",
+                            "field": "input_one_radio",
+                            "defaultValue": "yes",
+                            "help": "This is an example radio button for the input one entity",
+                            "required": false,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": true
+                            }
+                        },
+                        {
+                            "field": "singleSelectTest",
+                            "label": "Single Select Group Test",
+                            "type": "singleSelect",
+                            "options": {
+                                "createSearchChoice": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "label": "Group1",
+                                        "children": [
+                                            {
+                                                "value": "one",
+                                                "label": "One"
+                                            },
+                                            {
+                                                "value": "two",
+                                                "label": "Two"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "label": "Group2",
+                                        "children": [
+                                            {
+                                                "value": "three",
+                                                "label": "Three"
+                                            },
+                                            {
+                                                "value": "four",
+                                                "label": "Four"
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "field": "multipleSelectTest",
+                            "label": "Multiple Select Test",
+                            "type": "multipleSelect",
+                            "defaultValue": "a|b",
+                            "options": {
+                                "delimiter": "|",
+                                "items": [
+                                    {
+                                        "value": "a",
+                                        "label": "A"
+                                    },
+                                    {
+                                        "value": "b",
+                                        "label": "B"
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "type": "text",
+                            "label": "Interval",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Interval must be an integer.",
+                                    "pattern": "^\\-[1-9]\\d*$|^\\d*$"
+                                }
+                            ],
+                            "field": "interval",
+                            "help": "Time interval of the data input, in seconds.",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Index",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of index name should be between 1 and 80.",
+                                    "minLength": 1,
+                                    "maxLength": 80
+                                }
+                            ],
+                            "defaultValue": "default",
+                            "options": {
+                                "endpointUrl": "data/indexes",
+                                "denyList": "^_.*$",
+                                "createSearchChoice": true
+                            },
+                            "field": "index",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Example Account",
+                            "options": {
+                                "referenceName": "account"
+                            },
+                            "help": "",
+                            "field": "account",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Object",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of text input is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "field": "object",
+                            "help": "The name of the object to query for.",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Object Fields",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of text input is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "field": "object_fields",
+                            "help": "Object fields from which to collect data. Delimit multiple fields using a comma.",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Order By",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of text input is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "defaultValue": "LastModifiedDate",
+                            "field": "order_by",
+                            "help": "The datetime field by which to query results in ascending order for indexing.",
+                            "required": true
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Use existing data input?",
+                            "field": "use_existing_checkpoint",
+                            "defaultValue": "yes",
+                            "help": "Data input already exists. Select `No` if you want to reset the data collection.",
+                            "required": false,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": false
+                            }
+                        },
+                        {
+                            "type": "text",
+                            "label": "Query Start Date",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Invalid date and time format",
+                                    "pattern": "^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}z)?$"
+                                }
+                            ],
+                            "field": "start_date",
+                            "help": "The datetime after which to query and index records, in this format: \"YYYY-MM-DDThh:mm:ss.000z\".\nDefaults to 90 days earlier from now.",
+                            "tooltip": "Changing this parameter may result in gaps or duplication in data collection.",
+                            "required": false
+                        },
+                        {
+                            "type": "text",
+                            "label": "Limit",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of text input is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "defaultValue": "1000",
+                            "field": "limit",
+                            "help": "The maximum number of results returned by the query.",
+                            "required": false
+                        },
+                        {
+                            "type": "textarea",
+                            "label": "Example Textarea Field",
+                            "field": "example_textarea_field",
+                            "help": "Help message",
+                            "options": {
+                                "rowsMin": 3,
+                                "rowsMax": 15
+                            },
+                            "required": true
+                        },
+                        {
+                            "field": "example_help_link",
+                            "label": "",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "Help Link",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        }
+                    ],
+                    "title": "Example Input One"
+                },
+                {
+                    "name": "example_input_two",
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Input Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                },
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of input name should be between 1 and 100",
+                                    "minLength": 1,
+                                    "maxLength": 100
+                                }
+                            ],
+                            "field": "name",
+                            "help": "A unique name for the data input.",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Interval",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Interval must be an integer.",
+                                    "pattern": "^\\-[1-9]\\d*$|^\\d*$"
+                                }
+                            ],
+                            "field": "interval",
+                            "help": "Time interval of the data input, in seconds .",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Index",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of index name should be between 1 and 80.",
+                                    "minLength": 1,
+                                    "maxLength": 80
+                                }
+                            ],
+                            "defaultValue": "default",
+                            "options": {
+                                "endpointUrl": "data/indexes",
+                                "denyList": "^_.*$",
+                                "createSearchChoice": true
+                            },
+                            "field": "index",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Example Account",
+                            "options": {
+                                "referenceName": "account"
+                            },
+                            "help": "",
+                            "field": "account",
+                            "required": true
+                        },
+                        {
+                            "type": "multipleSelect",
+                            "label": "Example Multiple Select",
+                            "field": "input_two_multiple_select",
+                            "help": "This is an example multipleSelect for input two entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "one",
+                                        "label": "Option One"
+                                    },
+                                    {
+                                        "value": "two",
+                                        "label": "Option Two"
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Example Checkbox",
+                            "field": "input_two_checkbox",
+                            "help": "This is an example checkbox for the input two entity"
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Example Radio",
+                            "field": "input_two_radio",
+                            "help": "This is an example radio button for the input two entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": true
+                            }
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Use existing data input?",
+                            "field": "use_existing_checkpoint",
+                            "defaultValue": "yes",
+                            "help": "Data input already exists. Select `No` if you want to reset the data collection.",
+                            "required": false,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": false
+                            }
+                        },
+                        {
+                            "type": "text",
+                            "label": "Query Start Date",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Invalid date and time format",
+                                    "pattern": "^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}z)?$"
+                                }
+                            ],
+                            "field": "start_date",
+                            "help": "The date and time, in \"YYYY-MM-DDThh:mm:ss.000z\" format, after which to query and index records. \nThe default is 90 days before today.",
+                            "tooltip": "Changing this parameter may result in gaps or duplication in data collection.",
+                            "required": false
+                        },
+                        {
+                            "field": "example_help_link",
+                            "label": "",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "Help Link",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        },
+                        {
+                            "field": "apis",
+                            "label": "APIs/Interval (in seconds)",
+                            "type": "checkboxGroup",
+                            "options": {
+                                "groups": [
+                                    {
+                                        "label": "EC2",
+                                        "options": {
+                                            "isExpandable": true
+                                        },
+                                        "fields": [
+                                            "ec2_volumes",
+                                            "ec2_instances",
+                                            "ec2_reserved_instances",
+                                            "ebs_snapshots",
+                                            "rds_instances",
+                                            "rds_reserved_instances",
+                                            "ec2_key_pairs",
+                                            "ec2_security_groups",
+                                            "ec2_images",
+                                            "ec2_addresses"
+                                        ]
+                                    },
+                                    {
+                                        "label": "ELB",
+                                        "options": {
+                                            "isExpandable": true
+                                        },
+                                        "fields": [
+                                            "classic_load_balancers",
+                                            "application_load_balancers"
+                                        ]
+                                    },
+                                    {
+                                        "label": "VPC",
+                                        "options": {
+                                            "isExpandable": true
+                                        },
+                                        "fields": [
+                                            "vpcs",
+                                            "vpc_network_acls",
+                                            "vpc_subnets"
+                                        ]
+                                    }
+                                ],
+                                "rows": [
+                                    {
+                                        "field": "ec2_volumes",
+                                        "checkbox": {
+                                            "defaultValue": true
+                                        },
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_instances",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_reserved_instances",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ebs_snapshots",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "rds_instances",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "rds_reserved_instances",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_key_pairs",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_security_groups",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_images",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "ec2_addresses",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "classic_load_balancers",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "application_load_balancers",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "vpcs",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "vpc_network_acls",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    },
+                                    {
+                                        "field": "vpc_subnets",
+                                        "input": {
+                                            "defaultValue": 3600,
+                                            "required": true
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    ],
+                    "title": "Example Input Two"
+                },
+                {
+                    "name": "example_input_three",
+                    "restHandlerName": "splunk_ta_uccexample_rh_three_custom",
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Input Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                },
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of input name should be between 1 and 100",
+                                    "minLength": 1,
+                                    "maxLength": 100
+                                }
+                            ],
+                            "field": "name",
+                            "help": "A unique name for the data input.",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Interval",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Interval must be an integer.",
+                                    "pattern": "^\\-[1-9]\\d*$|^\\d*$"
+                                }
+                            ],
+                            "field": "interval",
+                            "help": "Time interval of the data input, in seconds.",
+                            "required": true
+                        }
+                    ],
+                    "title": "Example Input Three"
+                },
+                {
+                    "name": "example_input_four",
+                    "restHandlerModule": "splunk_ta_uccexample_custom_rh",
+                    "restHandlerClass": "CustomRestHandler",
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Input Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                },
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of input name should be between 1 and 100",
+                                    "minLength": 1,
+                                    "maxLength": 100
+                                }
+                            ],
+                            "field": "name",
+                            "help": "A unique name for the data input.",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Interval",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Interval must be an integer.",
+                                    "pattern": "^\\-[1-9]\\d*$|^\\d*$"
+                                }
+                            ],
+                            "field": "interval",
+                            "help": "Time interval of the data input, in seconds.",
+                            "required": true
+                        }
+                    ],
+                    "title": "Example Input Four"
+                }
+            ],
+            "title": "Inputs",
+            "description": "Manage your data inputs",
+            "subDescription": {
+                "text": "Input page - Ingesting data from to Splunk Cloud? Have you tried the new Splunk Data Manager yet?\nData Manager makes AWS data ingestion simpler, more automated and centrally managed for you, while co-existing with AWS and/or Kinesis TAs.\nRead our [[blogPost]] to learn more about Data Manager and it's availability on your Splunk Cloud instance.",
+                "links": [
+                    {
+                        "slug": "blogPost",
+                        "link": "https://splk.it/31oy2b2",
+                        "linkText": "blog post"
+                    }
+                ]
+            },
+            "table": {
+                "actions": [
+                    "edit",
+                    "enable",
+                    "delete",
+                    "clone"
+                ],
+                "header": [
+                    {
+                        "label": "Name",
+                        "field": "name"
+                    },
+                    {
+                        "label": "Account",
+                        "field": "account"
+                    },
+                    {
+                        "label": "Interval",
+                        "field": "interval"
+                    },
+                    {
+                        "label": "Index",
+                        "field": "index"
+                    },
+                    {
+                        "label": "Status",
+                        "field": "disabled"
+                    }
+                ],
+                "moreInfo": [
+                    {
+                        "label": "Name",
+                        "field": "name"
+                    },
+                    {
+                        "label": "Interval",
+                        "field": "interval"
+                    },
+                    {
+                        "label": "Index",
+                        "field": "index"
+                    },
+                    {
+                        "label": "Status",
+                        "field": "disabled",
+                        "mapping": {
+                            "true": "Disabled",
+                            "false": "Enabled"
+                        }
+                    },
+                    {
+                        "label": "Example Account",
+                        "field": "account"
+                    },
+                    {
+                        "label": "Object",
+                        "field": "object"
+                    },
+                    {
+                        "label": "Object Fields",
+                        "field": "object_fields"
+                    },
+                    {
+                        "label": "Order By",
+                        "field": "order_by"
+                    },
+                    {
+                        "label": "Query Start Date",
+                        "field": "start_date"
+                    },
+                    {
+                        "label": "Limit",
+                        "field": "limit"
+                    }
+                ]
+            }
+        },
+        "dashboard": {
+            "panels": [
+                {
+                    "name": "addon_version"
+                },
+                {
+                    "name": "events_ingested_by_sourcetype"
+                },
+                {
+                    "name": "errors_in_the_addon"
+                }
+            ]
+        }
+    },
+    "alerts": [
+        {
+            "name": "test_alert",
+            "label": "Test Alert",
+            "description": "Description for test Alert Action",
+            "activeResponse": {
+                "task": [
+                    "Create",
+                    "Update"
+                ],
+                "supportsAdhoc": true,
+                "subject": [
+                    "endpoint"
+                ],
+                "category": [
+                    "Information Conveyance",
+                    "Information Portrayal"
+                ],
+                "technology": [
+                    {
+                        "version": [
+                            "1.0.0"
+                        ],
+                        "product": "Test Incident Update",
+                        "vendor": "Splunk"
+                    }
+                ],
+                "drilldownUri": "search?q=search%20index%3D\"_internal\"&earliest=0&latest=",
+                "sourcetype": "test:incident"
+            },
+            "entity": [
+                {
+                    "type": "text",
+                    "label": "Name",
+                    "field": "name",
+                    "defaultValue": "xyz",
+                    "required": true,
+                    "help": "Please enter your name"
+                },
+                {
+                    "type": "checkbox",
+                    "label": "All Incidents",
+                    "field": "all_incidents",
+                    "defaultValue": 0,
+                    "required": false,
+                    "help": "Tick if you want to update all incidents/problems"
+                },
+                {
+                    "type": "singleSelect",
+                    "label": "Table List",
+                    "field": "table_list",
+                    "options": {
+                        "items": [
+                            {
+                                "value": "Incident",
+                                "label": "incident"
+                            },
+                            {
+                                "value": "Problem",
+                                "label": "problem"
+                            }
+                        ]
+                    },
+                    "help": "Please select the table",
+                    "required": false,
+                    "defaultValue": "problem"
+                },
+                {
+                    "type": "radio",
+                    "label": "Action:",
+                    "field": "action",
+                    "options": {
+                        "items": [
+                            {
+                                "value": "Update",
+                                "label": "update"
+                            },
+                            {
+                                "value": "Delete",
+                                "label": "delete"
+                            }
+                        ]
+                    },
+                    "help": "Select the action you want to perform",
+                    "required": true,
+                    "defaultValue": "two"
+                },
+                {
+                    "type": "singleSelectSplunkSearch",
+                    "label": "Select Account",
+                    "field": "account",
+                    "search": "| rest /servicesNS/nobody/Splunk_TA_UCCExample/splunk_ta_uccexample_account | dedup title",
+                    "options": {
+                        "items": [
+                            {
+                                "label": "earliest",
+                                "value": "-4@h"
+                            },
+                            {
+                                "label": "latest",
+                                "value": "now"
+                            }
+                        ]
+                    },
+                    "valueField": "title",
+                    "labelField": "title",
+                    "help": "Select the account from the dropdown",
+                    "required": true
+                }
+            ]
+        }
+    ],
+    "meta": {
+        "name": "Splunk_TA_UCCExample",
+        "restRoot": "splunk_ta_uccexample",
+        "version": "5.36.2Ref7d7543",
+        "displayName": "Splunk UCC test Add-on",
+        "schemaVersion": "0.0.3",
+        "_uccVersion": "5.36.2"
+    }
+}
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/README.txt b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/README.txt
new file mode 100644
index 000000000..530a9e548
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/README.txt
@@ -0,0 +1,1 @@
+Just a readme
\ No newline at end of file
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/app.manifest b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/app.manifest
new file mode 100644
index 000000000..a99395790
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/app.manifest
@@ -0,0 +1,54 @@
+{
+  "schemaVersion": "2.0.0",
+  "info": {
+    "title": "Splunk Add-on for UCC Example",
+    "id": {
+      "group": null,
+      "name": "Splunk_TA_UCCExample",
+      "version": "7.0.1"
+    },
+    "author": [
+      {
+        "name": "Splunk Inc.",
+        "email": null,
+        "company": null
+      }
+    ],
+    "releaseDate": null,
+    "description": "Splunk Add-on for UCC Example",
+    "classification": {
+      "intendedAudience": null,
+      "categories": [],
+      "developmentStatus": null
+    },
+    "commonInformationModels": null,
+    "license": {
+      "name": null,
+      "text": "LICENSES/Apache-2.0.txt",
+      "uri": null
+    },
+    "privacyPolicy": {
+      "name": null,
+      "text": null,
+      "uri": null
+    },
+    "releaseNotes": {
+      "name": null,
+      "text": "./README.txt",
+      "uri": null
+    }
+  },
+  "dependencies": null,
+  "tasks": null,
+  "inputGroups": null,
+  "incompatibleApps": null,
+  "platformRequirements": null,
+  "supportedDeployments": [
+    "_standalone",
+    "_distributed"
+  ],
+  "targetWorkloads": [
+    "_search_heads",
+    "_indexers"
+  ]
+}
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_custom_rh.py b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_custom_rh.py
new file mode 100644
index 000000000..77a709101
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_custom_rh.py
@@ -0,0 +1,20 @@
+import import_declare_test
+
+from splunktaucclib.rest_handler.admin_external import AdminExternalHandler
+
+
+class CustomRestHandler(AdminExternalHandler):
+    def __init__(self, *args, **kwargs):
+        AdminExternalHandler.__init__(self, *args, **kwargs)
+
+    def handleList(self, confInfo):
+        AdminExternalHandler.handleList(self, confInfo)
+
+    def handleEdit(self, confInfo):
+        AdminExternalHandler.handleEdit(self, confInfo)
+
+    def handleCreate(self, confInfo):
+        AdminExternalHandler.handleCreate(self, confInfo)
+
+    def handleRemove(self, confInfo):
+        AdminExternalHandler.handleRemove(self, confInfo)
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_rh_three_custom.py b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_rh_three_custom.py
new file mode 100644
index 000000000..396a11231
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/bin/splunk_ta_uccexample_rh_three_custom.py
@@ -0,0 +1,49 @@
+import import_declare_test
+
+from splunktaucclib.rest_handler.endpoint import (
+    field,
+    validator,
+    RestModel,
+    DataInputModel,
+)
+from splunktaucclib.rest_handler import admin_external, util
+from splunktaucclib.rest_handler.admin_external import AdminExternalHandler
+import logging
+
+util.remove_http_proxy_env_vars()
+
+
+fields = [
+    field.RestField(
+        'interval',
+        required=True,
+        encrypted=False,
+        default=None,
+        validator=validator.Pattern(
+            regex=r"""^\-[1-9]\d*$|^\d*$""",
+        )
+    ),
+
+    field.RestField(
+        'disabled',
+        required=False,
+        validator=None
+    )
+
+]
+model = RestModel(fields, name=None)
+
+
+
+endpoint = DataInputModel(
+    'example_input_three',
+    model,
+)
+
+
+if __name__ == '__main__':
+    logging.getLogger().addHandler(logging.NullHandler())
+    admin_external.handle(
+        endpoint,
+        handler=AdminExternalHandler,
+    )
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/eventtypes.conf b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/eventtypes.conf
new file mode 100644
index 000000000..6e6b4fcdd
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/eventtypes.conf
@@ -0,0 +1,4 @@
+
+# Just something
+[UCC_NOT_GENERATED]
+search = index=_internal sourcetype=splunkd
\ No newline at end of file
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/tags.conf b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/tags.conf
new file mode 100644
index 000000000..4c63aaf25
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/default/tags.conf
@@ -0,0 +1,4 @@
+
+[eventtype=UCC_NOT_GENERATED]
+notalert = enabled
+
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/lib/requirements.txt b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/lib/requirements.txt
new file mode 100644
index 000000000..4e63a1a57
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/lib/requirements.txt
@@ -0,0 +1,1 @@
+splunktaucclib
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon.png b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon.png
new file mode 100644
index 000000000..88f67e725
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon.png differ
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt.png b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt.png
new file mode 100644
index 000000000..88f67e725
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt.png differ
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt_2x.png b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt_2x.png
new file mode 100644
index 000000000..c638b3f15
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIconAlt_2x.png differ
diff --git a/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon_2x.png b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon_2x.png
new file mode 100644
index 000000000..c638b3f15
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_everything_uccignore/package/static/appIcon_2x.png differ
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/globalConfig.json b/tests/testdata/test_addons/package_global_config_multi_input/globalConfig.json
new file mode 100644
index 000000000..996d556b3
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_multi_input/globalConfig.json
@@ -0,0 +1,473 @@
+{
+    "pages": {
+        "configuration": {
+            "tabs": [
+                {
+                    "name": "account",
+                    "table": {
+                        "actions": [
+                            "edit",
+                            "delete",
+                            "clone"
+                        ],
+                        "header": [
+                            {
+                                "label": "Name",
+                                "field": "name"
+                            },
+                            {
+                                "label": "Auth Type",
+                                "field": "auth_type"
+                            }
+                        ]
+                    },
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Length of ID should be between 1 and 50",
+                                    "minLength": 1,
+                                    "maxLength": 50
+                                },
+                                {
+                                    "type": "regex",
+                                    "errorMsg": "Name must begin with a letter and consist exclusively of alphanumeric characters and underscores.",
+                                    "pattern": "^[a-zA-Z]\\w*$"
+                                }
+                            ],
+                            "field": "name",
+                            "help": "Enter a unique name for this account.",
+                            "required": true
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Example Environment",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "login.example.com",
+                                        "label": "Value1"
+                                    },
+                                    {
+                                        "value": "test.example.com",
+                                        "label": "Value2"
+                                    },
+                                    {
+                                        "value": "other",
+                                        "label": "Other"
+                                    }
+                                ],
+                                "display": true
+                            },
+                            "help": "",
+                            "field": "custom_endpoint",
+                            "defaultValue": "login.example.com",
+                            "required": true
+                        },
+                        {
+                            "type": "text",
+                            "label": "Endpoint URL",
+                            "help": "Enter the endpoint URL.",
+                            "field": "endpoint",
+                            "options": {
+                                "display": false
+                            }
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Example Checkbox",
+                            "field": "account_checkbox",
+                            "help": "This is an example checkbox for the account entity"
+                        },
+                        {
+                            "type": "radio",
+                            "label": "Example Radio",
+                            "field": "account_radio",
+                            "defaultValue": "yes",
+                            "help": "This is an example radio button for the account entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "yes",
+                                        "label": "Yes"
+                                    },
+                                    {
+                                        "value": "no",
+                                        "label": "No"
+                                    }
+                                ],
+                                "display": true
+                            }
+                        },
+                        {
+                            "type": "multipleSelect",
+                            "label": "Example Multiple Select",
+                            "field": "account_multiple_select",
+                            "help": "This is an example multipleSelect for account entity",
+                            "required": true,
+                            "options": {
+                                "items": [
+                                    {
+                                        "value": "one",
+                                        "label": "Option One"
+                                    },
+                                    {
+                                        "value": "two",
+                                        "label": "Option Two"
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "type": "oauth",
+                            "field": "oauth",
+                            "label": "Not used",
+                            "options": {
+                                "auth_type": [
+                                    "basic",
+                                    "oauth"
+                                ],
+                                "basic": [
+                                    {
+                                        "oauth_field": "username",
+                                        "label": "Username",
+                                        "help": "Enter the username for this account.",
+                                        "field": "username"
+                                    },
+                                    {
+                                        "oauth_field": "password",
+                                        "label": "Password",
+                                        "encrypted": true,
+                                        "help": "Enter the password for this account.",
+                                        "field": "password"
+                                    },
+                                    {
+                                        "oauth_field": "security_token",
+                                        "label": "Security Token",
+                                        "encrypted": true,
+                                        "help": "Enter the security token.",
+                                        "field": "token"
+                                    }
+                                ],
+                                "oauth": [
+                                    {
+                                        "oauth_field": "client_id",
+                                        "label": "Client Id",
+                                        "field": "client_id",
+                                        "help": "Enter the Client Id for this account."
+                                    },
+                                    {
+                                        "oauth_field": "client_secret",
+                                        "label": "Client Secret",
+                                        "field": "client_secret",
+                                        "encrypted": true,
+                                        "help": "Enter the Client Secret key for this account."
+                                    },
+                                    {
+                                        "oauth_field": "redirect_url",
+                                        "label": "Redirect url",
+                                        "field": "redirect_url",
+                                        "help": "Copy and paste this URL into your app."
+                                    }
+                                ],
+                                "auth_code_endpoint": "/services/oauth2/authorize",
+                                "access_token_endpoint": "/services/oauth2/token",
+                                "oauth_timeout": 30,
+                                "oauth_state_enabled": false
+                            }
+                        },
+                        {
+                            "field": "example_help_link",
+                            "label": "",
+                            "type": "helpLink",
+                            "options": {
+                                "text": "Help Link",
+                                "link": "https://docs.splunk.com/Documentation"
+                            }
+                        }
+                    ],
+                    "title": "Account"
+                },
+                {
+                    "name": "proxy",
+                    "entity": [
+                        {
+                            "type": "checkbox",
+                            "label": "Enable",
+                            "field": "proxy_enabled"
+                        },
+                        {
+                            "type": "singleSelect",
+                            "label": "Proxy Type",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "http",
+                                        "label": "http"
+                                    },
+                                    {
+                                        "value": "socks4",
+                                        "label": "socks4"
+                                    },
+                                    {
+                                        "value": "socks5",
+                                        "label": "socks5"
+                                    }
+                                ]
+                            },
+                            "defaultValue": "http",
+                            "field": "proxy_type"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Host",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max host length is 4096",
+                                    "minLength": 0,
+                                    "maxLength": 4096
+                                }
+                            ],
+                            "field": "proxy_url"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Port",
+                            "validators": [
+                                {
+                                    "type": "number",
+                                    "range": [
+                                        1,
+                                        65535
+                                    ]
+                                }
+                            ],
+                            "field": "proxy_port"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Username",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of username is 50",
+                                    "minLength": 0,
+                                    "maxLength": 50
+                                }
+                            ],
+                            "field": "proxy_username"
+                        },
+                        {
+                            "type": "text",
+                            "label": "Password",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "errorMsg": "Max length of password is 8192",
+                                    "minLength": 0,
+                                    "maxLength": 8192
+                                }
+                            ],
+                            "encrypted": true,
+                            "field": "proxy_password"
+                        },
+                        {
+                            "type": "checkbox",
+                            "label": "Reverse DNS resolution",
+                            "field": "proxy_rdns"
+                        }
+                    ],
+                    "options": {
+                        "saveValidator": "function(formData) { if(!formData.proxy_enabled || formData.proxy_enabled === '0') {return true; } if(!formData.proxy_url) { return 'Proxy Host can not be empty'; } if(!formData.proxy_port) { return 'Proxy Port can not be empty'; } return true; }"
+                    },
+                    "title": "Proxy"
+                },
+                {
+                    "name": "logging",
+                    "entity": [
+                        {
+                            "type": "singleSelect",
+                            "label": "Log level",
+                            "options": {
+                                "disableSearch": true,
+                                "autoCompleteFields": [
+                                    {
+                                        "value": "DEBUG",
+                                        "label": "DEBUG"
+                                    },
+                                    {
+                                        "value": "INFO",
+                                        "label": "INFO"
+                                    },
+                                    {
+                                        "value": "WARNING",
+                                        "label": "WARNING"
+                                    },
+                                    {
+                                        "value": "ERROR",
+                                        "label": "ERROR"
+                                    },
+                                    {
+                                        "value": "CRITICAL",
+                                        "label": "CRITICAL"
+                                    }
+                                ]
+                            },
+                            "defaultValue": "INFO",
+                            "field": "loglevel"
+                        }
+                    ],
+                    "title": "Logging"
+                },
+                {
+                    "name": "custom_abc",
+                    "title": "Customized tab",
+                    "entity": [
+                        {
+                            "field": "testString",
+                            "label": "Test String",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "string",
+                                    "maxLength": 10,
+                                    "minLength": 5
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testNumber",
+                            "label": "Test number",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "number",
+                                    "range": [
+                                        1,
+                                        10
+                                    ]
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testRegex",
+                            "label": "Test regex",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "regex",
+                                    "pattern": "^\\w+$",
+                                    "errorMsg": "Characters of Name should match regex ^\\w+$ ."
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testEmail",
+                            "label": "Test Email",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "email"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testIpv4",
+                            "label": "Test ipv4",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "ipv4"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testDate",
+                            "label": "Test date",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "date"
+                                }
+                            ]
+                        },
+                        {
+                            "field": "testUrl",
+                            "label": "Test url",
+                            "type": "text",
+                            "validators": [
+                                {
+                                    "type": "url"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ],
+            "title": "Configuration",
+            "description": "Set up your add-on"
+        },
+        "inputs": {
+            "title": "Inputs",
+            "services": [
+                {
+                    "name": "example_input_one",
+                    "description": "This is a description for Input One",
+                    "title": "Example Input",
+                    "entity": [],
+                    "table": {
+                        "actions": [
+                            "edit",
+                            "enable",
+                            "delete",
+                            "clone"
+                        ],
+                        "header": [],
+                        "moreInfo": []
+                    },
+                    "warning": {
+                        "create": "Warning text for create mode",
+                        "edit": "Warning text for edit mode",
+                        "clone": "Warning text for clone mode",
+                        "config": "Warning text for config mode"
+                    }
+                },
+                {
+                    "name": "example_input_two",
+                    "description": "This is a description for Input Two",
+                    "title": "Example Input Two",
+                    "entity": [],
+                    "table": {
+                        "actions": [
+                            "edit",
+                            "enable",
+                            "delete",
+                            "clone"
+                        ],
+                        "header": [],
+                        "moreInfo": [],
+                        "customRow": {
+                            "type": "external",
+                            "src": "custom_row"
+                        }
+                    }
+                }
+            ]
+        }
+    },
+    "meta": {
+        "name": "Splunk_TA_UCCExample",
+        "restRoot": "splunk_ta_uccexample",
+        "version": "5.36.2Ref7d7543",
+        "displayName": "Splunk UCC test Add-on",
+        "schemaVersion": "0.0.3",
+        "_uccVersion": "5.36.2"
+    }
+}
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/README.txt b/tests/testdata/test_addons/package_global_config_multi_input/package/README.txt
new file mode 100644
index 000000000..530a9e548
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_multi_input/package/README.txt
@@ -0,0 +1,1 @@
+Just a readme
\ No newline at end of file
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/app.manifest b/tests/testdata/test_addons/package_global_config_multi_input/package/app.manifest
new file mode 100644
index 000000000..a99395790
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_multi_input/package/app.manifest
@@ -0,0 +1,54 @@
+{
+  "schemaVersion": "2.0.0",
+  "info": {
+    "title": "Splunk Add-on for UCC Example",
+    "id": {
+      "group": null,
+      "name": "Splunk_TA_UCCExample",
+      "version": "7.0.1"
+    },
+    "author": [
+      {
+        "name": "Splunk Inc.",
+        "email": null,
+        "company": null
+      }
+    ],
+    "releaseDate": null,
+    "description": "Splunk Add-on for UCC Example",
+    "classification": {
+      "intendedAudience": null,
+      "categories": [],
+      "developmentStatus": null
+    },
+    "commonInformationModels": null,
+    "license": {
+      "name": null,
+      "text": "LICENSES/Apache-2.0.txt",
+      "uri": null
+    },
+    "privacyPolicy": {
+      "name": null,
+      "text": null,
+      "uri": null
+    },
+    "releaseNotes": {
+      "name": null,
+      "text": "./README.txt",
+      "uri": null
+    }
+  },
+  "dependencies": null,
+  "tasks": null,
+  "inputGroups": null,
+  "incompatibleApps": null,
+  "platformRequirements": null,
+  "supportedDeployments": [
+    "_standalone",
+    "_distributed"
+  ],
+  "targetWorkloads": [
+    "_search_heads",
+    "_indexers"
+  ]
+}
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/default/app.conf b/tests/testdata/test_addons/package_global_config_multi_input/package/default/app.conf
new file mode 100644
index 000000000..3e92b23bd
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_multi_input/package/default/app.conf
@@ -0,0 +1,15 @@
+[install]
+build = 0
+
+[launcher]
+author = Splunk Inc.
+version = 0.1.0
+description = Splunk_TA_UCCExample
+
+[ui]
+is_visible = false
+label = Splunk_TA_UCCExample
+docs_section_override=AddOns:released
+
+[package]
+id = Splunk_TA_UCCExample
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/lib/requirements.txt b/tests/testdata/test_addons/package_global_config_multi_input/package/lib/requirements.txt
new file mode 100644
index 000000000..4e63a1a57
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_multi_input/package/lib/requirements.txt
@@ -0,0 +1,1 @@
+splunktaucclib
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon.png b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon.png
new file mode 100644
index 000000000..88f67e725
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon.png differ
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt.png b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt.png
new file mode 100644
index 000000000..88f67e725
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt.png differ
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt_2x.png b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt_2x.png
new file mode 100644
index 000000000..c638b3f15
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIconAlt_2x.png differ
diff --git a/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon_2x.png b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon_2x.png
new file mode 100644
index 000000000..c638b3f15
Binary files /dev/null and b/tests/testdata/test_addons/package_global_config_multi_input/package/static/appIcon_2x.png differ
diff --git a/tests/unit/test_dashboard.py b/tests/unit/test_dashboard.py
index db0ef2eb5..3fb2ac349 100644
--- a/tests/unit/test_dashboard.py
+++ b/tests/unit/test_dashboard.py
@@ -40,11 +40,11 @@
       <chart>
         <search>
           <query>index=_internal source=*splunk_ta_uccexample* action=events_ingested
-| timechart avg(n_events) by sourcetype_ingested</query>
+| timechart sum(n_events) by sourcetype_ingested</query>
           <earliest>$log_time.earliest$</earliest>
           <latest>$log_time.latest$</latest>
         </search>
-        <option name="charting.chart">line</option>
+        <option name="charting.chart">column</option>
         <option name="charting.drilldown">none</option>
       </chart>
     </panel>
diff --git a/tests/unit/test_install_python_libraries.py b/tests/unit/test_install_python_libraries.py
index 6fa84abe5..5defd5e73 100644
--- a/tests/unit/test_install_python_libraries.py
+++ b/tests/unit/test_install_python_libraries.py
@@ -81,10 +81,9 @@ def test_install_libraries(mock_subprocess_call):
     expected_install_command = (
         'python3 -m pip install -r "package/lib/requirements.txt"'
         " --no-compile --prefer-binary --ignore-installed "
-        '--use-deprecated=legacy-resolver --target "'
-        '/path/to/output/addon_name/lib"'
+        '--target "/path/to/output/addon_name/lib"'
     )
-    expected_pip_update_command = "python3 -m pip install --upgrade pip==23.1.2"
+    expected_pip_update_command = "python3 -m pip install --upgrade pip"
     mock_subprocess_call.assert_has_calls(
         [
             mock.call(expected_pip_update_command, shell=True, env=None),
@@ -409,3 +408,69 @@ def test_install_libraries_version_mismatch(
     assert version_mismatch_log in caplog.messages
     assert error_description in caplog.messages
     mock_remove_packages.assert_not_called()
+
+
+@mock.patch("subprocess.call", autospec=True)
+def test_install_libraries_custom_pip(mock_subprocess_call):
+    mock_subprocess_call.return_value = 0
+
+    install_libraries(
+        "package/lib/requirements.txt",
+        "/path/to/output/addon_name/lib",
+        "python3",
+        pip_version="21.666.666",
+    )
+
+    expected_install_command = (
+        'python3 -m pip install -r "package/lib/requirements.txt"'
+        " --no-compile --prefer-binary --ignore-installed "
+        '--target "/path/to/output/addon_name/lib"'
+    )
+    expected_pip_update_command = "python3 -m pip install --upgrade pip==21.666.666"
+    mock_subprocess_call.assert_has_calls(
+        [
+            mock.call(expected_pip_update_command, shell=True, env=None),
+            mock.call(expected_install_command, shell=True, env=None),
+        ]
+    )
+
+
+@mock.patch("subprocess.call", autospec=True)
+def test_install_libraries_legacy_resolver(mock_subprocess_call):
+    mock_subprocess_call.return_value = 0
+
+    install_libraries(
+        "package/lib/requirements.txt",
+        "/path/to/output/addon_name/lib",
+        "python3",
+        pip_legacy_resolver=True,
+    )
+
+    expected_install_command = (
+        'python3 -m pip install -r "package/lib/requirements.txt"'
+        " --no-compile --prefer-binary --ignore-installed "
+        '--use-deprecated=legacy-resolver --target "/path/to/output/addon_name/lib"'
+    )
+    expected_pip_update_command = "python3 -m pip install --upgrade pip"
+    mock_subprocess_call.assert_has_calls(
+        [
+            mock.call(expected_pip_update_command, shell=True, env=None),
+            mock.call(expected_install_command, shell=True, env=None),
+        ]
+    )
+
+
+def test_install_libraries_legacy_resolver_with_wrong_pip(caplog):
+    with pytest.raises(SystemExit):
+        install_libraries(
+            "package/lib/requirements.txt",
+            "/path/to/output/addon_name/lib",
+            "python3",
+            pip_version=" 23.2   ",
+            pip_legacy_resolver=True,
+        )
+    expected_msg = (
+        "You cannot use the legacy resolver with pip 23.2. "
+        "Please remove '--pip-legacy-resolver' from your build command or use a different version of pip e.g. 23.2.1"
+    )
+    assert expected_msg in caplog.text
diff --git a/tests/unit/test_main.py b/tests/unit/test_main.py
index a238bb749..a424feeec 100644
--- a/tests/unit/test_main.py
+++ b/tests/unit/test_main.py
@@ -17,6 +17,8 @@
                 "output_directory": None,
                 "python_binary_name": "python3",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -28,6 +30,8 @@
                 "output_directory": None,
                 "python_binary_name": "python3",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -39,6 +43,8 @@
                 "output_directory": None,
                 "python_binary_name": "python3",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -50,6 +56,8 @@
                 "output_directory": None,
                 "python_binary_name": "python3",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -61,6 +69,8 @@
                 "output_directory": None,
                 "python_binary_name": "python3",
                 "verbose_file_summary_report": True,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -79,6 +89,8 @@
                 "output_directory": None,
                 "python_binary_name": "python.exe",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -99,6 +111,8 @@
                 "output_directory": None,
                 "python_binary_name": "python.exe",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -121,6 +135,8 @@
                 "output_directory": "new_output",
                 "python_binary_name": "python.exe",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -144,6 +160,8 @@
                 "output_directory": "new_output",
                 "python_binary_name": "python.exe",
                 "verbose_file_summary_report": False,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
             },
         ),
         (
@@ -168,6 +186,65 @@
                 "output_directory": "new_output",
                 "python_binary_name": "python.exe",
                 "verbose_file_summary_report": True,
+                "pip_version": "latest",
+                "pip_legacy_resolver": False,
+            },
+        ),
+        (
+            [
+                "build",
+                "-v",
+                "--source",
+                "package",
+                "--config",
+                "/path/to/globalConfig.yaml",
+                "--ta-version",
+                "2.2.0",
+                "--output",
+                "new_output",
+                "--python-binary-name",
+                "python.exe",
+                "--pip-version",
+                "21.0.0",
+            ],
+            {
+                "source": "package",
+                "config_path": "/path/to/globalConfig.yaml",
+                "addon_version": "2.2.0",
+                "output_directory": "new_output",
+                "python_binary_name": "python.exe",
+                "verbose_file_summary_report": True,
+                "pip_version": "21.0.0",
+                "pip_legacy_resolver": False,
+            },
+        ),
+        (
+            [
+                "build",
+                "-v",
+                "--source",
+                "package",
+                "--config",
+                "/path/to/globalConfig.yaml",
+                "--ta-version",
+                "2.2.0",
+                "--output",
+                "new_output",
+                "--python-binary-name",
+                "python.exe",
+                "--pip-version",
+                "21.0.0",
+                "--pip-legacy-resolver",
+            ],
+            {
+                "source": "package",
+                "config_path": "/path/to/globalConfig.yaml",
+                "addon_version": "2.2.0",
+                "output_directory": "new_output",
+                "python_binary_name": "python.exe",
+                "verbose_file_summary_report": True,
+                "pip_version": "21.0.0",
+                "pip_legacy_resolver": True,
             },
         ),
     ],
diff --git a/ui/src/components/EntityModal/EntityModal.test.tsx b/ui/src/components/EntityModal/EntityModal.test.tsx
index 97d7675f2..788bd5c06 100644
--- a/ui/src/components/EntityModal/EntityModal.test.tsx
+++ b/ui/src/components/EntityModal/EntityModal.test.tsx
@@ -1,6 +1,7 @@
 import React from 'react';
 import { render, screen } from '@testing-library/react';
 import userEvent from '@testing-library/user-event';
+import { AxiosResponse } from 'axios';
 import EntityModal, { EntityModalProps } from './EntityModal';
 import { setUnifiedConfig } from '../../util/util';
 import {
@@ -13,8 +14,13 @@ import {
     getConfigOauthOauthDisableonEdit,
     getConfigWithOauthDefaultValue,
     getConfigWarningMessage,
+    getConfigWithSeparatedEndpointsOAuth,
+    getConfigWarningMessageAlwaysDisplay,
+    WARNING_MESSAGES_ALWAYS_DISPLAY,
 } from './TestConfig';
 import { ERROR_AUTH_PROCESS_TERMINATED_TRY_AGAIN } from '../../constants/oAuthErrorMessage';
+import { Mode } from '../../constants/modes';
+import * as axiosWrapper from '../../util/axiosCallWrapper';
 
 describe('Oauth field disabled on edit - diableonEdit property', () => {
     const handleRequestClose = jest.fn();
@@ -222,10 +228,10 @@ describe('EntityModal - auth_endpoint_token_access_type', () => {
 
         renderModalWithProps(props);
 
-        const cliendIdField = document.querySelector('.client_id')?.querySelector('input');
+        const cliendIdField = document.querySelector('.client_id input');
         expect(cliendIdField).toBeInTheDocument();
 
-        const secretField = document.querySelector('.client_secret')?.querySelector('input');
+        const secretField = document.querySelector('.client_secret input');
         expect(secretField).toBeInTheDocument();
 
         const redirectField = document.querySelector('.redirect_url');
@@ -260,6 +266,8 @@ describe('EntityModal - auth_endpoint_token_access_type', () => {
 
 describe('EntityModal - custom warning', () => {
     const handleRequestClose = jest.fn();
+    const DEFAULT_MODE = 'create';
+    const DEFAULT_PAGE = 'configuration';
 
     const setUpConfigWithWarningMessageForConfiguration = () => {
         const newConfig = getConfigWarningMessage();
@@ -271,7 +279,7 @@ describe('EntityModal - custom warning', () => {
         setUnifiedConfig(newConfig);
     };
 
-    const renderModal = (inputMode: string, page: string) => {
+    const renderModal = (inputMode: Mode, page: string) => {
         const props = {
             serviceName: 'account',
             mode: inputMode,
@@ -305,10 +313,46 @@ describe('EntityModal - custom warning', () => {
             }
             renderModal(mode, page);
 
-            const warningMessage = screen.getByText(WARNING_MESSAGES[mode]);
+            const warningMessage = screen.getByText(WARNING_MESSAGES[mode]?.message);
             expect(warningMessage).toBeInTheDocument();
         }
     );
+
+    it('warning disappears after input change', async () => {
+        setUpConfigWithWarningMessageForConfiguration();
+        renderModal(DEFAULT_MODE, DEFAULT_PAGE);
+        const warningMessage = screen.getByText(WARNING_MESSAGES[DEFAULT_MODE]?.message);
+        expect(warningMessage).toBeInTheDocument();
+        const anyInput = screen.getAllByRole('textbox');
+        expect(anyInput[0]).toBeInTheDocument();
+
+        if (anyInput[0]) {
+            await userEvent.type(anyInput[0], 'aaa');
+        }
+
+        expect(warningMessage).not.toBeInTheDocument();
+    });
+
+    const setUpConfigWithWarningMessageAlwaysDisplayed = () => {
+        const newConfig = getConfigWarningMessageAlwaysDisplay();
+        setUnifiedConfig(newConfig);
+    };
+
+    it('warning always displayed', async () => {
+        setUpConfigWithWarningMessageAlwaysDisplayed();
+        renderModal(DEFAULT_MODE, DEFAULT_PAGE);
+        const warningMessage = screen.getByText(
+            WARNING_MESSAGES_ALWAYS_DISPLAY[DEFAULT_MODE]?.message
+        );
+        expect(warningMessage).toBeInTheDocument();
+        const anyInput = screen.getAllByRole('textbox');
+        expect(anyInput[0]).toBeInTheDocument();
+
+        if (anyInput[0]) {
+            await userEvent.type(anyInput[0], 'aaa');
+        }
+        expect(warningMessage).toBeInTheDocument();
+    });
 });
 
 describe('Default value', () => {
@@ -340,3 +384,106 @@ describe('Default value', () => {
         expect(component).toHaveValue(DEFAULT_VALUE);
     });
 });
+
+describe('Oauth - separated endpoint authorization', () => {
+    const handleRequestClose = jest.fn();
+    const setUpConfigWithSeparatedEndpoints = () => {
+        const newConfig = getConfigWithSeparatedEndpointsOAuth();
+        setUnifiedConfig(newConfig);
+    };
+
+    const renderModalWithProps = (props: EntityModalProps) => {
+        render(<EntityModal {...props} handleRequestClose={handleRequestClose} />);
+    };
+
+    const getFilledOauthFields = async () => {
+        const endpointAuth = document.querySelector('.endpoint_authorize input');
+        const endpointToken = document.querySelector('.endpoint_token input');
+
+        if (endpointAuth) {
+            await userEvent.type(endpointAuth, 'authendpoint');
+        }
+        if (endpointToken) {
+            await userEvent.type(endpointToken, 'tokenendpoint');
+        }
+        return [endpointAuth, endpointToken];
+    };
+
+    const spyOnWindowOpen = async (addButton: HTMLElement) => {
+        const windowOpenSpy = jest.spyOn(window, 'open') as jest.Mock;
+
+        // mock opening verification window
+        windowOpenSpy.mockImplementation((url) => {
+            expect(url).toEqual(
+                'https://authendpoint/services/oauth2/authorize?response_type=code&client_id=Client%20Id&redirect_uri=http%3A%2F%2Flocalhost%2F'
+            );
+
+            return { closed: true };
+        });
+
+        await userEvent.click(addButton);
+        windowOpenSpy.mockRestore();
+    };
+
+    const props = {
+        serviceName: 'account',
+        mode: 'create',
+        stanzaName: undefined,
+        formLabel: 'formLabel',
+        page: 'configuration',
+        groupName: '',
+        open: true,
+        handleRequestClose: () => {},
+    } satisfies EntityModalProps;
+
+    it('render modal with separated oauth fields', async () => {
+        setUpConfigWithSeparatedEndpoints();
+        renderModalWithProps(props);
+
+        const [endpointAuth, endpointToken] = await getFilledOauthFields();
+
+        expect(endpointAuth).toBeInTheDocument();
+        expect(endpointAuth).toHaveValue('authendpoint');
+        expect(endpointToken).toBeInTheDocument();
+        expect(endpointToken).toHaveValue('tokenendpoint');
+    });
+
+    it('check if correct authorization endpoint called', async () => {
+        setUpConfigWithSeparatedEndpoints();
+        renderModalWithProps(props);
+
+        await getFilledOauthFields();
+
+        const addButton = screen.getByRole('button', { name: /add/i });
+        expect(addButton).toBeInTheDocument();
+
+        await spyOnWindowOpen(addButton);
+    });
+
+    it('check if correct auth token endpoint created', async () => {
+        setUpConfigWithSeparatedEndpoints();
+        renderModalWithProps(props);
+        const backendTokenFunction = jest.fn();
+
+        await getFilledOauthFields();
+        const addButton = screen.getByRole('button', { name: /add/i });
+        expect(addButton).toBeInTheDocument();
+
+        await spyOnWindowOpen(addButton);
+
+        // token is aquired on backend side so only thing we can check is if there is correct url created
+        jest.spyOn(axiosWrapper, 'axiosCallWrapper').mockImplementation((params) => {
+            backendTokenFunction((params?.body as unknown as URLSearchParams)?.get('url'));
+            return new Promise((r) => r({} as unknown as PromiseLike<AxiosResponse>));
+        });
+
+        // triggering manually external oauth window behaviour after success authorization
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
+        (window as any).getMessage({ code: 200, msg: 'testing message for oauth' });
+
+        // only purpose is to check if backend function receinved correct token url
+        expect(backendTokenFunction).toHaveBeenCalledWith(
+            'https://tokenendpoint/services/oauth2/token'
+        );
+    });
+});