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

Issue:
Feature request: import custom code module in generated modular input scripts.
So I have `my_custom_modular_input.py`, my custom code for a modular input, which implements `valiate_input` and `stream_events`

ucc-gen creates `my_custom.py`, a rest handler skeleton which has `stream_events`, `valiate_input`, all the arguments defined in globalConfig.json, and the filename is already linked to the modular input definition.

Since I already have `my_custom_modular_input.py`, it would be great if ucc-gen could automatically import this modular when writing `my_custom.py` and use it in the `stream_events` and `validate_input` method calls.

I'm currently using some regex and file manipulation with additional_packaging.py which works fine but feels brittle if the format or output of ucc-gen would change.

I feel this would be a very useful feature for folks working with modular input scripts, but if I've missed a better workflow please let me know.  Thanks for considering.


Discussion / hints:
Thanks for this feature request, I agree that `ucc-gen` could handle this better.

I think that your approach is good enough for this use case. I can't think of anything better.


This feature could be really usefull, it could allow to use custom code without having to maintain the get_scheme() manually after some changes in the globalConfig.json...
May be it can be implemented as a custom template as a first step and avoid breakage of other use cases?
Is there any plan to add this functionality ? 
I read the ask one more time, you are actually referring to the actual modular input code, not the rest handlers created by `ucc-gen` automatically. My initial comment was based on the assumption that you are referring to the rest handler custom code.

What you are referring to, may be an actually interesting feature request. I have limited capacity this quarter, I can keep this in mind during our next quarter planning.
@Jalkar  FYI to get around this issue, I create the customizations I need to the rest handler in a separate module, extending `splunktaucclib`.  Then I let UCC create the "real" rest handler code , and just modify the handler class that is launched at the bottom of the file.  My use case is I need to take extra actions when an input is removed or disabled, outside of module input script.  But maybe your use case is different from mine?

The advantage here being I don't need to understand if UCC will try to overwrite my customizations or not, and don't need to manually implement get_scheme().  I let UCC do as much of the work as possible.

My opinion, if I understand @Jalkar - I'm a bit happier without UCC trying to modify code I've already written.  It makes debugging easier when modules I've authored don't change during build process, but maybe others feel differently, or it decreases the scope of work for UCC PR to something that is doable.  HTH  

IE:
custom_handler.py has my customizations
```
class CustomHandlerApp1(splunktaucclib.rest_handler.admin_external.AdminExternalHandler):
      def __init__(self, *args,**kwargs):
         ...

     @admin_external.build_conf_info
     def handleEdit(self, confInfo):
        ...
    
    @admin_external.build_conf_info
    def handleRemove(self, confInfo):
       ...
```

UCC-GEN generates TA_inputname_rh_inputname.py:
```
...
if __name__ == '__main__':
    ...
    admin_external.handle(endpoint, handler=AdminExternalHandler)
```

additional_packaging adds/modifies TA_inputname_rh_inputname.py: 
```
from custom_handler import CustomHandlerApp1

if __name__ == '__main__':
    ...
    admin_external.handle(endpoint, **handler=CustomHandlerApp1**)
```


So in the end you need to change the generated file after each ucc-gen exec ?
`ucc-gen` does not overwrite the files if they are already present in `package/bin/` folder for example with the correct name.

If you have an input called `demo_input.py` in `package/bin/` folder with your code, then `ucc-gen` does not override that file with the default content. The same is for the rest handlers and files.

As far as I understand, we are talking here about 2 different but similar use cases:
* custom code for the rest handlers 
* custom code for the modular inputs

Both of them are valid feature requests, but should be tracked differently.
My issue is currently when i'm adding a new parameter for an existing input, I need to manually edit the "scheme" of the existing package/bin/my_mod_input.py
For me the best solution would be to have a auto-generated "my_mod_input_base.py" which contains the autogenerated scheme with possibility to override with a custom "my_mode_input.py" inheriting from "my_mode_input_base"
re-reading your last comments, i just catch the diff rest handler/modular inputs :)
FYI @Jalkar RE: "So in the end you need to change the generated file after each ucc-gen exec ?" >> YES.  I added code in additional_packaging.py to open the generated rest handler file, search for the the line of code and change it with regex.  Additional_packaging.py is automatically executed by ucc-gen as part of the build process - HTH
@artemrys - thanks for the correction regarding ucc not-overwriting!

ok thank for the feedback (I never realised the `additional_packaging` was a functionnality include in UCC ^^
Yeah, it was never in the documentation, I added it recently (https://splunk.github.io/addonfactory-ucc-generator/how_to_use/#additional_packagingpy-file).

I'll leave this issue open, I think this maybe interesting to implement in the future, not committing to it so far.
I'll rename this issue to track the customisation for the UCC-generated modular inputs and will open a new one to track customisation for the actual REST handlers.

By the way, I updated the docs and now it has an example for the custom REST handlers (https://splunk.github.io/addonfactory-ucc-generator/custom_rest_handler/).
@pmeyerson - This would be huge addition to UCC I think.
I also don't think this would be that hard to do.

By any chance can you provide content of **additional_packaging.py** that you have.

here's what worked for me - lets me call custom modular input handler functions without having to maintain the scheme arguments when globalConfig.json is updated

1.  add import statement
2. modify def stream_events() function
3. modify def validation_input() function
4. set use_single_instance value

```
        modinput_handler_file = 'output/{}/bin/{}'.format(ta_name, modinput_handler_file)
        repl1_append = 'import {} as input_module\n'.format(custom_modinput_handler)

        # replace default generation of stream_events() by ucc-gen
        pattern2 = r'def stream_event[\w\W]*(?:\n\n)'
        repl2 = 'def stream_events(self, inputs, ew):\n        input_module.stream_events(self, inputs, ew)\n\n\n'

        # replace default generation of validate_input() by ucc-gen
        pattern3 = r'def validate_input[\w\W]*return\n'
        repl3 = 'def validate_input(self, definition):\n        input_module.validate_input(self, definition)\n\n'

        ## set to single instance mode = false
        pattern4 = r'scheme.use_single_instance = True'
        repl4 = 'scheme.use_single_instance = False'

        with open(modinput_handler_file, 'r+b') as file1:
            print("additional_packaging:opened {} for post-processing".format(file1.name))
            
            # insert repl1_append after first line of file
            file1.seek(0)
            pattern1 = file1.readline().decode("utf-8")
            file1.seek(0)
            content = file1.read().decode("utf-8")

            repl1 = pattern1 + repl1_append
            
            if not re.search(pattern1, content): print("additional_packaging:pattern1 not found")
            if not re.search(pattern2, content): print("additional_packaging:pattern2 not found")
            if not re.search(pattern3, content): print("additional_packaging:pattern3 not found")
            if not re.search(pattern4, content): print("additional_packaging:pattern4 not found")
            content = re.sub(pattern1, repl1, content)
            content = re.sub(pattern2, repl2, content)
            content = re.sub(pattern3, repl3, content)
            content = re.sub(pattern4, repl4, content)
            content = content.encode("utf-8")

            file1.seek(0)
            file1.write(content)
            file1.truncate()
            file1.close()

        print("done modifying file {}".format(file1.name))
``` 

HTH
for reference, here's stub from my custom modular input handler file:

```
...
def validate_input(self, definition):
  """ get all parameters and raise ValueError if something isn't right 
       NOTE: getting the paramters must be manually maintained if new fields are added to modular input definition"""
       
   param1 = definition.parameters.get("param1")
   param2 = definition.parameters.get("param2")
   ...
   # raise ValueError on any validation failure
   ...
   ...
   
def stream_events(self, inputs, ew):
   """ entry point that executes when an input parameter is saved in the UI, and on interval or splunkd restart """
   
   for input_name, input in iteritems(inputs.__dict__["inputs"]):
      input["name"] = input_name
      ...
      ...
      # do stuff
```
@pmeyerson - Much appreciated. This was very helpful!!!

Fix patch:
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 5a5133e32..feee7b6a3 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,31 +1,35 @@
 ---
 name: Bug report
 description: >-
-  Report a bug or an unexpected behavior to help us improve the package
+  Report a bug or an unexpected behavior to help us improve UCC
 title: 'BUG: '
 labels:
 - bug
+- triage
 
 body:
 - type: markdown
   attributes:
     value: >
-      ## Thank you for helping us improve ucc-gen!
+      ## Thank you for helping us improve UCC!
 
       * First, please verify that your issue is not already reported using the
       [Issue search](https://github.com/splunk/addonfactory-ucc-generator/search?q=is%3Aissue&type=issues).
 - type: textarea
   attributes:
     label: Description
-    description: >-
-      A concise description of the bug.
+    description: A concise description of the bug.
   validations:
     required: true
 - type: input
   attributes:
-    label: What ucc-gen version are you using?
+    label: What UCC version are you using?
     placeholder: For example splunk-add-on-ucc-framework==5.13.0
+  validations:
+    required: true
 - type: input
   attributes:
     label: Additional System Info
     placeholder: Python version, OS (Linux/Mac/Windows/WSL), etc.
+  validations:
+    required: true
diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml
new file mode 100644
index 000000000..cdc0006f2
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/docs.yml
@@ -0,0 +1,37 @@
+---
+name: Documentation update
+description: Suggest a documentation update to improve everyone's experience
+title: 'Docs: '
+labels:
+  - documentation
+  - triage
+
+body:
+  - type: textarea
+    id: search_area
+    attributes:
+      label: What were you searching in the docs?
+      description: Please help us understand how you looked for information that was either unclear or not available
+    validations:
+      required: true
+  - type: input
+    id: area
+    attributes:
+      label: Is this related to an existing documentation section?
+      description: Please share a link, if applicable
+    validations:
+      required: false
+  - type: textarea
+    id: idea
+    attributes:
+      label: How can we improve?
+      description: Please share your thoughts on how we can improve this experience
+    validations:
+      required: true
+  - type: textarea
+    id: suggestion
+    attributes:
+      label: Got a suggestion in mind?
+      description: Please suggest a proposed update
+    validations:
+      required: false
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 7e06f4ea4..239f95b4e 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -5,6 +5,7 @@ description: >-
 title: 'Feature request: '
 labels:
 - enhancement
+- triage
 
 body:
 - type: markdown
@@ -12,9 +13,10 @@ body:
     value: >
       Please:
 
-      - [ ] Check for duplicate requests.
+      - [ ] Check for duplicate requests
 - type: textarea
   attributes:
     label: Description
-    description: >-
-      Description of the feature request.
+    description: Description of the feature request
+  validations:
+    required: true
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..22a085f07
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,20 @@
+**Issue number:**
+
+## Summary
+
+### Changes
+
+> Please provide a summary of what's being changed
+
+### User experience
+
+> Please describe what the user experience looks like before and after this change
+
+## Checklist
+
+If your change doesn't seem to apply, please leave them unchecked.
+
+* [ ] I have performed a self-review of this change
+* [ ] Changes have been tested
+* [ ] Changes are documented
+* [ ] PR title follows [conventional commit semantics](https://www.conventionalcommits.org/en/v1.0.0/)
diff --git a/.gitignore b/.gitignore
index abe85d73a..9b087cef9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,4 +45,4 @@ init_addon_for_ucc_package/
 # UI build
 # ignore everything except redirect_page.js
 splunk_add_on_ucc_framework/package/appserver/static/js/build/
-!splunk_add_on_ucc_framework/package/appserver/static/js/build/redirect_page.js
+!splunk_add_on_ucc_framework/package/appserver/static/js/build/redirect_page.js
\ No newline at end of file
diff --git a/docs/entity/components.md b/docs/entity/components.md
index eeb5bc4da..183eb7ba7 100644
--- a/docs/entity/components.md
+++ b/docs/entity/components.md
@@ -322,7 +322,7 @@ This is how it looks in the UI:
 
 ![image](../images/components/checkbox_group_mixed_example.png)
 
-The component maps and unmaps values into a single field in the format `fieldName1/fieldValue2,fieldName2/fieldValue2`, but only for checked rows. For the given example, it emits the following value: `rowUnderGroup1/1200,rowWithoutGroup_2/3600`.
+The component maps and unmaps values into a single field in the format `fieldName1/fieldValue1,fieldName2/fieldValue2`, but only for checked rows. For the given example, it emits the following value: `rowUnderGroup1/1200,requiredField/10`.
 
 
 ## `Multiple Select`
@@ -450,21 +450,24 @@ This is how it looks in the UI:
 
 See the underlying `@splunk/react-ui` component: [`File`](https://splunkui.splunk.com/Packages/react-ui/File).
 
-It supports files that can be opened in text mode or with a text editor, which are files with extensions such as txt, json, xml, yaml, pem, key, crt, etc.
+By default it supports files that can be opened in text mode or with a text editor, which are files with extensions such as txt, json, xml, yaml, pem, key, crt, etc.
 
 It only sends file content to the server by reading it using the [readAsArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer) method of the FileReader class, and then decoding it into **UTF-8** format, using the [decode](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder/decode) method of the TextDecoder class.
 
+If `options` property contains useBase64Encoding is set up as true, then readAsArrayBuffer method is replaced with [readAsDataURL](https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL) and obtained data are correctly proceeded to store only file content (beggining of result is removed, as it contains unwanted informations and pure encoded file content is saved). With that approach any file is stored in **Base64** format.
+
 The file content can be validated using in-built validators such as [string](validators.md#string) and [regex](validators.md#regex), and a custom validator can also be implemented using a [custom hook](../custom_ui_extensions/custom_hook.md) and [saveValidator](../advanced/save_validator.md).
 
 This feature allows you to upload a single file.
 
 <h3> Options </h3>
 
-| Property                                                   | Type   | Description                                                | Default Value |
-| ---------------------------------------------------------- | ------ | ---------------------------------------------------------- | ------------- |
-| fileSupportMessage                                          | string | It displays a message inside a file component.                   | -             |
-| supportedFileTypes<span class="required-asterisk">*</span> | array  | It is a list of the file types that the user can upload.          | -             |
-| maxFileSize                                                | number | It sets the maximum file size in KB that a user can upload.  | 500KB         |
+| Property                                                    | Type    | Description                                                                                 | Default Value |
+| ----------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------- | ------------- |
+| fileSupportMessage                                          | string  | It displays a message inside a file component.                                              | -             |
+| supportedFileTypes<span class="required-asterisk">\*</span> | array   | It is a list of the file types that the user can upload.                                    | -             |
+| maxFileSize                                                 | number  | It sets the maximum file size in KB that a user can upload.                                 | 500KB         |
+| useBase64Encoding                                           | boolean | It defines used encoding for files. If true base64 will be used, if false utf-8 is applied. | false         |
 
 See the following example usage:
 ```json
@@ -476,7 +479,8 @@ See the following example usage:
     "options": {
         "fileSupportMessage": "Support message",
         "supportedFileTypes": ["pem", "txt"],
-        "maxFileSize": 100
+        "maxFileSize": 100,
+        "useBase64Encoding": false
     },
     "validators": [
         {
diff --git a/docs/images/components/checkbox_group_mixed_example.png b/docs/images/components/checkbox_group_mixed_example.png
index f4eb8072c..7dc12d5f3 100644
Binary files a/docs/images/components/checkbox_group_mixed_example.png and b/docs/images/components/checkbox_group_mixed_example.png differ
diff --git a/docs/images/inputs/Introduction_Output.png b/docs/images/inputs/Introduction_Output.png
index c9943a818..68c278917 100644
Binary files a/docs/images/inputs/Introduction_Output.png and b/docs/images/inputs/Introduction_Output.png differ
diff --git a/docs/index.md b/docs/index.md
index bb45df09a..d0d50b099 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -30,6 +30,7 @@ The `splunk-add-on-ucc-framework`:
 
 * generates UI (`appserver` folder).
 * generates Python REST handlers to support UI CRUD operations (`bin` folder).
+* generates [inputs](./inputs/index.md) and their [helper modules](./inputs/helper.md)
 * generates OpenAPI description documents (`appserver/static/openapi.json` file) (for more information, see [here](openapi.md)).
 * generates `.conf` files (more information, see [here](dot_conf_files.md)).
 * installs Python requirements (`lib` folder).
diff --git a/docs/inputs/helper.md b/docs/inputs/helper.md
new file mode 100644
index 000000000..b22fa0d0b
--- /dev/null
+++ b/docs/inputs/helper.md
@@ -0,0 +1,55 @@
+---
+title: Input Helper Module
+---
+
+Input scripts are regenerated during every build step, in order to keep the arguments
+and options up to date with the global config. To not discard changes made by developers,
+additional helper modules were introduced. Those modules must contain
+`validate_input` and `stream_events` methods (see [example below](#module-content)).
+They are created if they do not exist, but they are not updated by UCC.
+A script then imports such a module and calls the two methods.
+
+Helper files are placed in the `bin` directory. In order to use helper files, specify
+`inputHelperModule` parameter. This will create a new file: `{inputHelperModule}.py`.
+
+
+### Usage
+
+```json
+"pages": {
+    "inputs": {
+        "services": [
+            {
+                "name": "example_input_one",
+                "title": "Example Input",
+                "entity": [],
+                "inputHelperModule": "my_module"
+            }
+        ]
+    }
+},
+```
+
+This will create `my_module.py` (if it does not exist) file in the `bin` directory.
+The input script `example_input_one` will import this module and call its methods.
+
+### Module content
+
+The file must contain the following two functions:
+
+- `validate_input(definition: smi.ValidationDefinition)`
+- `stream_events(inputs: smi.InputDefinition, event_writer: smi.EventWriter)`
+
+```python
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    ...
+
+
+def stream_events(inputs: smi.InputDefinition, event_writer: smi.EventWriter):
+    ...
+```
+
+The two methods' bodies should be filled by the developer.
diff --git a/docs/inputs/index.md b/docs/inputs/index.md
index 1e540673d..a1ba3abbc 100644
--- a/docs/inputs/index.md
+++ b/docs/inputs/index.md
@@ -32,6 +32,7 @@ provided, a dropdown field will appear on the Inputs page. In contrast, a button
 | options                                                               | object | This property allows you to enable the [saveValidator](../advanced/save_validator.md) feature.                                                                                                                |
 | hook                                                                  | object | It is used to add custom behaviour to forms. Visit the [Custom Hook](../custom_ui_extensions/custom_hook.md) page to learn more.                                                                              |
 | [warning](../advanced/custom_warning.md)                              | object | It is used to add the custom warning message for each of the modes of 'create', 'edit', 'config', and 'clone'. The message is displayed on the form.                                                          |
+| [inputHelperModule](./helper.md)                                      | string | A module that contains `validate_input` and `stream_events` methods. By default it is not used.                                                                                                               |
 | conf                                                                  | string | TBD                                                                                                                                                                                                           |
 | restHandlerName                                                       | string | TBD                                                                                                                                                                                                           |
 | restHandlerModule                                                     | string | TBD                                                                                                                                                                                                           |
@@ -63,6 +64,7 @@ This is how the global configuration looks like without tabs:
                 "edit",
                 "enable",
                 "delete",
+                "search",
                 "clone"
             ],
             "header": [],
diff --git a/mkdocs.yml b/mkdocs.yml
index aa9a45186..4158401d5 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -37,6 +37,7 @@ nav:
     - Introduction: "inputs/index.md"
     - Tabs: "inputs/tabs.md"
     - Multi-level Menu: "inputs/multilevel_menu.md"
+    - Helper Module: "inputs/helper.md"
   - Configuration:
       - "configurations/index.md"
       - Introduction: "configurations/index.md"
diff --git a/poetry.lock b/poetry.lock
index e3429207f..082539045 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -313,13 +313,13 @@ packaging = "*"
 
 [[package]]
 name = "dunamai"
-version = "1.20.0"
+version = "1.21.1"
 description = "Dynamic version generation"
 optional = false
 python-versions = ">=3.5"
 files = [
-    {file = "dunamai-1.20.0-py3-none-any.whl", hash = "sha256:a2185c227351a52a013c7d7a695d3f3cb6625c3eed14a5295adbbcc7e2f7f8d4"},
-    {file = "dunamai-1.20.0.tar.gz", hash = "sha256:c3f1ee64a1e6cc9ebc98adafa944efaccd0db32482d2177e59c1ff6bdf23cd70"},
+    {file = "dunamai-1.21.1-py3-none-any.whl", hash = "sha256:fe303541463648b8197c495decf62cd8f15234fb6d891a5f295015e452f656c8"},
+    {file = "dunamai-1.21.1.tar.gz", hash = "sha256:d7fea28ad2faf20a6ca5ec121e5c68e55eec6b8ada23d9c387e4e7a574cc559f"},
 ]
 
 [package.dependencies]
@@ -502,13 +502,13 @@ files = [
 
 [[package]]
 name = "jinja2"
-version = "3.1.3"
+version = "3.1.4"
 description = "A very fast and expressive template engine."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
-    {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
+    {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
+    {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
 ]
 
 [package.dependencies]
@@ -1170,13 +1170,13 @@ docker = ["lovely-pytest-docker (>=0,<1)"]
 
 [[package]]
 name = "pytest-splunk-addon-ui-smartx"
-version = "3.0.2"
+version = "3.1.2"
 description = "Library to support testing Splunk Add-on UX"
 optional = false
 python-versions = "<4.0,>=3.7"
 files = [
-    {file = "pytest_splunk_addon_ui_smartx-3.0.2-py3-none-any.whl", hash = "sha256:65406a69d03b2b123f0291fde23370bcec6542ec63e2b5ccd84b0a17b7c25a61"},
-    {file = "pytest_splunk_addon_ui_smartx-3.0.2.tar.gz", hash = "sha256:82b37c7bbb277b30d89d24d5a451cdfd9358af2e50fe3761608e3160288ca932"},
+    {file = "pytest_splunk_addon_ui_smartx-3.1.2-py3-none-any.whl", hash = "sha256:c764863eb2956c0f293fe32dcff3c73ea8a31b2024b5ff729007993588ad130d"},
+    {file = "pytest_splunk_addon_ui_smartx-3.1.2.tar.gz", hash = "sha256:b1d952481a97a7eb7c39a13dd9c3a1d522e1a19a31b90766072d9aa2ad474236"},
 ]
 
 [package.dependencies]
@@ -1669,4 +1669,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
 [metadata]
 lock-version = "2.0"
 python-versions = "^3.7"
-content-hash = "6a920a514b306fde6e35fa25055cb05731779597a1548927163144a567d93e21"
+content-hash = "71f38c7ac6bbc9706c78d3be01f762388ebf7f6d3669ca7fdcfe615c4a3c1805"
diff --git a/pyproject.toml b/pyproject.toml
index 690f8bc5a..8a7e451fd 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -56,7 +56,7 @@ mkdocs = "^1.4.2"
 importlib-metadata = {version="*", python="<3.8"}
 pytest = "^7.2.1"
 pytest-splunk-addon = "^5.0.0"
-pytest-splunk-addon-ui-smartx = "3.0.2"
+pytest-splunk-addon-ui-smartx = "3.1.2"
 pytest-rerunfailures = "^11.1.1"
 mkdocs-material = "^9.1.3"
 pytest-cov = "^4.0.0"
diff --git a/splunk_add_on_ucc_framework/commands/build.py b/splunk_add_on_ucc_framework/commands/build.py
index 72ecb41ee..60b1b8a9d 100644
--- a/splunk_add_on_ucc_framework/commands/build.py
+++ b/splunk_add_on_ucc_framework/commands/build.py
@@ -138,12 +138,15 @@ def _add_modular_input(
         entity = service.get("entity")
         field_allow_list = frozenset(["name", "interval", "index", "sourcetype"])
         template = "input.template"
+
         if "template" in service:
             template = service.get("template") + ".template"
 
         # filter fields in allow list
         entity = [x for x in entity if x.get("field") not in field_allow_list]
 
+        input_helper_module = service.get("inputHelperModule")
+
         content = (
             utils.get_j2_env()
             .get_template(template)
@@ -152,12 +155,29 @@ def _add_modular_input(
                 class_name=class_name,
                 description=description,
                 entity=entity,
+                input_helper_module=input_helper_module,
             )
         )
         input_file_name = os.path.join(outputdir, ta_name, "bin", input_name + ".py")
         with open(input_file_name, "w") as input_file:
             input_file.write(content)
 
+        if input_helper_module is not None:
+            helper_module_template = "input.module-template"
+            helper_filename = os.path.join(
+                outputdir, ta_name, "bin", f"{input_helper_module}.py"
+            )
+
+            content = (
+                utils.get_j2_env()
+                .get_template(helper_module_template)
+                .render(
+                    input_name=input_name,
+                )
+            )
+            with open(helper_filename, "w") as helper_file:
+                helper_file.write(content)
+
         input_default = os.path.join(outputdir, ta_name, "default", "inputs.conf")
         config = configparser.ConfigParser()
         if os.path.exists(input_default):
@@ -505,6 +525,8 @@ def generate(
         global_config = global_config_lib.GlobalConfig(
             config_path, is_global_config_yaml
         )
+        # handle the update of globalConfig before validating
+        global_config_update.handle_global_config_update(global_config)
         try:
             validator = global_config_validator.GlobalConfigValidator(
                 internal_root_dir, global_config
@@ -520,7 +542,6 @@ def generate(
         logger.info(
             f"Updated and saved add-on version in the globalConfig file to {addon_version}"
         )
-        global_config_update.handle_global_config_update(global_config)
         global_config.expand_tabs()
         scheme = global_config_builder_schema.GlobalConfigBuilderSchema(global_config)
         utils.recursive_overwrite(
diff --git a/splunk_add_on_ucc_framework/commands/init.py b/splunk_add_on_ucc_framework/commands/init.py
index c00d42062..d8c2f52c4 100644
--- a/splunk_add_on_ucc_framework/commands/init.py
+++ b/splunk_add_on_ucc_framework/commands/init.py
@@ -119,19 +119,36 @@ def _generate_addon(
     package_bin_path = os.path.join(package_path, "bin")
     os.makedirs(package_bin_path)
     package_bin_input_path = os.path.join(package_bin_path, f"{addon_input_name}.py")
+    helper_module = f"{addon_input_name}_helper"
     input_rendered_content = (
         utils.get_j2_env()
-        .get_template("input.name.init-template")
+        .get_template("input.template")
+        .render(
+            input_name=addon_input_name,
+            class_name=addon_input_name.upper(),
+            description="demo_input input",
+            entity=[],
+            input_helper_module=helper_module,
+        )
+    )
+    with open(package_bin_input_path, "w") as _f:
+        _f.write(input_rendered_content + "\n")
+
+    package_bin_helper_path = os.path.join(
+        package_bin_path, f"{addon_input_name}_helper.py"
+    )
+    helper_rendered_content = (
+        utils.get_j2_env()
+        .get_template("input.helper-init-template")
         .render(
             addon_name=addon_name,
             addon_rest_root=addon_rest_root,
             addon_input_name=addon_input_name,
-            addon_version=addon_version,
-            addon_display_name=addon_display_name,
         )
     )
-    with open(package_bin_input_path, "w") as _f:
-        _f.write(input_rendered_content + "\n")
+    with open(package_bin_helper_path, "w") as _f:
+        _f.write(helper_rendered_content + "\n")
+
     package_lib_path = os.path.join(package_path, "lib")
     os.makedirs(package_lib_path)
     package_lib_requirements_path = os.path.join(package_lib_path, "requirements.txt")
diff --git a/splunk_add_on_ucc_framework/schema/schema.json b/splunk_add_on_ucc_framework/schema/schema.json
index c7976dd6d..9b3398ed0 100644
--- a/splunk_add_on_ucc_framework/schema/schema.json
+++ b/splunk_add_on_ucc_framework/schema/schema.json
@@ -1124,6 +1124,9 @@
                 "type": "string"
               },
               "uniqueItems": true
+            },
+            "useBase64Encoding": {
+              "type": "boolean"
             }
           },
           "additionalProperties": false
@@ -1453,7 +1456,7 @@
           "type": "array",
           "items": {
             "type": "string",
-            "enum": ["edit", "delete", "clone", "enable"]
+            "enum": ["edit", "delete", "clone", "enable", "search"]
           }
         }
       },
@@ -2218,6 +2221,10 @@
                 "type": "string",
                 "maxLength": 100
               },
+              "inputHelperModule": {
+                "type": "string",
+                "maxLength": 100
+              },
               "warning": {
                 "$ref": "#/definitions/WarningMessage"
               }
diff --git a/splunk_add_on_ucc_framework/templates/input.helper-init-template b/splunk_add_on_ucc_framework/templates/input.helper-init-template
new file mode 100644
index 000000000..3c2e20846
--- /dev/null
+++ b/splunk_add_on_ucc_framework/templates/input.helper-init-template
@@ -0,0 +1,87 @@
+import json
+import logging
+
+import import_declare_test
+from solnlib import conf_manager, log
+from splunklib import modularinput as smi
+
+
+ADDON_NAME = "{{addon_name}}"
+
+
+def logger_for_input(input_name: str) -> logging.Logger:
+    return log.Logs().get_logger(f"{ADDON_NAME.lower()}_{input_name}")
+
+
+def get_account_api_key(session_key: str, account_name: str):
+    cfm = conf_manager.ConfManager(
+        session_key,
+        ADDON_NAME,
+        realm=f"__REST_CREDENTIAL__#{ADDON_NAME}#configs/conf-{{addon_rest_root}}_account",
+    )
+    account_conf_file = cfm.get_conf("{{addon_name}}_account")
+    return account_conf_file.get(account_name).get("api_key")
+
+
+def get_data_from_api(logger: logging.Logger, api_key: str):
+    logger.info("Getting data from an external API")
+    dummy_data = [
+        {
+            "line1": "hello",
+        },
+        {
+            "line2": "world",
+        },
+    ]
+    return dummy_data
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, event_writer: smi.EventWriter):
+    # inputs.inputs is a Python dictionary object like:
+    # {
+    #   "{{addon_input_name}}://<input_name>": {
+    #     "account": "<account_name>",
+    #     "disabled": "0",
+    #     "host": "$decideOnStartup",
+    #     "index": "<index_name>",
+    #     "interval": "<interval_value>",
+    #     "python.version": "python3",
+    #   },
+    # }
+    for input_name, input_item in inputs.inputs.items():
+        normalized_input_name = input_name.split("/")[-1]
+        logger = logger_for_input(normalized_input_name)
+        try:
+            session_key = inputs.metadata["session_key"]
+            log_level = conf_manager.get_log_level(
+                logger=logger,
+                session_key=session_key,
+                app_name=ADDON_NAME,
+                conf_name=f"{ADDON_NAME}_settings",
+            )
+            logger.setLevel(log_level)
+            log.modular_input_start(logger, normalized_input_name)
+            api_key = get_account_api_key(session_key, input_item.get("account"))
+            data = get_data_from_api(logger, api_key)
+            sourcetype = "dummy-data"
+            for line in data:
+                event_writer.write_event(
+                    smi.Event(
+                        data=json.dumps(line, ensure_ascii=False, default=str),
+                        index=input_item.get("index"),
+                        sourcetype=sourcetype,
+                    )
+                )
+            log.events_ingested(
+                logger,
+                normalized_input_name,
+                sourcetype,
+                len(data),
+            )
+            log.modular_input_end(logger, normalized_input_name)
+        except Exception as e:
+            log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
diff --git a/splunk_add_on_ucc_framework/templates/input.module-template b/splunk_add_on_ucc_framework/templates/input.module-template
new file mode 100644
index 000000000..b660a323d
--- /dev/null
+++ b/splunk_add_on_ucc_framework/templates/input.module-template
@@ -0,0 +1,19 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='{{input_name}}',
+    )
+    ew.write_event(event)
diff --git a/splunk_add_on_ucc_framework/templates/input.name.init-template b/splunk_add_on_ucc_framework/templates/input.name.init-template
deleted file mode 100644
index a7b76dd93..000000000
--- a/splunk_add_on_ucc_framework/templates/input.name.init-template
+++ /dev/null
@@ -1,110 +0,0 @@
-import json
-import logging
-import sys
-
-import import_declare_test
-from solnlib import conf_manager, log
-from splunklib import modularinput as smi
-
-ADDON_NAME = "{{addon_name}}"
-
-
-def logger_for_input(input_name: str) -> logging.Logger:
-    return log.Logs().get_logger(f"{ADDON_NAME.lower()}_{input_name}")
-
-
-def get_account_api_key(session_key: str, account_name: str):
-    cfm = conf_manager.ConfManager(
-        session_key,
-        ADDON_NAME,
-        realm=f"__REST_CREDENTIAL__#{ADDON_NAME}#configs/conf-{{addon_rest_root}}_account",
-    )
-    account_conf_file = cfm.get_conf("{{addon_name}}_account")
-    return account_conf_file.get(account_name).get("api_key")
-
-
-def get_data_from_api(logger: logging.Logger, api_key: str):
-    logger.info("Getting data from an external API")
-    dummy_data = [
-        {
-            "line1": "hello",
-        },
-        {
-            "line2": "world",
-        },
-    ]
-    return dummy_data
-
-
-class Input(smi.Script):
-    def __init__(self):
-        super().__init__()
-
-    def get_scheme(self):
-        scheme = smi.Scheme("{{addon_input_name}}")
-        scheme.description = "{{addon_input_name}} input"
-        scheme.use_external_validation = True
-        scheme.streaming_mode_xml = True
-        scheme.use_single_instance = False
-        scheme.add_argument(
-            smi.Argument(
-                "name", title="Name", description="Name", required_on_create=True
-            )
-        )
-        return scheme
-
-    def validate_input(self, definition: smi.ValidationDefinition):
-        return
-
-    def stream_events(self, inputs: smi.InputDefinition, event_writer: smi.EventWriter):
-        # inputs.inputs is a Python dictionary object like:
-        # {
-        #   "{{addon_input_name}}://<input_name>": {
-        #     "account": "<account_name>",
-        #     "disabled": "0",
-        #     "host": "$decideOnStartup",
-        #     "index": "<index_name>",
-        #     "interval": "<interval_value>",
-        #     "python.version": "python3",
-        #   },
-        # }
-        for input_name, input_item in inputs.inputs.items():
-            normalized_input_name = input_name.split("/")[-1]
-            logger = logger_for_input(normalized_input_name)
-            try:
-                session_key = self._input_definition.metadata["session_key"]
-                log_level = conf_manager.get_log_level(
-                    logger=logger,
-                    session_key=session_key,
-                    app_name=ADDON_NAME,
-                    conf_name=f"{ADDON_NAME}_settings",
-                )
-                logger.setLevel(log_level)
-                log.modular_input_start(logger, normalized_input_name)
-                api_key = get_account_api_key(session_key, input_item.get("account"))
-                data = get_data_from_api(logger, api_key)
-                sourcetype = "dummy-data"
-                for line in data:
-                    event_writer.write_event(
-                        smi.Event(
-                            data=json.dumps(line, ensure_ascii=False, default=str),
-                            index=input_item.get("index"),
-                            sourcetype=sourcetype,
-                        )
-                    )
-                log.events_ingested(
-                    logger,
-                    input_name,
-                    sourcetype,
-                    len(data),
-                    input_item.get("index"),
-                    account=input_item.get("account")
-                )
-                log.modular_input_end(logger, normalized_input_name)
-            except Exception as e:
-                log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
-
-
-if __name__ == "__main__":
-    exit_code = Input().run(sys.argv)
-    sys.exit(exit_code)
diff --git a/splunk_add_on_ucc_framework/templates/input.template b/splunk_add_on_ucc_framework/templates/input.template
index 8026bb9e1..2b1b4f63c 100644
--- a/splunk_add_on_ucc_framework/templates/input.template
+++ b/splunk_add_on_ucc_framework/templates/input.template
@@ -1,12 +1,17 @@
 import import_declare_test
 
-import sys
+{% if not input_helper_module -%}
 import json
+{% endif -%}
+import sys
 
 from splunklib import modularinput as smi
+{%- if input_helper_module %}
+from {{ input_helper_module }} import stream_events, validate_input
+{%- endif %}
 
-class {{class_name}}(smi.Script):
 
+class {{class_name}}(smi.Script):
     def __init__(self):
         super({{class_name}}, self).__init__()
 
@@ -25,20 +30,27 @@ class {{class_name}}(smi.Script):
                 required_on_create=True
             )
         )
-        {% for ent in entity %}
+        {%- for ent in entity %}
         scheme.add_argument(
             smi.Argument(
                 '{{ent.get("field")}}',
                 required_on_create={{True if ent.get("required") else False}},
             )
         )
-        {% endfor %}
+        {%- endfor %}
         return scheme
 
-    def validate_input(self, definition):
+    def validate_input(self, definition: smi.ValidationDefinition):
+        {%- if input_helper_module %}
+        return validate_input(definition)
+        {%- else %}
         return
+        {%- endif %}
 
-    def stream_events(self, inputs, ew):
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
+        {%- if input_helper_module %}
+        return stream_events(inputs, ew)
+        {%- else %}
         input_items = [{'count': len(inputs.inputs)}]
         for input_name, input_item in inputs.inputs.items():
             input_item['name'] = input_name
@@ -48,6 +60,7 @@ class {{class_name}}(smi.Script):
             sourcetype='{{input_name}}',
         )
         ew.write_event(event)
+        {%- endif %}
 
 
 if __name__ == '__main__':
diff --git a/ui/package.json b/ui/package.json
index 1903341be..e3baccaed 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -29,12 +29,12 @@
     "@splunk/react-icons": "^4.4.0",
     "@splunk/react-page": "^7.0.0",
     "@splunk/react-toast-notifications": "^0.11.3",
-    "@splunk/react-ui": "4.28.2",
+    "@splunk/react-ui": "^4.30.0",
     "@splunk/splunk-utils": "^3.0.1",
-    "@splunk/themes": "^0.17.0",
+    "@splunk/themes": "^0.18.0",
     "@splunk/ui-utils": "^1.6.0",
     "@splunk/visualization-context": "^26.0.0",
-    "@storybook/test": "^8.0.9",
+    "@storybook/test": "^8.0.10",
     "axios": "^1.6.8",
     "immutability-helper": "^3.1.1",
     "license-webpack-plugin": "^4.0.2",
@@ -43,38 +43,38 @@
     "react": "^16.14.0",
     "react-dom": "^16.14.0",
     "react-is": "^16.13.1",
-    "react-router-dom": "^6.23.0",
+    "react-router-dom": "^6.23.1",
     "styled-components": "^5.3.11",
     "uuid": "^9.0.1",
-    "zod": "^3.23.4"
+    "zod": "^3.23.8"
   },
   "devDependencies": {
-    "@babel/core": "^7.24.4",
-    "@babel/eslint-parser": "^7.24.1",
+    "@babel/core": "^7.24.5",
+    "@babel/eslint-parser": "^7.24.5",
     "@babel/plugin-transform-runtime": "^7.24.3",
-    "@babel/preset-env": "^7.24.4",
+    "@babel/preset-env": "^7.24.5",
     "@babel/preset-react": "^7.24.1",
-    "@kickstartds/core": "^4.0.3",
+    "@kickstartds/core": "^4.0.5",
     "@kickstartds/storybook-addon-jsonschema": "^4.0.0",
     "@splunk/babel-preset": "^4.0.0",
     "@splunk/eslint-config": "^4.0.0",
     "@splunk/webpack-configs": "^7.0.2",
-    "@storybook/addon-a11y": "^8.0.9",
-    "@storybook/addon-essentials": "^8.0.9",
-    "@storybook/addon-interactions": "^8.0.9",
-    "@storybook/addon-links": "^8.0.9",
+    "@storybook/addon-a11y": "^8.0.10",
+    "@storybook/addon-essentials": "^8.0.10",
+    "@storybook/addon-interactions": "^8.0.10",
+    "@storybook/addon-links": "^8.0.10",
     "@storybook/addon-webpack5-compiler-babel": "^3.0.3",
-    "@storybook/blocks": "^8.0.9",
-    "@storybook/react": "^8.0.9",
-    "@storybook/react-webpack5": "^8.0.9",
-    "@storybook/test-runner": "^0.17.0",
+    "@storybook/blocks": "^8.0.10",
+    "@storybook/react": "^8.0.10",
+    "@storybook/react-webpack5": "^8.0.10",
+    "@storybook/test-runner": "^0.18.0",
     "@testing-library/dom": "^8.20.1",
-    "@testing-library/jest-dom": "^6.4.2",
+    "@testing-library/jest-dom": "^6.4.5",
     "@testing-library/react": "^12.1.5",
     "@testing-library/user-event": "^14.5.2",
     "@types/jest": "^29.5.12",
     "@types/js-yaml": "^4.0.9",
-    "@types/node": "^20.12.7",
+    "@types/node": "^20.12.11",
     "@types/react": "^16.14.60",
     "@typescript-eslint/eslint-plugin": "^6.21.0",
     "@typescript-eslint/parser": "^6.21.0",
@@ -83,12 +83,12 @@
     "babel-loader": "^8.3.0",
     "cross-env": "^7.0.3",
     "css-loader": "^7.1.1",
-    "eslint": "^7.32.0",
+    "eslint": "^8.57.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": "^28.3.0",
+    "eslint-plugin-jest": "^28.5.0",
     "eslint-plugin-jsx-a11y": "^6.8.0",
     "eslint-plugin-prettier": "^4.2.1",
     "eslint-plugin-react": "^7.34.1",
@@ -99,11 +99,11 @@
     "jest-environment-jsdom": "^29.7.0",
     "jest-image-snapshot": "^6.4.0",
     "js-yaml": "^4.1.0",
-    "msw": "^2.2.14",
+    "msw": "^2.3.0",
     "msw-storybook-addon": "2.0.0--canary.122.06f0c92.0",
     "prettier": "^2.8.8",
     "querystring-es3": "^0.2.1",
-    "storybook": "^8.0.9",
+    "storybook": "^8.0.10",
     "style-loader": "^4.0.0",
     "stylelint": "^14.16.1",
     "ts-node": "^10.9.2",
@@ -121,10 +121,9 @@
     "css-what": "^5.1.0",
     "glob-parent": "^5.1.2",
     "postcss": "^8.4.38",
-    "semver": "^7.6.0",
+    "semver": "^7.6.2",
     "strip-ansi": "^6.0.1",
-    "string-width": "^4.2.3",
-    "@splunk/react-ui": "4.28.2"
+    "string-width": "^4.2.3"
   },
   "engines": {
     "node": ">=20.10.0",
diff --git a/ui/src/components/CheckboxGroup/checkboxGroupMocks.json b/ui/src/components/CheckboxGroup/checkboxGroupMocks.json
index 147760e3f..790b61868 100644
--- a/ui/src/components/CheckboxGroup/checkboxGroupMocks.json
+++ b/ui/src/components/CheckboxGroup/checkboxGroupMocks.json
@@ -35,6 +35,7 @@
         "actions": [
           "edit",
           "delete",
+          "search",
           "clone"
         ]
       },
@@ -66,7 +67,7 @@
                       "expand": true
                     },
                     "fields": [
-                      "field223",
+                      "requiredField",
                       "160validation"
                     ]
                   }
@@ -91,12 +92,13 @@
                     }
                   },
                   {
-                    "field": "field223",
+                    "field": "requiredField",
                     "checkbox": {
                       "label": "Required field",
                       "defaultValue": true
                     },
                     "input": {
+                      "defaultValue": 10,
                       "required": true
                     }
                   },
diff --git a/ui/src/components/CheckboxGroup/checkboxGroupRequiredMocks.json b/ui/src/components/CheckboxGroup/checkboxGroupRequiredMocks.json
index 8bb7f3213..9b20a941d 100644
--- a/ui/src/components/CheckboxGroup/checkboxGroupRequiredMocks.json
+++ b/ui/src/components/CheckboxGroup/checkboxGroupRequiredMocks.json
@@ -35,6 +35,7 @@
         "actions": [
           "edit",
           "delete",
+          "search",
           "clone"
         ]
       },
diff --git a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-input-page-view-chromium.png b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-input-page-view-chromium.png
index 647edc087..2cc4b9dda 100644
--- a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-input-page-view-chromium.png
+++ b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-input-page-view-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:7fe5c833fe8e3be4d50aa84a1964e90f06fd6a4ced7c80bfff86b8775c343f63
-size 34594
+oid sha256:1bdcc9dcbed5dd7996dac9e5210ffc45ab1048d7f63e4fc886ab8615cd03003d
+size 34943
diff --git a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-mixed-with-groups-chromium.png b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-mixed-with-groups-chromium.png
index 3eebcf826..f2a95322a 100644
--- a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-mixed-with-groups-chromium.png
+++ b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-mixed-with-groups-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:905142d500d4157f9ea49f394729f153630163742d40c3d964dec89e346a75b2
-size 27394
+oid sha256:3f22b64ccd92f63f80f34488a1e34db6d22c6754ead2b53c27cc70f0eb28dcdb
+size 27382
diff --git a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-required-view-chromium.png b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-required-view-chromium.png
index 0e4d851e1..d72a165e1 100644
--- a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-required-view-chromium.png
+++ b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-required-view-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:8fa0b818f314fcde49b9f63bfcfba2d1c6211ee8588dfc98cbb5a27de0a0fff0
-size 42374
+oid sha256:8e165b76640889a7e37f00d3b46bcfb2c6d960bae096a90bcf286135643ea208
+size 42339
diff --git a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-with-single-group-chromium.png b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-with-single-group-chromium.png
index f7592ab03..1899b1907 100644
--- a/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-with-single-group-chromium.png
+++ b/ui/src/components/CheckboxGroup/stories/__images__/CheckboxGroup-with-single-group-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:a4770d564af7cfd05fa2bbb7034c7605804c01dedd8c17ae3d74d29bc4007fb5
-size 14888
+oid sha256:30a092736ee94e80150d5945bf423d93464560aa3c87728c007ed84f9f2919c1
+size 14880
diff --git a/ui/src/components/DownloadButton/OpenApiDownloadBtn.tsx b/ui/src/components/DownloadButton/OpenApiDownloadBtn.tsx
index 7cf7a3304..a7f46a8b0 100644
--- a/ui/src/components/DownloadButton/OpenApiDownloadBtn.tsx
+++ b/ui/src/components/DownloadButton/OpenApiDownloadBtn.tsx
@@ -1,19 +1,28 @@
 import React from 'react';
 import Icon from '@splunk/react-icons/ArrowBroadUnderbarDown';
+import styled from 'styled-components';
 import { getBuildDirPath } from '../../util/script';
 import DownloadButton from './DownloadButton';
 
 function OpenApiDownloadButton() {
+    const StyledDiv = styled.div`
+        text-overflow: ellipsis;
+        overflow: hidden;
+    `;
+
+    const StyledIcon = styled(Icon)`
+        margin-right: 4px;
+    `;
     return (
-        <div>
-            <DownloadButton
-                fileUrl={getBuildDirPath().replace('js/build', 'openapi.json')}
-                fileNameAfterDownload="openapi.json"
-            >
-                <Icon />
+        <DownloadButton
+            fileUrl={getBuildDirPath().replace('js/build', 'openapi.json')}
+            fileNameAfterDownload="openapi.json"
+        >
+            <StyledDiv>
+                <StyledIcon />
                 <span>OpenAPI.json</span>
-            </DownloadButton>
-        </div>
+            </StyledDiv>
+        </DownloadButton>
     );
 }
 
diff --git a/ui/src/components/FileInputComponent/FileInputComponent.tsx b/ui/src/components/FileInputComponent/FileInputComponent.tsx
index 9d44122e3..115b0075c 100644
--- a/ui/src/components/FileInputComponent/FileInputComponent.tsx
+++ b/ui/src/components/FileInputComponent/FileInputComponent.tsx
@@ -18,6 +18,7 @@ interface FileInputComponentProps {
         fileSupportMessage?: string;
         supportedFileTypes: string[];
         maxFileSize?: number;
+        useBase64Encoding?: boolean;
     };
     disabled: boolean;
     handleChange: (field: string, data: string) => void;
@@ -52,6 +53,7 @@ function FileInputComponent(props: FileInputComponentProps) {
         fileSupportMessage,
         supportedFileTypes,
         maxFileSize = FileConstants.FILE_MAX_SIZE,
+        useBase64Encoding = false,
     } = controlOptions;
 
     const fileReader = new FileReader();
@@ -80,7 +82,11 @@ function FileInputComponent(props: FileInputComponentProps) {
                 fileReader.abort();
             }
 
-            fileReader.readAsArrayBuffer(file);
+            if (useBase64Encoding) {
+                fileReader.readAsDataURL(file);
+            } else {
+                fileReader.readAsArrayBuffer(file);
+            }
 
             fileReader.onload = () => {
                 const isValid = isValidFile(
@@ -93,7 +99,22 @@ function FileInputComponent(props: FileInputComponentProps) {
                     setErrorMsg('');
                     try {
                         if (fileReader.result && typeof fileReader.result !== 'string') {
+                            // array buffer and utf-8 encoding
                             handleChange(field, textDecoder.decode(fileReader.result));
+                        } else if (
+                            fileReader.result &&
+                            typeof fileReader.result === 'string' &&
+                            fileReader.result.includes('base64,')
+                        ) {
+                            // base 64 encoding
+                            const beforeContent = fileReader.result.indexOf('base64,');
+                            const pureFileContent = fileReader.result.slice(beforeContent + 7);
+                            handleChange(field, pureFileContent);
+                        } else {
+                            // eslint-disable-next-line no-console
+                            console.log(
+                                "File could not be processed as it's format isn't recognized"
+                            );
                         }
                     } catch (err) {
                         // eslint-disable-next-line no-console
diff --git a/ui/src/components/Group/Group.tsx b/ui/src/components/Group/Group.tsx
index 7e1e29087..e86297c8a 100644
--- a/ui/src/components/Group/Group.tsx
+++ b/ui/src/components/Group/Group.tsx
@@ -1,6 +1,7 @@
 import React, { ReactNode } from 'react';
 import styled from 'styled-components';
 import CollapsiblePanel from '@splunk/react-ui/CollapsiblePanel';
+import { variables } from '@splunk/themes';
 
 const GroupWrapper = styled.div`
     display: flex;
@@ -11,13 +12,13 @@ const GroupWrapper = styled.div`
 const CollapsiblePanelWrapper = styled(CollapsiblePanel)`
     span {
         button {
-            background-color: #f2f4f5;
+            background-color: ${variables.neutral100};
             font-size: 14px;
 
             &:hover:not([disabled]),
             &:focus:not([disabled]),
             &:active:not([disabled]) {
-                background-color: #f2f4f5;
+                background-color: ${variables.neutral300};
                 box-shadow: none;
             }
         }
@@ -33,7 +34,7 @@ const CustomGroupLabel = styled.div`
     display: flex;
     justify-content: space-between;
     padding: 6px 10px;
-    background-color: #f2f4f5;
+    background-color: ${variables.neutral100};
     font-size: 14px;
     margin-bottom: 10px;
 `;
diff --git a/ui/src/components/Group/stories/__images__/Group-base-chromium.png b/ui/src/components/Group/stories/__images__/Group-base-chromium.png
index 6f5778903..e74d6c0e1 100644
--- a/ui/src/components/Group/stories/__images__/Group-base-chromium.png
+++ b/ui/src/components/Group/stories/__images__/Group-base-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:08084ab1f18556a2a96c0fc3ba709141b01f469f94afa9d2516667363821859a
-size 10027
+oid sha256:f39d293ab15418dde4af0f3ba2fa7a0aee25ad2f8dc22437920a3022811ed03f
+size 10030
diff --git a/ui/src/components/Group/stories/__images__/Group-expandable-chromium.png b/ui/src/components/Group/stories/__images__/Group-expandable-chromium.png
index 875d75dd1..69978f919 100644
--- a/ui/src/components/Group/stories/__images__/Group-expandable-chromium.png
+++ b/ui/src/components/Group/stories/__images__/Group-expandable-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:19d4783b09dc15f9eea401abc495d76e84e48c11f38326bfd25393d3e4f164d4
-size 9625
+oid sha256:4e37bd580e702dcef2891c0a20960dfb8f64ee9418fa2d8baa135df27445cc83
+size 9632
diff --git a/ui/src/components/table/CustomTableRow.jsx b/ui/src/components/table/CustomTableRow.jsx
index aea444433..6b33d8b83 100644
--- a/ui/src/components/table/CustomTableRow.jsx
+++ b/ui/src/components/table/CustomTableRow.jsx
@@ -7,6 +7,7 @@ import Table from '@splunk/react-ui/Table';
 import ButtonGroup from '@splunk/react-ui/ButtonGroup';
 import Tooltip from '@splunk/react-ui/Tooltip';
 import Pencil from '@splunk/react-icons/Pencil';
+import Magnifier from '@splunk/react-icons/Magnifier';
 import Clone from '@splunk/react-icons/enterprise/Clone';
 import Trash from '@splunk/react-icons/enterprise/Trash';
 import styled from 'styled-components';
@@ -73,6 +74,22 @@ function CustomTableRow(props) {
                             />
                         </Tooltip>
                     )}
+                    {rowActions.includes('search') && (
+                        <Tooltip
+                            content={_(
+                                `Go to search for events associated with ${selectedRow.name}`
+                            )}
+                        >
+                            <ActionButtonComponent
+                                appearance="flat"
+                                icon={<Magnifier screenReaderText={null} size={1} />}
+                                to={`/app/search/search?q=search%20index%3D_internal%20source%3D*${selectedRow.name}*`}
+                                className="searchBtn"
+                                inline={false}
+                                target="_blank"
+                            />
+                        </Tooltip>
+                    )}
                     {rowActions.includes('delete') && (
                         <Tooltip content={_('Delete')}>
                             <ActionButtonComponent
diff --git a/ui/src/components/table/CustomTableStyle.jsx b/ui/src/components/table/CustomTableStyle.jsx
index a012e9db4..251732645 100644
--- a/ui/src/components/table/CustomTableStyle.jsx
+++ b/ui/src/components/table/CustomTableStyle.jsx
@@ -6,6 +6,8 @@ import WaitSpinner from '@splunk/react-ui/WaitSpinner';
 export const ActionButtonComponent = styled(Button)`
     margin: 0px 1px;
     border: none;
+    display: flex;
+    justify-content: center;
 `;
 
 export const WaitSpinnerWrapper = styled(WaitSpinner)`
diff --git a/ui/src/components/table/TableExpansionRow.jsx b/ui/src/components/table/TableExpansionRow.jsx
index 96302820f..0e401e4fd 100644
--- a/ui/src/components/table/TableExpansionRow.jsx
+++ b/ui/src/components/table/TableExpansionRow.jsx
@@ -1,7 +1,6 @@
 import React from 'react';
 import DL from '@splunk/react-ui/DefinitionList';
 import Table from '@splunk/react-ui/Table';
-import Button from '@splunk/react-ui/Button';
 import styled from 'styled-components';
 import { _ } from '@splunk/ui-utils/i18n';
 
@@ -54,14 +53,7 @@ export function getExpansionRow(colSpan, row, moreInfo) {
                         })}
                     </>
                 ) : (
-                    <>
-                        <DL termWidth={250}>{getExpansionRowData(row, moreInfo)}</DL>
-                        <Button
-                            to={`/app/search/search?q=search%20index%3D_internal%20source%3D*${row.name}*`}
-                            openInNewContext
-                            label={_(`Show ${row.name} input events`)}
-                        />
-                    </>
+                    <DL termWidth={250}>{getExpansionRowData(row, moreInfo)}</DL>
                 )}
             </TableCellWrapper>
         </Table.Row>
diff --git a/ui/src/mocks/server-response.ts b/ui/src/mocks/server-response.ts
index 8cb6f50fc..80dedd53d 100644
--- a/ui/src/mocks/server-response.ts
+++ b/ui/src/mocks/server-response.ts
@@ -24,3 +24,17 @@ export const mockServerResponseWithContent = {
     ],
     messages: [],
 };
+
+export const mockServerResponseForInput = {
+    links: {
+        create: `/servicesNS/nobody/${MOCKED_TA_NAME}/${MOCKED_TA_INPUT}/_new`,
+    },
+    updated: '2023-08-21T11:54:12+00:00',
+    entry: [
+        {
+            name: 'name',
+            content: {},
+        },
+    ],
+    messages: [],
+};
diff --git a/ui/src/pages/Configuration/ConfigurationPage.jsx b/ui/src/pages/Configuration/ConfigurationPage.jsx
index ddaa3b606..1a63f944c 100644
--- a/ui/src/pages/Configuration/ConfigurationPage.jsx
+++ b/ui/src/pages/Configuration/ConfigurationPage.jsx
@@ -106,7 +106,7 @@ function ConfigurationPage() {
                             <SubTitleComponent>{_(description || '')}</SubTitleComponent>
                             <SubDescription {...subDescription} />
                         </ColumnLayout.Column>
-                        <ColumnLayout.Column span={1} style={{ textAlignLast: 'right' }}>
+                        <ColumnLayout.Column span={3} style={{ textAlignLast: 'right' }}>
                             <OpenApiDownloadButton />
                         </ColumnLayout.Column>
                     </Row>
diff --git a/ui/src/pages/Configuration/stories/__images__/ConfigurationPage-configuration-page-view-chromium.png b/ui/src/pages/Configuration/stories/__images__/ConfigurationPage-configuration-page-view-chromium.png
index d19458428..15f4350c4 100644
--- a/ui/src/pages/Configuration/stories/__images__/ConfigurationPage-configuration-page-view-chromium.png
+++ b/ui/src/pages/Configuration/stories/__images__/ConfigurationPage-configuration-page-view-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:a7fc1fa25f2b0c50734f46bc73bc4890def07c90c371d035a702c51b84ec36c5
-size 62232
+oid sha256:d5efe48b76d77b4393a181f08645895297b9f4622834dccb70915e2267b2f4c8
+size 63090
diff --git a/ui/src/pages/Configuration/stories/globalConfig.json b/ui/src/pages/Configuration/stories/globalConfig.json
index c05961c9b..aaa7580e7 100644
--- a/ui/src/pages/Configuration/stories/globalConfig.json
+++ b/ui/src/pages/Configuration/stories/globalConfig.json
@@ -17,7 +17,7 @@
             }
           },
           "table": {
-            "actions": ["edit", "delete", "clone"],
+            "actions": ["edit", "delete","search", "clone"],
             "header": [
               {
                 "label": "Name",
@@ -687,7 +687,7 @@
       "title": "Inputs",
       "description": "Manage your data inputs",
       "table": {
-        "actions": ["edit", "enable", "delete", "clone"],
+        "actions": ["edit", "enable", "delete","search", "clone"],
         "header": [
           {
             "label": "Name",
diff --git a/ui/src/pages/Input/stories/InputPage.stories.tsx b/ui/src/pages/Input/stories/InputPage.stories.tsx
index 4593de0dd..e2f29c40d 100644
--- a/ui/src/pages/Input/stories/InputPage.stories.tsx
+++ b/ui/src/pages/Input/stories/InputPage.stories.tsx
@@ -5,7 +5,7 @@ import { userEvent, within } from '@storybook/test';
 import { setUnifiedConfig } from '../../../util/util';
 import globalConfig from './globalConfig.json';
 import InputPage from '../InputPage';
-import { mockServerResponse } from '../../../mocks/server-response';
+import { mockServerResponseForInput } from '../../../mocks/server-response';
 
 const meta = {
     component: InputPage,
@@ -20,9 +20,11 @@ const meta = {
     parameters: {
         msw: {
             handlers: [
-                http.get('/servicesNS/nobody/-/:name', () => HttpResponse.json(mockServerResponse)),
+                http.get('/servicesNS/nobody/-/:name', () =>
+                    HttpResponse.json(mockServerResponseForInput)
+                ),
                 http.post('/servicesNS/nobody/-/:name', () =>
-                    HttpResponse.json(mockServerResponse)
+                    HttpResponse.json(mockServerResponseForInput)
                 ),
             ],
         },
diff --git a/ui/src/pages/Input/stories/__images__/InputPage-input-page-view-chromium.png b/ui/src/pages/Input/stories/__images__/InputPage-input-page-view-chromium.png
index 7ced66d70..ef2a9f35d 100644
--- a/ui/src/pages/Input/stories/__images__/InputPage-input-page-view-chromium.png
+++ b/ui/src/pages/Input/stories/__images__/InputPage-input-page-view-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:07916ace119a37b1146ccca3bfc9f95e26439ad05048c75e9a0ba826ab9d33f0
-size 75264
+oid sha256:a0b544c54e51680486aae1ca0ae5ccdf5fc22cb80d9f47549b67efa8818501ec
+size 77723
diff --git a/ui/src/pages/Input/stories/__images__/InputPage-input-tab-view-chromium.png b/ui/src/pages/Input/stories/__images__/InputPage-input-tab-view-chromium.png
index 08e304aaf..12837be0f 100644
--- a/ui/src/pages/Input/stories/__images__/InputPage-input-tab-view-chromium.png
+++ b/ui/src/pages/Input/stories/__images__/InputPage-input-tab-view-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:cd60fbc19fd7ce03a303fe613d5098739dd2aeec9fd58bb60a22e4413f5ccee6
-size 70422
+oid sha256:d01699d9eda24e693d3d319f9b49f567c8aa303cd247d17b8c4aa41c3651a3d8
+size 70446
diff --git a/ui/src/pages/Input/stories/globalConfig.json b/ui/src/pages/Input/stories/globalConfig.json
index 5675acf60..2a507f02e 100644
--- a/ui/src/pages/Input/stories/globalConfig.json
+++ b/ui/src/pages/Input/stories/globalConfig.json
@@ -385,7 +385,7 @@
       "description": "Manage your data inputs",
       "table": {
         "actions": [
-          "edit", "enable", "delete", "clone"
+          "edit", "enable", "delete","search", "clone"
         ],
         "header": [
           {
diff --git a/ui/src/pages/stories/__images__/GlobalConfigPlayground-global-config-playground-chromium.png b/ui/src/pages/stories/__images__/GlobalConfigPlayground-global-config-playground-chromium.png
index 79b1f2855..1cfbab929 100644
--- a/ui/src/pages/stories/__images__/GlobalConfigPlayground-global-config-playground-chromium.png
+++ b/ui/src/pages/stories/__images__/GlobalConfigPlayground-global-config-playground-chromium.png
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:beac17d9a0fdf25c8e4d26f21f16275750fd404f3783ed2f9e85bcece3484334
-size 65388
+oid sha256:e9e6dff1cf59f529c1e95a35d546f080f506d182c842d2cb246c60c4240a9588
+size 65929
diff --git a/ui/src/pages/stories/globalConfig/globalConfig.json b/ui/src/pages/stories/globalConfig/globalConfig.json
index 2dc4b7c2d..90a8d57c9 100644
--- a/ui/src/pages/stories/globalConfig/globalConfig.json
+++ b/ui/src/pages/stories/globalConfig/globalConfig.json
@@ -1351,7 +1351,7 @@
         ]
       },
       "table": {
-        "actions": ["edit", "enable", "delete", "clone"],
+        "actions": ["edit", "enable", "delete","search", "clone"],
         "header": [
           {
             "label": "Name",
diff --git a/ui/src/public/mockServiceWorker.js b/ui/src/public/mockServiceWorker.js
index e891a6854..bdfdb11d3 100644
--- a/ui/src/public/mockServiceWorker.js
+++ b/ui/src/public/mockServiceWorker.js
@@ -8,7 +8,7 @@
  * - Please do NOT serve this file on production.
  */
 
-const PACKAGE_VERSION = '2.2.14'
+const PACKAGE_VERSION = '2.3.0'
 const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423'
 const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
 const activeClientIds = new Set()
diff --git a/ui/src/types/globalConfig/entities.ts b/ui/src/types/globalConfig/entities.ts
index 47bd8ae01..a8b54cca8 100644
--- a/ui/src/types/globalConfig/entities.ts
+++ b/ui/src/types/globalConfig/entities.ts
@@ -232,6 +232,7 @@ export const FileEntity = CommonEditableEntityFields.extend({
             maxFileSize: z.number().optional(),
             fileSupportMessage: z.string().optional(),
             supportedFileTypes: z.array(z.string()),
+            useBase64Encoding: z.boolean().default(false).optional(),
         })
         .optional(),
     modifyFieldsOnValue: ModifyFieldsOnValue,
diff --git a/ui/src/types/globalConfig/pages.ts b/ui/src/types/globalConfig/pages.ts
index 5f7cbec1d..e2497b6ed 100644
--- a/ui/src/types/globalConfig/pages.ts
+++ b/ui/src/types/globalConfig/pages.ts
@@ -20,7 +20,7 @@ export const TableSchema = z.object({
         })
     ),
     customRow: z.record(z.any()).optional(),
-    actions: z.array(z.enum(['edit', 'delete', 'clone', 'enable'])),
+    actions: z.array(z.enum(['edit', 'delete', 'clone', 'enable', 'search'])),
 });
 
 // TODO add "required": ["entity", "name", "title"] or required": ["customTab", "name", "title"]
diff --git a/ui/yarn.lock b/ui/yarn.lock
index 3f2510a97..250ccff4c 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -22,14 +22,7 @@
   dependencies:
     default-browser-id "3.0.0"
 
-"@babel/code-frame@7.12.11":
-  version "7.12.11"
-  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
-  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
-  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.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2":
+"@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", "@babel/code-frame@^7.24.2":
   version "7.24.2"
   resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
   integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
@@ -42,42 +35,42 @@
   resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a"
   integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==
 
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.22.5", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.23.7", "@babel/core@^7.23.9", "@babel/core@^7.24.4", "@babel/core@^7.7.5":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717"
-  integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.22.5", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.23.7", "@babel/core@^7.23.9", "@babel/core@^7.24.5", "@babel/core@^7.7.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a"
+  integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==
   dependencies:
     "@ampproject/remapping" "^2.2.0"
     "@babel/code-frame" "^7.24.2"
-    "@babel/generator" "^7.24.4"
+    "@babel/generator" "^7.24.5"
     "@babel/helper-compilation-targets" "^7.23.6"
-    "@babel/helper-module-transforms" "^7.23.3"
-    "@babel/helpers" "^7.24.4"
-    "@babel/parser" "^7.24.4"
+    "@babel/helper-module-transforms" "^7.24.5"
+    "@babel/helpers" "^7.24.5"
+    "@babel/parser" "^7.24.5"
     "@babel/template" "^7.24.0"
-    "@babel/traverse" "^7.24.1"
-    "@babel/types" "^7.24.0"
+    "@babel/traverse" "^7.24.5"
+    "@babel/types" "^7.24.5"
     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.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz#e27eee93ed1d271637165ef3a86e2b9332395c32"
-  integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==
+"@babel/eslint-parser@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz#3b0f7d383a540329a30a6a9937cfc89461d26217"
+  integrity sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==
   dependencies:
     "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
     eslint-visitor-keys "^2.1.0"
     semver "^6.3.1"
 
-"@babel/generator@^7.22.5", "@babel/generator@^7.23.0", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498"
-  integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==
+"@babel/generator@^7.22.5", "@babel/generator@^7.23.0", "@babel/generator@^7.24.5", "@babel/generator@^7.7.2":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3"
+  integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==
   dependencies:
-    "@babel/types" "^7.24.0"
+    "@babel/types" "^7.24.5"
     "@jridgewell/gen-mapping" "^0.3.5"
     "@jridgewell/trace-mapping" "^0.3.25"
     jsesc "^2.5.1"
@@ -107,19 +100,19 @@
     lru-cache "^5.1.1"
     semver "^6.3.1"
 
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3"
-  integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4", "@babel/helper-create-class-features-plugin@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz#7d19da92c7e0cd8d11c09af2ce1b8e7512a6e723"
+  integrity sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
     "@babel/helper-environment-visitor" "^7.22.20"
     "@babel/helper-function-name" "^7.23.0"
-    "@babel/helper-member-expression-to-functions" "^7.23.0"
+    "@babel/helper-member-expression-to-functions" "^7.24.5"
     "@babel/helper-optimise-call-expression" "^7.22.5"
     "@babel/helper-replace-supers" "^7.24.1"
     "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
-    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/helper-split-export-declaration" "^7.24.5"
     semver "^6.3.1"
 
 "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5":
@@ -147,7 +140,7 @@
   resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
   integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
 
-"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0":
+"@babel/helper-function-name@^7.23.0":
   version "7.23.0"
   resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
   integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
@@ -162,12 +155,12 @@
   dependencies:
     "@babel/types" "^7.22.5"
 
-"@babel/helper-member-expression-to-functions@^7.23.0":
-  version "7.23.0"
-  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
-  integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
+"@babel/helper-member-expression-to-functions@^7.23.0", "@babel/helper-member-expression-to-functions@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz#5981e131d5c7003c7d1fa1ad49e86c9b097ec475"
+  integrity sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==
   dependencies:
-    "@babel/types" "^7.23.0"
+    "@babel/types" "^7.24.5"
 
 "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3":
   version "7.24.3"
@@ -176,16 +169,16 @@
   dependencies:
     "@babel/types" "^7.24.0"
 
-"@babel/helper-module-transforms@^7.23.3":
-  version "7.23.3"
-  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
-  integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+"@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545"
+  integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==
   dependencies:
     "@babel/helper-environment-visitor" "^7.22.20"
-    "@babel/helper-module-imports" "^7.22.15"
-    "@babel/helper-simple-access" "^7.22.5"
-    "@babel/helper-split-export-declaration" "^7.22.6"
-    "@babel/helper-validator-identifier" "^7.22.20"
+    "@babel/helper-module-imports" "^7.24.3"
+    "@babel/helper-simple-access" "^7.24.5"
+    "@babel/helper-split-export-declaration" "^7.24.5"
+    "@babel/helper-validator-identifier" "^7.24.5"
 
 "@babel/helper-optimise-call-expression@^7.22.5":
   version "7.22.5"
@@ -194,10 +187,10 @@
   dependencies:
     "@babel/types" "^7.22.5"
 
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
-  version "7.24.0"
-  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
-  integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.24.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a"
+  integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==
 
 "@babel/helper-remap-async-to-generator@^7.22.20":
   version "7.22.20"
@@ -217,12 +210,12 @@
     "@babel/helper-member-expression-to-functions" "^7.23.0"
     "@babel/helper-optimise-call-expression" "^7.22.5"
 
-"@babel/helper-simple-access@^7.22.5":
-  version "7.22.5"
-  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
-  integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+"@babel/helper-simple-access@^7.22.5", "@babel/helper-simple-access@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba"
+  integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==
   dependencies:
-    "@babel/types" "^7.22.5"
+    "@babel/types" "^7.24.5"
 
 "@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
   version "7.22.5"
@@ -231,22 +224,22 @@
   dependencies:
     "@babel/types" "^7.22.5"
 
-"@babel/helper-split-export-declaration@^7.22.6":
-  version "7.22.6"
-  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
-  integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+"@babel/helper-split-export-declaration@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6"
+  integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==
   dependencies:
-    "@babel/types" "^7.22.5"
+    "@babel/types" "^7.24.5"
 
-"@babel/helper-string-parser@^7.23.4":
+"@babel/helper-string-parser@^7.24.1":
   version "7.24.1"
   resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
   integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
 
-"@babel/helper-validator-identifier@^7.22.20":
-  version "7.22.20"
-  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
-  integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62"
+  integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==
 
 "@babel/helper-validator-option@^7.23.5":
   version "7.23.5"
@@ -254,45 +247,45 @@
   integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
 
 "@babel/helper-wrap-function@^7.22.20":
-  version "7.22.20"
-  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569"
-  integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz#335f934c0962e2c1ed1fb9d79e06a56115067c09"
+  integrity sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==
   dependencies:
-    "@babel/helper-function-name" "^7.22.5"
-    "@babel/template" "^7.22.15"
-    "@babel/types" "^7.22.19"
+    "@babel/helper-function-name" "^7.23.0"
+    "@babel/template" "^7.24.0"
+    "@babel/types" "^7.24.5"
 
-"@babel/helpers@^7.24.4":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6"
-  integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==
+"@babel/helpers@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a"
+  integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==
   dependencies:
     "@babel/template" "^7.24.0"
-    "@babel/traverse" "^7.24.1"
-    "@babel/types" "^7.24.0"
+    "@babel/traverse" "^7.24.5"
+    "@babel/types" "^7.24.5"
 
-"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2":
-  version "7.24.2"
-  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26"
-  integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==
+"@babel/highlight@^7.24.2":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e"
+  integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==
   dependencies:
-    "@babel/helper-validator-identifier" "^7.22.20"
+    "@babel/helper-validator-identifier" "^7.24.5"
     chalk "^2.4.2"
     js-tokens "^4.0.0"
     picocolors "^1.0.0"
 
-"@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.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4", "@babel/parser@^7.7.0":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
-  integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
+"@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.24.0", "@babel/parser@^7.24.5", "@babel/parser@^7.7.0":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790"
+  integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==
 
-"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1"
-  integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz#4c3685eb9cd790bcad2843900fe0250c91ccf895"
+  integrity sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==
   dependencies:
     "@babel/helper-environment-visitor" "^7.22.20"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
 
 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1":
   version "7.24.1"
@@ -530,12 +523,12 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.24.0"
 
-"@babel/plugin-transform-block-scoping@^7.24.4":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012"
-  integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==
+"@babel/plugin-transform-block-scoping@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz#89574191397f85661d6f748d4b89ee4d9ee69a2a"
+  integrity sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
 
 "@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.24.1":
   version "7.24.1"
@@ -554,18 +547,18 @@
     "@babel/helper-plugin-utils" "^7.24.0"
     "@babel/plugin-syntax-class-static-block" "^7.14.5"
 
-"@babel/plugin-transform-classes@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1"
-  integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==
+"@babel/plugin-transform-classes@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz#05e04a09df49a46348299a0e24bfd7e901129339"
+  integrity sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
     "@babel/helper-compilation-targets" "^7.23.6"
     "@babel/helper-environment-visitor" "^7.22.20"
     "@babel/helper-function-name" "^7.23.0"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/helper-replace-supers" "^7.24.1"
-    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/helper-split-export-declaration" "^7.24.5"
     globals "^11.1.0"
 
 "@babel/plugin-transform-computed-properties@^7.24.1":
@@ -576,12 +569,12 @@
     "@babel/helper-plugin-utils" "^7.24.0"
     "@babel/template" "^7.24.0"
 
-"@babel/plugin-transform-destructuring@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345"
-  integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==
+"@babel/plugin-transform-destructuring@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz#80843ee6a520f7362686d1a97a7b53544ede453c"
+  integrity sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
 
 "@babel/plugin-transform-dotall-regex@^7.24.1":
   version "7.24.1"
@@ -743,15 +736,15 @@
     "@babel/helper-plugin-utils" "^7.24.0"
     "@babel/plugin-syntax-numeric-separator" "^7.10.4"
 
-"@babel/plugin-transform-object-rest-spread@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff"
-  integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==
+"@babel/plugin-transform-object-rest-spread@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz#f91bbcb092ff957c54b4091c86bda8372f0b10ef"
+  integrity sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==
   dependencies:
     "@babel/helper-compilation-targets" "^7.23.6"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-transform-parameters" "^7.24.1"
+    "@babel/plugin-transform-parameters" "^7.24.5"
 
 "@babel/plugin-transform-object-super@^7.24.1":
   version "7.24.1"
@@ -769,21 +762,21 @@
     "@babel/helper-plugin-utils" "^7.24.0"
     "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
 
-"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6"
-  integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==
+"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.24.1", "@babel/plugin-transform-optional-chaining@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz#a6334bebd7f9dd3df37447880d0bd64b778e600f"
+  integrity sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
     "@babel/plugin-syntax-optional-chaining" "^7.8.3"
 
-"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510"
-  integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==
+"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz#5c3b23f3a6b8fed090f9b98f2926896d3153cc62"
+  integrity sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
 
 "@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.1":
   version "7.24.1"
@@ -793,14 +786,14 @@
     "@babel/helper-create-class-features-plugin" "^7.24.1"
     "@babel/helper-plugin-utils" "^7.24.0"
 
-"@babel/plugin-transform-private-property-in-object@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a"
-  integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==
+"@babel/plugin-transform-private-property-in-object@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz#f5d1fcad36e30c960134cb479f1ca98a5b06eda5"
+  integrity sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
-    "@babel/helper-create-class-features-plugin" "^7.24.1"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-create-class-features-plugin" "^7.24.5"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
 
 "@babel/plugin-transform-property-literals@^7.24.1":
@@ -899,21 +892,21 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.24.0"
 
-"@babel/plugin-transform-typeof-symbol@^7.24.1":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7"
-  integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==
+"@babel/plugin-transform-typeof-symbol@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz#703cace5ef74155fb5eecab63cbfc39bdd25fe12"
+  integrity sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
 
 "@babel/plugin-transform-typescript@^7.24.1", "@babel/plugin-transform-typescript@^7.8.3":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15"
-  integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz#bcba979e462120dc06a75bd34c473a04781931b8"
+  integrity sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.22.5"
-    "@babel/helper-create-class-features-plugin" "^7.24.4"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-create-class-features-plugin" "^7.24.5"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/plugin-syntax-typescript" "^7.24.1"
 
 "@babel/plugin-transform-unicode-escapes@^7.24.1":
@@ -947,16 +940,16 @@
     "@babel/helper-create-regexp-features-plugin" "^7.22.15"
     "@babel/helper-plugin-utils" "^7.24.0"
 
-"@babel/preset-env@^7.2.0", "@babel/preset-env@^7.23.2", "@babel/preset-env@^7.24.4":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b"
-  integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==
+"@babel/preset-env@^7.2.0", "@babel/preset-env@^7.23.2", "@babel/preset-env@^7.24.5":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz#6a9ac90bd5a5a9dae502af60dfc58c190551bbcd"
+  integrity sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==
   dependencies:
     "@babel/compat-data" "^7.24.4"
     "@babel/helper-compilation-targets" "^7.23.6"
-    "@babel/helper-plugin-utils" "^7.24.0"
+    "@babel/helper-plugin-utils" "^7.24.5"
     "@babel/helper-validator-option" "^7.23.5"
-    "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4"
+    "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.5"
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1"
     "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1"
     "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1"
@@ -983,12 +976,12 @@
     "@babel/plugin-transform-async-generator-functions" "^7.24.3"
     "@babel/plugin-transform-async-to-generator" "^7.24.1"
     "@babel/plugin-transform-block-scoped-functions" "^7.24.1"
-    "@babel/plugin-transform-block-scoping" "^7.24.4"
+    "@babel/plugin-transform-block-scoping" "^7.24.5"
     "@babel/plugin-transform-class-properties" "^7.24.1"
     "@babel/plugin-transform-class-static-block" "^7.24.4"
-    "@babel/plugin-transform-classes" "^7.24.1"
+    "@babel/plugin-transform-classes" "^7.24.5"
     "@babel/plugin-transform-computed-properties" "^7.24.1"
-    "@babel/plugin-transform-destructuring" "^7.24.1"
+    "@babel/plugin-transform-destructuring" "^7.24.5"
     "@babel/plugin-transform-dotall-regex" "^7.24.1"
     "@babel/plugin-transform-duplicate-keys" "^7.24.1"
     "@babel/plugin-transform-dynamic-import" "^7.24.1"
@@ -1008,13 +1001,13 @@
     "@babel/plugin-transform-new-target" "^7.24.1"
     "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1"
     "@babel/plugin-transform-numeric-separator" "^7.24.1"
-    "@babel/plugin-transform-object-rest-spread" "^7.24.1"
+    "@babel/plugin-transform-object-rest-spread" "^7.24.5"
     "@babel/plugin-transform-object-super" "^7.24.1"
     "@babel/plugin-transform-optional-catch-binding" "^7.24.1"
-    "@babel/plugin-transform-optional-chaining" "^7.24.1"
-    "@babel/plugin-transform-parameters" "^7.24.1"
+    "@babel/plugin-transform-optional-chaining" "^7.24.5"
+    "@babel/plugin-transform-parameters" "^7.24.5"
     "@babel/plugin-transform-private-methods" "^7.24.1"
-    "@babel/plugin-transform-private-property-in-object" "^7.24.1"
+    "@babel/plugin-transform-private-property-in-object" "^7.24.5"
     "@babel/plugin-transform-property-literals" "^7.24.1"
     "@babel/plugin-transform-regenerator" "^7.24.1"
     "@babel/plugin-transform-reserved-words" "^7.24.1"
@@ -1022,7 +1015,7 @@
     "@babel/plugin-transform-spread" "^7.24.1"
     "@babel/plugin-transform-sticky-regex" "^7.24.1"
     "@babel/plugin-transform-template-literals" "^7.24.1"
-    "@babel/plugin-transform-typeof-symbol" "^7.24.1"
+    "@babel/plugin-transform-typeof-symbol" "^7.24.5"
     "@babel/plugin-transform-unicode-escapes" "^7.24.1"
     "@babel/plugin-transform-unicode-property-regex" "^7.24.1"
     "@babel/plugin-transform-unicode-regex" "^7.24.1"
@@ -1092,9 +1085,9 @@
   integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
 
 "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.17.8", "@babel/runtime@^7.2.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
-  version "7.24.4"
-  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
-  integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c"
+  integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
   dependencies:
     regenerator-runtime "^0.14.0"
 
@@ -1107,29 +1100,29 @@
     "@babel/parser" "^7.24.0"
     "@babel/types" "^7.24.0"
 
-"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0":
-  version "7.24.1"
-  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c"
-  integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.5", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8"
+  integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==
   dependencies:
-    "@babel/code-frame" "^7.24.1"
-    "@babel/generator" "^7.24.1"
+    "@babel/code-frame" "^7.24.2"
+    "@babel/generator" "^7.24.5"
     "@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.24.1"
-    "@babel/types" "^7.24.0"
+    "@babel/helper-split-export-declaration" "^7.24.5"
+    "@babel/parser" "^7.24.5"
+    "@babel/types" "^7.24.5"
     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.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
-  version "7.24.0"
-  resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
-  integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+  version "7.24.5"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7"
+  integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
   dependencies:
-    "@babel/helper-string-parser" "^7.23.4"
-    "@babel/helper-validator-identifier" "^7.22.20"
+    "@babel/helper-string-parser" "^7.24.1"
+    "@babel/helper-validator-identifier" "^7.24.5"
     to-fast-properties "^2.0.0"
 
 "@base2/pretty-print-object@1.0.1":
@@ -1178,23 +1171,14 @@
   resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
   integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
 
-"@dnd-kit/accessibility@^3.0.0", "@dnd-kit/accessibility@^3.1.0":
+"@dnd-kit/accessibility@^3.1.0":
   version "3.1.0"
   resolved "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz#1054e19be276b5f1154ced7947fc0cb5d99192e0"
   integrity sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==
   dependencies:
     tslib "^2.0.0"
 
-"@dnd-kit/core@6.0.8":
-  version "6.0.8"
-  resolved "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005"
-  integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==
-  dependencies:
-    "@dnd-kit/accessibility" "^3.0.0"
-    "@dnd-kit/utilities" "^3.2.1"
-    tslib "^2.0.0"
-
-"@dnd-kit/core@^6.0.5":
+"@dnd-kit/core@^6.0.5", "@dnd-kit/core@^6.1.0":
   version "6.1.0"
   resolved "https://registry.npmjs.org/@dnd-kit/core/-/core-6.1.0.tgz#e81a3d10d9eca5d3b01cbf054171273a3fe01def"
   integrity sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==
@@ -1203,7 +1187,15 @@
     "@dnd-kit/utilities" "^3.2.2"
     tslib "^2.0.0"
 
-"@dnd-kit/sortable@7.0.2", "@dnd-kit/sortable@^7.0.1":
+"@dnd-kit/modifiers@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-7.0.0.tgz#229666dd4e8b9487f348035117f993af755b3db9"
+  integrity sha512-BG/ETy3eBjFap7+zIti53f0PCLGDzNXyTmn6fSdrudORf+OH04MxrW4p5+mPu4mgMk9kM41iYONjc3DOUWTcfg==
+  dependencies:
+    "@dnd-kit/utilities" "^3.2.2"
+    tslib "^2.0.0"
+
+"@dnd-kit/sortable@^7.0.1":
   version "7.0.2"
   resolved "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c"
   integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==
@@ -1211,14 +1203,15 @@
     "@dnd-kit/utilities" "^3.2.0"
     tslib "^2.0.0"
 
-"@dnd-kit/utilities@3.2.1":
-  version "3.2.1"
-  resolved "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz#53f9e2016fd2506ec49e404c289392cfff30332a"
-  integrity sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==
+"@dnd-kit/sortable@^8.0.0":
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-8.0.0.tgz#086b7ac6723d4618a4ccb6f0227406d8a8862a96"
+  integrity sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==
   dependencies:
+    "@dnd-kit/utilities" "^3.2.2"
     tslib "^2.0.0"
 
-"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1", "@dnd-kit/utilities@^3.2.2":
+"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.2":
   version "3.2.2"
   resolved "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz#5a32b6af356dc5f74d61b37d6f7129a4040ced7b"
   integrity sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==
@@ -1484,26 +1477,31 @@
   dependencies:
     eslint-visitor-keys "^3.3.0"
 
-"@eslint-community/regexpp@^4.5.1":
+"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
   version "4.10.0"
   resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
   integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
 
-"@eslint/eslintrc@^0.4.3":
-  version "0.4.3"
-  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
-  integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
+"@eslint/eslintrc@^2.1.4":
+  version "2.1.4"
+  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+  integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
   dependencies:
     ajv "^6.12.4"
-    debug "^4.1.1"
-    espree "^7.3.0"
-    globals "^13.9.0"
-    ignore "^4.0.6"
+    debug "^4.3.2"
+    espree "^9.6.0"
+    globals "^13.19.0"
+    ignore "^5.2.0"
     import-fresh "^3.2.1"
-    js-yaml "^3.13.1"
-    minimatch "^3.0.4"
+    js-yaml "^4.1.0"
+    minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
+"@eslint/js@8.57.0":
+  version "8.57.0"
+  resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+  integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
 "@fal-works/esbuild-plugin-global-externals@^2.1.2":
   version "2.1.2"
   resolved "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4"
@@ -1526,37 +1524,42 @@
   dependencies:
     "@hapi/hoek" "^9.0.0"
 
-"@humanwhocodes/config-array@^0.5.0":
-  version "0.5.0"
-  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
-  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
+"@humanwhocodes/config-array@^0.11.14":
+  version "0.11.14"
+  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+  integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
   dependencies:
-    "@humanwhocodes/object-schema" "^1.2.0"
-    debug "^4.1.1"
-    minimatch "^3.0.4"
+    "@humanwhocodes/object-schema" "^2.0.2"
+    debug "^4.3.1"
+    minimatch "^3.0.5"
 
-"@humanwhocodes/object-schema@^1.2.0":
-  version "1.2.1"
-  resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
-  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@humanwhocodes/module-importer@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+  integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.2":
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+  integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
 
 "@inquirer/confirm@^3.0.0":
-  version "3.1.6"
-  resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.6.tgz#e2b6bdfb2bf307a93024dc5325080b7b750c6c3f"
-  integrity sha512-Mj4TU29g6Uy+37UtpA8UpEOI2icBfpCwSW1QDtfx60wRhUy90s/kHPif2OXSSvuwDQT1lhAYRWUfkNf9Tecxvg==
+  version "3.1.7"
+  resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.7.tgz#4568196121e4d26681fc2ff8f1f8d0f2f15e9b73"
+  integrity sha512-BZjjj19W8gnh5UGFTdP5ZxpgMNRjy03Dzq3k28sB2MDlEUFrcyTkMEoGgvBmGpUw0vNBoCJkTcbHZ3e9tb+d+w==
   dependencies:
-    "@inquirer/core" "^8.1.0"
+    "@inquirer/core" "^8.2.0"
     "@inquirer/type" "^1.3.1"
 
-"@inquirer/core@^8.1.0":
-  version "8.1.0"
-  resolved "https://registry.npmjs.org/@inquirer/core/-/core-8.1.0.tgz#ec8d298dbac1b850ffef8d918f8fe4f0848af91a"
-  integrity sha512-kfx0SU9nWgGe1f03ao/uXc85SFH1v2w3vQVH7QDGjKxdtJz+7vPitFtG++BTyJMYyYgH8MpXigutcXJeiQwVRw==
+"@inquirer/core@^8.2.0":
+  version "8.2.0"
+  resolved "https://registry.npmjs.org/@inquirer/core/-/core-8.2.0.tgz#524ab7a6737958011f40959a1d0e5a8b90ff3471"
+  integrity sha512-pexNF9j2orvMMTgoQ/uKOw8V6/R7x/sIDwRwXRhl4i0pPSh6paRzFehpFKpfMbqix1/+gzCekhYTmVbQpWkVjQ==
   dependencies:
     "@inquirer/figures" "^1.0.1"
     "@inquirer/type" "^1.3.1"
     "@types/mute-stream" "^0.0.4"
-    "@types/node" "^20.12.7"
+    "@types/node" "^20.12.11"
     "@types/wrap-ansi" "^3.0.0"
     ansi-escapes "^4.3.2"
     chalk "^4.1.2"
@@ -1853,31 +1856,29 @@
     "@jridgewell/sourcemap-codec" "^1.4.14"
 
 "@jsonjoy.com/base64@^1.1.1":
-  version "1.1.1"
-  resolved "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.1.tgz#a717fd8840f7bad49c7fe66cc65db8bcfc4c4dc5"
-  integrity sha512-LnFjVChaGY8cZVMwAIMjvA1XwQjZ/zIXHyh28IyJkyNkzof4Dkm1+KN9UIm3lHhREH4vs7XwZ0NpkZKnwOtEfg==
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578"
+  integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==
 
-"@jsonjoy.com/json-pack@^1.0.2":
-  version "1.0.2"
-  resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.2.tgz#d7c8c284db828b29eebb9082134251a8216ec5cc"
-  integrity sha512-4KMApTgb1Hvjz9Ue7unziJ1xNy3k6d2erp0hz1iXryXsf6LEM3KwN6YrfbqT0vqkUO8Tu+CSnvMia9cWX6YGVw==
+"@jsonjoy.com/json-pack@^1.0.3":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0"
+  integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==
   dependencies:
     "@jsonjoy.com/base64" "^1.1.1"
-    "@jsonjoy.com/util" "^1.0.0"
+    "@jsonjoy.com/util" "^1.1.2"
     hyperdyperid "^1.2.0"
     thingies "^1.20.0"
 
-"@jsonjoy.com/util@^1.0.0", "@jsonjoy.com/util@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.0.tgz#9726365362ede17405d2b521b4c782582df7ed4f"
-  integrity sha512-Yz+xITJ3Y/w0DBISwPkBETP5/cITHXscjgQNZIkfrVz1V7/ahJY8vw+T+LZy/KtXgKuUWqu4GALAQ3bhGt9J8A==
-  dependencies:
-    hyperdyperid "^1.2.0"
+"@jsonjoy.com/util@^1.1.2":
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429"
+  integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==
 
-"@kickstartds/core@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.npmjs.org/@kickstartds/core/-/core-4.0.3.tgz#e95a520a73719b20e898228bf9ae3cd4d822f5a5"
-  integrity sha512-SAtnmpDroNUbp+7yWu67eBvbUxFnsqLpxbrwOvCk9v/4yPkT8msVs3xr5HprM5VdD6BJ08A1DWa0B4SlivI/tQ==
+"@kickstartds/core@^4.0.5":
+  version "4.0.5"
+  resolved "https://registry.npmjs.org/@kickstartds/core/-/core-4.0.5.tgz#9f786127729324611a97edf84052e8b752bc915e"
+  integrity sha512-O18cSJub+UyDZaVNAvXiIH5U96HdCHb4ufID3QBOz+9/zkMgBT4XnEOa/f0owd85HbH3edWz88CPHxytMI4wdA==
   dependencies:
     "@babel/runtime" "^7.21.5"
     bourbon "^7.3.0"
@@ -1975,10 +1976,10 @@
   resolved "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b"
   integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==
 
-"@mswjs/interceptors@^0.26.14":
-  version "0.26.15"
-  resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.26.15.tgz#256ad5c89f325c87d972cc27fc7d0d6d382ce804"
-  integrity sha512-HM47Lu1YFmnYHKMBynFfjCp0U/yRskHj/8QEJW0CBEPOlw8Gkmjfll+S9b8M7V5CNDw2/ciRxjjnWeaCiblSIQ==
+"@mswjs/interceptors@^0.29.0":
+  version "0.29.1"
+  resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz#e77fc58b5188569041d0440b25c9e9ebb1ccd60a"
+  integrity sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==
   dependencies:
     "@open-draft/deferred-promise" "^2.2.0"
     "@open-draft/logger" "^0.3.0"
@@ -2016,7 +2017,7 @@
   resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
   integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
 
-"@nodelib/fs.walk@^1.2.3":
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
   version "1.2.8"
   resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
   integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
@@ -2178,10 +2179,10 @@
     redux-thunk "^2.4.2"
     reselect "^4.1.8"
 
-"@remix-run/router@1.16.0":
-  version "1.16.0"
-  resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz#0e10181e5fec1434eb071a9bc4bdaac843f16dcc"
-  integrity sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==
+"@remix-run/router@1.16.1":
+  version "1.16.1"
+  resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd"
+  integrity sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==
 
 "@sideway/address@^4.1.5":
   version "4.1.5"
@@ -2604,9 +2605,9 @@
     lodash "^4.17.14"
 
 "@splunk/react-events-viewer@^5.4.2", "@splunk/react-events-viewer@^5.4.3":
-  version "5.4.3"
-  resolved "https://registry.npmjs.org/@splunk/react-events-viewer/-/react-events-viewer-5.4.3.tgz#712ee9922d09294cae02fc00dadc45387b57ae70"
-  integrity sha512-ijMQG/3icNp9xnlLmPNN2J12IOkVGZWRLXOkltxWiqXAZA5f1YttFjLrvBmh5lbfXRk1LRy7inrjSaRI4Jb6kQ==
+  version "5.4.4"
+  resolved "https://registry.npmjs.org/@splunk/react-events-viewer/-/react-events-viewer-5.4.4.tgz#4e7e6524e27c039498f8403c724865d3b28904ac"
+  integrity sha512-X4+QYUEGzLjtjBSBzK6UEYzM+1QV5g7ySdhJTWDkFP+V9HCRCTIy8K/RVhfJSNLVLEEJ05atjjIuoD3M3xfX/g==
   dependencies:
     "@babel/runtime" "^7.14.0"
     "@splunk/datasource-utils" "^26.5.0"
@@ -2631,7 +2632,7 @@
     prop-types "^15.6.0"
     react-is "^16.10.0"
 
-"@splunk/react-icons@^4.0.1", "@splunk/react-icons@^4.2.0", "@splunk/react-icons@^4.3.0", "@splunk/react-icons@^4.4.0":
+"@splunk/react-icons@^4.0.1", "@splunk/react-icons@^4.2.0", "@splunk/react-icons@^4.4.0":
   version "4.4.0"
   resolved "https://registry.npmjs.org/@splunk/react-icons/-/react-icons-4.4.0.tgz#c9a5980256a2fc41b54f43b898728c1a2eb25325"
   integrity sha512-eUhkcTAksicTGt2tofcQJVxrbC4UeGg3SY6JjoO2B3Gq9aOwOcLSIicWzv+TGoHVUthUesoNO1xnvygFgBtqkw==
@@ -2704,16 +2705,17 @@
     prop-types "^15.6.2"
     react-flip-move "^3.0.1"
 
-"@splunk/react-ui@4.28.2", "@splunk/react-ui@^4.17.1", "@splunk/react-ui@^4.19.0", "@splunk/react-ui@^4.23.0", "@splunk/react-ui@^4.25.0", "@splunk/react-ui@^4.28.2":
-  version "4.28.2"
-  resolved "https://registry.npmjs.org/@splunk/react-ui/-/react-ui-4.28.2.tgz#91ab62a5c07d967c592df0bf6e2b1c7604c22b72"
-  integrity sha512-krYWurzg/Y9G4J8pfmPusUaCIVHFldq8jS85OdsW91hHCML8ZqlK8/PyJy9loDPrxNyz48MX1pd6JqS5PVWxFA==
+"@splunk/react-ui@^4.17.1", "@splunk/react-ui@^4.19.0", "@splunk/react-ui@^4.23.0", "@splunk/react-ui@^4.25.0", "@splunk/react-ui@^4.28.2", "@splunk/react-ui@^4.30.0":
+  version "4.30.0"
+  resolved "https://registry.npmjs.org/@splunk/react-ui/-/react-ui-4.30.0.tgz#a74508931317a9943818596531b49ccf322ddc80"
+  integrity sha512-8mxb67724fPtYOxTinsZfbFrNbqwC2Qd67hjU8XvQIWLYodnIlmKoaKUhRQIjEtykMlrWHxzaQCvJSPSvPbmFQ==
   dependencies:
-    "@dnd-kit/core" "6.0.8"
-    "@dnd-kit/sortable" "7.0.2"
-    "@dnd-kit/utilities" "3.2.1"
-    "@splunk/react-icons" "^4.3.0"
-    "@splunk/themes" "^0.17.0"
+    "@dnd-kit/core" "^6.1.0"
+    "@dnd-kit/modifiers" "^7.0.0"
+    "@dnd-kit/sortable" "^8.0.0"
+    "@dnd-kit/utilities" "^3.2.2"
+    "@splunk/react-icons" "^4.4.0"
+    "@splunk/themes" "^0.18.0"
     "@splunk/ui-utils" "^1.6.0"
     commonmark "^0.30.0"
     commonmark-react-renderer "^4.3.2"
@@ -2799,6 +2801,15 @@
     lodash "^4.17.14"
     tinycolor2 "^1.4.1"
 
+"@splunk/themes@^0.18.0":
+  version "0.18.0"
+  resolved "https://registry.npmjs.org/@splunk/themes/-/themes-0.18.0.tgz#896d1d7b2f62140598b2c8d8d73f43a8a6c52d84"
+  integrity sha512-NzVc3pVU/oKxmTtxb9YKRTBsn1JEh76yWkPf390lRsLlVwS4eUKh/WCUD4xkzx6aUEA/e6XhhQ7oj/Ye6Pz6VA==
+  dependencies:
+    color-blend "^2.0.9"
+    lodash "^4.17.14"
+    tinycolor2 "^1.4.1"
+
 "@splunk/time-range-utils@^3.0.1", "@splunk/time-range-utils@^3.2.0":
   version "3.2.0"
   resolved "https://registry.npmjs.org/@splunk/time-range-utils/-/time-range-utils-3.2.0.tgz#6c13f8ff4a152428c2a932841f70d75ce728c531"
@@ -3067,62 +3078,62 @@
   resolved "https://registry.npmjs.org/@splunkdev/cloud-sdk/-/cloud-sdk-15.0.0.tgz#30a49eb2e8f26eb1569c4e97402a473dc7f96883"
   integrity sha512-6oqdH9ljEpnnt6TjkkZuCo3w0IBJH6fiTKMsVIVjaZDBPaoUhxSdRFuXOO+SI/8qf21p+xaGYbepeKZ1ne2HTQ==
 
-"@storybook/addon-a11y@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.0.9.tgz#88a3207e13d06d27c60a5fd8d1952ce6b2dd58b2"
-  integrity sha512-HgIlhOI3yBS3ztnuqOquGztnju7LE+BgCMYbDQEZjQkddiQPtjwLC6h0/LkvHL5993avbq1vYEWfUGHLtGzYfQ==
+"@storybook/addon-a11y@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.0.10.tgz#d342591b51bbce1ddf4ce0f87bddd2ff701edb51"
+  integrity sha512-ymeTRE1uWplifWUMc3tO5lLGn4buS/hUVWKRM11SqugmxRym55B4thCJU089HAEMY+V/imiCeOE63TT+DGsk8g==
   dependencies:
-    "@storybook/addon-highlight" "8.0.9"
+    "@storybook/addon-highlight" "8.0.10"
     axe-core "^4.2.0"
 
-"@storybook/addon-actions@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.9.tgz#b7a19abb0ee8fd73df1498def7f1ff307d16cb25"
-  integrity sha512-+I3VTvlKdj8puHeS2tyaOVv9syDiNLneVZbTfqN+UDOK2i42NwvZr8PVwjTzMlEj9eePJdCZgiipz55xwts5bw==
+"@storybook/addon-actions@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.10.tgz#df9fde0d234174eda5eb1c7af942da8e01924b50"
+  integrity sha512-IEuc30UAFl7Ws0GwaY/whjBnGaViVEVjmPc+MXUym2wwwJbnCbI+BKJxPoYi/I7QJb5aUNToAE6pl2pDda2g3Q==
   dependencies:
-    "@storybook/core-events" "8.0.9"
+    "@storybook/core-events" "8.0.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@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.0.9.tgz#c08bd534f8c7c9f07b687624376e328696fdadc8"
-  integrity sha512-pCDecACrVyxPaJKEWS0sHsRb8xw+IPCSxDM1TkjaAQ6zZ468A/dcUnqW+LVK8bSXgQwWzn23wqnqPFSy5yptuQ==
+"@storybook/addon-backgrounds@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.0.10.tgz#27bb1af354d0c2e68933d5b2795f9008b84b1ec5"
+  integrity sha512-445SUQqOH5xFJWlNeMu74FEgk26O9Zm/5aqnvmeteB0Q2JLaw7k2q9i/W6XFu97QkRxqA1EGbDxLR3+e1xCjaA==
   dependencies:
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-controls@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.0.9.tgz#cc1f8ffde58fdaf9ea2ef7ebf9261c3519f42a39"
-  integrity sha512-wWdmd62UP/sfPm8M7aJjEA+kEXTUIR/QsYi9PoYBhBZcXiikZ4kNan7oD7GfsnzGGKHrBVfwQhO+TqaENGYytA==
+"@storybook/addon-controls@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.0.10.tgz#49eaa9bc914f9462d56dbefc07ba2f8cf9d5a7a9"
+  integrity sha512-MAUtIJGayNSsfn3VZ6SjQwpRkb4ky+10oVfos+xX9GQ5+7RCs+oYMuE4+aiQvvfXNdV8v0pUGPUPeUzqfJmhOA==
   dependencies:
-    "@storybook/blocks" "8.0.9"
+    "@storybook/blocks" "8.0.10"
     lodash "^4.17.21"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-docs@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.0.9.tgz#3ad1a18d7be8bb2eea4a018208d67d2959ba68c2"
-  integrity sha512-x7hX7UuzJtClu6XwU3SfpyFhuckVcgqgD6BU6Ihxl0zs+i4xp6iKVXYSnHFMRM1sgoeT8TjPxab35Ke8w8BVRw==
+"@storybook/addon-docs@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.0.10.tgz#57aa3bfec25995c89d17f1af92c4cb26a1f92ea3"
+  integrity sha512-y+Agoez/hXZHKUMIZHU96T5V1v0cs4ArSNfjqDg9DPYcyQ88ihJNb6ZabIgzmEaJF/NncCW+LofWeUtkTwalkw==
   dependencies:
     "@babel/core" "^7.12.3"
     "@mdx-js/react" "^3.0.0"
-    "@storybook/blocks" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/components" "8.0.9"
-    "@storybook/csf-plugin" "8.0.9"
-    "@storybook/csf-tools" "8.0.9"
+    "@storybook/blocks" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/components" "8.0.10"
+    "@storybook/csf-plugin" "8.0.10"
+    "@storybook/csf-tools" "8.0.10"
     "@storybook/global" "^5.0.0"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
-    "@storybook/react-dom-shim" "8.0.9"
-    "@storybook/theming" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
+    "@storybook/react-dom-shim" "8.0.10"
+    "@storybook/theming" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/react" "^16.8.0 || ^17.0.0 || ^18.0.0"
     fs-extra "^11.1.0"
     react "^16.8.0 || ^17.0.0 || ^18.0.0"
@@ -3131,79 +3142,79 @@
     rehype-slug "^6.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-essentials@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.0.9.tgz#579942c264b1ce17c02a9588e99fbb5cb97e2083"
-  integrity sha512-mwAgdfrOsTuTDcagvM7veBh+iayZIWmKOazzkhrIWbhYcrXOsweigD2UOVeHgAiAzJK49znr4FXTCKcE1hOWcw==
-  dependencies:
-    "@storybook/addon-actions" "8.0.9"
-    "@storybook/addon-backgrounds" "8.0.9"
-    "@storybook/addon-controls" "8.0.9"
-    "@storybook/addon-docs" "8.0.9"
-    "@storybook/addon-highlight" "8.0.9"
-    "@storybook/addon-measure" "8.0.9"
-    "@storybook/addon-outline" "8.0.9"
-    "@storybook/addon-toolbars" "8.0.9"
-    "@storybook/addon-viewport" "8.0.9"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/manager-api" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
+"@storybook/addon-essentials@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.0.10.tgz#49029b2da6d61a0ced867d4fc83b14fe98f2cb76"
+  integrity sha512-Uy3+vm7QX+b/9rhW/iFa3EYAAbV1T2LljY9Bj4aTPZHas9Bpvl5ZPnOm/PhybcE8UFHEoVTJ0v3uWb0dsUEigw==
+  dependencies:
+    "@storybook/addon-actions" "8.0.10"
+    "@storybook/addon-backgrounds" "8.0.10"
+    "@storybook/addon-controls" "8.0.10"
+    "@storybook/addon-docs" "8.0.10"
+    "@storybook/addon-highlight" "8.0.10"
+    "@storybook/addon-measure" "8.0.10"
+    "@storybook/addon-outline" "8.0.10"
+    "@storybook/addon-toolbars" "8.0.10"
+    "@storybook/addon-viewport" "8.0.10"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/manager-api" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-highlight@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.0.9.tgz#da4c0bfb347aea10234f5f6007252f9343f5f384"
-  integrity sha512-vaRHGDbx7dpNpQECAHk5wczlZO3ntstprGlqnZt0o7ylz6xB5+pTQwTuIFty0hwKv+3TPcskzzifATUyEOEmyg==
+"@storybook/addon-highlight@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.0.10.tgz#bb7b4db944ca6e2a406c3ff2a6e77a339544aeb7"
+  integrity sha512-40GB82t1e2LCCjqXcC6Z5lq1yIpA1+Yl5E2tKeggOVwg5HHAX02ESNDdBaIOlCqMkU3WKzjGPurDNOLUAbsV2g==
   dependencies:
     "@storybook/global" "^5.0.0"
 
-"@storybook/addon-interactions@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.0.9.tgz#3282df8ce79b8df9b0d46670349164c50801b5b3"
-  integrity sha512-AMIdNcyM6DDAWvMitBJMqp1iPZND8AXB4QT4VZHGMKG2ngHNKktriEKpTfcRkfKPGTJs9T+71dWfm6/R4tticw==
+"@storybook/addon-interactions@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.0.10.tgz#3f24344afc175cfef8bde9e9474521fa2628c908"
+  integrity sha512-6yFNmk6+7082/8TRVyjUsKlwumalEdO0XQ5amPbVGuECzc3HFn0ELwzPrQ4TBlN5MRtX4+buoh5dc/1RUDrh9w==
   dependencies:
     "@storybook/global" "^5.0.0"
-    "@storybook/instrumenter" "8.0.9"
-    "@storybook/test" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/instrumenter" "8.0.10"
+    "@storybook/test" "8.0.10"
+    "@storybook/types" "8.0.10"
     polished "^4.2.2"
     ts-dedent "^2.2.0"
 
-"@storybook/addon-links@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.0.9.tgz#1f7375896c8e2ffd28eec24edc0e938bc16525cd"
-  integrity sha512-FVt+AdW3JFSqbJzkKiqKsMRWqHXqEvCBqFs7lNfk3OW0w0jfv1iREtrxE0dVdJoUFQC9V/2Im/EpJ7UB3C2bNQ==
+"@storybook/addon-links@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.0.10.tgz#6852c5a046df137f1d16dd971b14ef4191f4f79e"
+  integrity sha512-+mIyH2UcrgQfAyRM4+ARkB/D0OOY8UMwkZsD8dD23APZ8oru7W/NHX3lXl0WjPfQcOIx/QwWNWI3+DgVZJY3jw==
   dependencies:
     "@storybook/csf" "^0.1.4"
     "@storybook/global" "^5.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-measure@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.0.9.tgz#4116b96521f74a06da0b5383cce214cc20bd7c8b"
-  integrity sha512-91svOOGEXmGG4USglwXLE3wtlUVgtbKJVxTKX7xRI+AC5JEEaKByVzP17/X8Qn/8HilUL7AfSQ0kCoqtPSJ5cA==
+"@storybook/addon-measure@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.0.10.tgz#e59121634ee35c6fe128292456df4faaed0fed01"
+  integrity sha512-quXQwmZJUhOxDIlbXTH6aKYQkwkDpL0UQRkUZn1xuZ2sVKJeaee73QSWqw8HDD4Rz9huS+OrAdVoq/Cz5FoC6A==
   dependencies:
     "@storybook/global" "^5.0.0"
     tiny-invariant "^1.3.1"
 
-"@storybook/addon-outline@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.0.9.tgz#497c70332bbca5f35777f4c60afc29e505e3588e"
-  integrity sha512-fQ+jm356TgUnz81IxsC99/aOesbLw3N5OQRJpo/A6kqbLMzlq3ybVzuXYCKC3f0ArgQRNh4NoMeJBMRFMtaWRw==
+"@storybook/addon-outline@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.0.10.tgz#d520e6ff4afea51efb056eeca88032df88c85394"
+  integrity sha512-1eDO2s/vHhhSJo7W5SetqjleUBTZLI08VNP89c4j7vdRKiMZ1DYhr0dqUGIC3w7cDsawI/nQ24wancHHayAnqw==
   dependencies:
     "@storybook/global" "^5.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/addon-toolbars@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.0.9.tgz#6601732c6b4cc262bab13a1e50f9b11063d5cc74"
-  integrity sha512-nNSBnnBOhQ+EJwkrIkK4ZBYPcozNmEH770CZ/6NK85SUJ6WEBZapE6ru33jIUokFGEvlOlNCeai0GUc++cQP8w==
+"@storybook/addon-toolbars@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.0.10.tgz#753c7d3895ad84d8589fbf7c29baaf64249688b7"
+  integrity sha512-67HP6mTJU/gjRju01Z5HjeqoRiJMDlrMvMvjGBg7w5+tPNtjYqdelfe2+kcfU+Hf6dfcuqaBDwaUUGSv+RYtRQ==
 
-"@storybook/addon-viewport@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.0.9.tgz#819496abdcc4aa9ae2fe8d4665a96e57ecebece3"
-  integrity sha512-Ao4+D56cO7biaw+iTlMU1FBec1idX0cmdosDeCFZin06MSawcPkeBlRBeruaSQYdLes8TBMdZPFgfuqI5yIk6g==
+"@storybook/addon-viewport@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.0.10.tgz#791dddd48507f63de3f909e08a28e4f1b24f0db5"
+  integrity sha512-NJ88Nd/tXreHLyLeF3VP+b8Fu2KtUuJ0L4JYpEMmcdaejGARTrJJOU+pcZBiUqEHFeXQ8rDY8DKXhUJZQFQ1Wg==
   dependencies:
     memoizerific "^1.11.3"
 
@@ -3215,23 +3226,23 @@
     "@babel/core" "^7.23.7"
     babel-loader "^9.1.3"
 
-"@storybook/blocks@8.0.9", "@storybook/blocks@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.0.9.tgz#6500fef1e72618bc7715286b9dbb5bfaae20f4d4"
-  integrity sha512-F2zSrfSwzTFN7qW3zB80tG+EXtmfmCDC6Ird0F7tolszb6tOqJcAcBOwQbE2O0wI63sLu21qxzXgaKBMkiWvJg==
+"@storybook/blocks@8.0.10", "@storybook/blocks@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.0.10.tgz#af87b7f4ec5b1f9a9195b1f993feea7b13475786"
+  integrity sha512-LOaxvcO2d4dT4YoWlQ0bq/c8qA3aHoqtyuvBjwbVn+359bjMtgj/91YuP9Y2+ggZZ4p+ttgvk39PcmJlNXlJsw==
   dependencies:
-    "@storybook/channels" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/components" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/channels" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/components" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/csf" "^0.1.4"
-    "@storybook/docs-tools" "8.0.9"
+    "@storybook/docs-tools" "8.0.10"
     "@storybook/global" "^5.0.0"
     "@storybook/icons" "^1.2.5"
-    "@storybook/manager-api" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
-    "@storybook/theming" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/manager-api" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
+    "@storybook/theming" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/lodash" "^4.14.167"
     color-convert "^2.0.1"
     dequal "^2.0.2"
@@ -3245,15 +3256,15 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/builder-manager@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.0.9.tgz#8c03b04b3550dd637247fea2d2ddd089268408d9"
-  integrity sha512-/PxDwZIfMc/PSRZcasb6SIdGr3azIlenzx7dBF7Imt8i4jLHiAf1t00GvghlfJsvsrn4DNp95rbRbXTDyTj7tQ==
+"@storybook/builder-manager@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.0.10.tgz#13af1624813fc26c221c88a0c27091ac48b05781"
+  integrity sha512-lo57jeeYuYCKYrmGOdLg25rMyiGYSTwJ+zYsQ3RvClVICjP6X0I1RCKAJDzkI0BixH6s1+w5ynD6X3PtDnhUuw==
   dependencies:
     "@fal-works/esbuild-plugin-global-externals" "^2.1.2"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/manager" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/manager" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
     "@types/ejs" "^3.1.1"
     "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10"
     browser-assert "^1.2.1"
@@ -3265,19 +3276,19 @@
     process "^0.11.10"
     util "^0.12.4"
 
-"@storybook/builder-webpack5@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.0.9.tgz#811af801f264c7377c5e33d68b713eacf6c2f295"
-  integrity sha512-bFxlxOO2x8n3TmmA9ACxzhmHxtRd0e68dA0w4AYkvEwBf2wScRQdWJIeS5k4JgRwtcUyFYAt+VcKyE1WMgyaVg==
-  dependencies:
-    "@storybook/channels" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/core-events" "8.0.9"
-    "@storybook/core-webpack" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/preview" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
+"@storybook/builder-webpack5@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.0.10.tgz#2940df77bda349c7f7840d1d482381f493440394"
+  integrity sha512-FrETNEPu9UcZD8yRIQhszcmdMMS73yXRbZFldeZzJ2b8lKNJG+tmqRwh5d5xEMzMrENYkDY+sXheOLSjKfvq9g==
+  dependencies:
+    "@storybook/channels" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/core-events" "8.0.10"
+    "@storybook/core-webpack" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/preview" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
     "@types/node" "^18.0.0"
     "@types/semver" "^7.3.4"
     browser-assert "^1.2.1"
@@ -3305,33 +3316,33 @@
     webpack-hot-middleware "^2.25.1"
     webpack-virtual-modules "^0.5.0"
 
-"@storybook/channels@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.9.tgz#886aff858a13c11f49ca3d92d8a2ade67f19d407"
-  integrity sha512-7Lcfyy5CsLWWGhMPO9WG4jZ/Alzp0AjepFhEreYHRPtQrfttp6qMAjE/g1aHgun0qHCYWxwqIG4NLR/hqDNrXQ==
+"@storybook/channels@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.10.tgz#56141b44001693ff99e2828deec685b7c12ff2c6"
+  integrity sha512-3JLxfD7czlx31dAGvAYJ4J4BNE/Y2+hhj/dsV3xlQTHKVpnWknaoeYEC1a6YScyfsH6W+XmP2rzZKzH4EkLSGQ==
   dependencies:
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/global" "^5.0.0"
     telejson "^7.2.0"
     tiny-invariant "^1.3.1"
 
-"@storybook/cli@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/cli/-/cli-8.0.9.tgz#20d90c5c357d063c054f8594a6b327ce447364fd"
-  integrity sha512-lilYTKn8F5YOePijqfRYFa5v2mHVIJxPCIgTn+OXAmAFbcizZ6P8P6niU4J/NXulgx68Ln1M7hYhFtTP25hVTw==
+"@storybook/cli@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/cli/-/cli-8.0.10.tgz#1377749f546bc38912289072233059e0da5bcffc"
+  integrity sha512-KUZEO2lyvOS2sRJEFXovt6+5b65iWsh7F8e8S1cM20fCM1rZAlWtwmoxmDVXDmyEp0wTrq4FrRxKnbo9UO518w==
   dependencies:
     "@babel/core" "^7.23.0"
     "@babel/types" "^7.23.0"
     "@ndelangen/get-tarball" "^3.0.7"
-    "@storybook/codemod" "8.0.9"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/core-events" "8.0.9"
-    "@storybook/core-server" "8.0.9"
-    "@storybook/csf-tools" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/telemetry" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/codemod" "8.0.10"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/core-events" "8.0.10"
+    "@storybook/core-server" "8.0.10"
+    "@storybook/csf-tools" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/telemetry" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/semver" "^7.3.4"
     "@yarnpkg/fslib" "2.10.3"
     "@yarnpkg/libzip" "2.3.0"
@@ -3358,25 +3369,25 @@
     tiny-invariant "^1.3.1"
     ts-dedent "^2.0.0"
 
-"@storybook/client-logger@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.9.tgz#90a099ad79d6959cd3d0ee4f753edb0cc54a54f5"
-  integrity sha512-LzV/RHkbf07sRc1Jc0ff36RlapKf9Ul7/+9VMvVbI3hshH1CpmrZK4t/tsIdpX/EVOdJ1Gg5cES06PnleOAIPA==
+"@storybook/client-logger@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.10.tgz#d3de8377f41f6c76657ba75c729596dc67c5ffcb"
+  integrity sha512-u38SbZNAunZzxZNHMJb9jkUwFkLyWxmvp4xtiRM3u9sMUShXoTnzbw1yKrxs+kYJjg+58UQPZ1JhEBRcHt5Oww==
   dependencies:
     "@storybook/global" "^5.0.0"
 
-"@storybook/codemod@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.0.9.tgz#196dae4b4a921244ed384217f79651979eff1b45"
-  integrity sha512-VBeGpSZSQpL6iyLLqceJSNGhdCqcNwv+xC/aWdDFOkmuE1YfbmNNwpa9QYv4ZFJ2QjUsm4iTWG60qK+9NXeSKA==
+"@storybook/codemod@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.0.10.tgz#cb5a553814d4512e5f05f3d3a20d07349c6dbcf9"
+  integrity sha512-t45jKGs/eyR/nKVX6QgRtMZSAjJo5aXWWk3B24xVbW6ywr0jt1LC100FkHG4Af8cApIfh8uUmS9X05hMG5zGGA==
   dependencies:
     "@babel/core" "^7.23.2"
     "@babel/preset-env" "^7.23.2"
     "@babel/types" "^7.23.0"
     "@storybook/csf" "^0.1.4"
-    "@storybook/csf-tools" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/csf-tools" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/cross-spawn" "^6.0.2"
     cross-spawn "^7.0.3"
     globby "^11.0.2"
@@ -3386,30 +3397,30 @@
     recast "^0.23.5"
     tiny-invariant "^1.3.1"
 
-"@storybook/components@8.0.9", "@storybook/components@^8":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/components/-/components-8.0.9.tgz#f087e69d8d95ff0e5766042fc4f9481882db73bb"
-  integrity sha512-JcwBGADzIJs0PSzqykrrD2KHzNG9wtexUOKuidt+FSv9szpUhe3qBAXIHpdfBRl7mOJ9TRZ5rt+mukEnfncdzA==
+"@storybook/components@8.0.10", "@storybook/components@^8":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/components/-/components-8.0.10.tgz#74c50658cfce9e2039e0eb5d0a51ebb9b717e9af"
+  integrity sha512-eo+oDDcm35YBB3dtDYDfcjJypNVPmRty85VWpAOBsJXpwp/fgU8csx0DM3KmhrQ4cWLf2WzcFowJwI1w+J88Sw==
   dependencies:
     "@radix-ui/react-slot" "^1.0.2"
-    "@storybook/client-logger" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
     "@storybook/csf" "^0.1.4"
     "@storybook/global" "^5.0.0"
     "@storybook/icons" "^1.2.5"
-    "@storybook/theming" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/theming" "8.0.10"
+    "@storybook/types" "8.0.10"
     memoizerific "^1.11.3"
     util-deprecate "^1.0.2"
 
-"@storybook/core-common@8.0.9", "@storybook/core-common@^8.0.0":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.9.tgz#ccf97c549943f670dcecaefebeb4a8637bac6b42"
-  integrity sha512-Jmue+sfHFb4GTYBzyWYw1MygoJiQSfISIrKmNIzAmZ+oR9EOr+jpu/i/bH+uetZ2Hqg1AGhj1VB7OtJp9HQyWw==
+"@storybook/core-common@8.0.10", "@storybook/core-common@^8.0.0":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.10.tgz#44e4c5d6ba50013012156ffbdc2fb02e92011af2"
+  integrity sha512-hsFlPieputaDQoxstnPa3pykTc4bUwEDgCHf8U43+/Z7qmLOQ9fpG+2CFW930rsCRghYpPreOvsmhY7lsGKWLQ==
   dependencies:
-    "@storybook/core-events" "8.0.9"
-    "@storybook/csf-tools" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/core-events" "8.0.10"
+    "@storybook/csf-tools" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@yarnpkg/fslib" "2.10.3"
     "@yarnpkg/libzip" "2.3.0"
     chalk "^4.1.0"
@@ -3435,35 +3446,35 @@
     ts-dedent "^2.0.0"
     util "^0.12.4"
 
-"@storybook/core-events@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.9.tgz#d14db371f1f959e8c3baaa6098d2c506bcb3f3ad"
-  integrity sha512-DxSUx7wG9Qe3OFUBnv3OrYq48J8UWNo2DUR5/JecJCtp3n++L4fAEW3J0IF5FfxpQDMQSp1yTNjZ2PaWCMd2ag==
+"@storybook/core-events@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.10.tgz#03c70ca44816078e8a3479e6322a1d1f586da88a"
+  integrity sha512-TuHPS6p5ZNr4vp4butLb4R98aFx0NRYCI/7VPhJEUH5rPiqNzE3PZd8DC8rnVxavsJ+jO1/y+egNKXRYkEcoPQ==
   dependencies:
     ts-dedent "^2.0.0"
 
-"@storybook/core-server@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.0.9.tgz#c3f4790e35b6a116df64c6e6d1161c2077c70c4e"
-  integrity sha512-BIe1T5YUBl0GYxEjRoTQsvXD2pyuzL8rPTUD41zlzSQM0R8U6Iant9SzRms4u0+rKUm2mGxxKuODlUo5ewqaGA==
+"@storybook/core-server@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.0.10.tgz#9e75a5c47299f447b9a9056482ff99482b7f873c"
+  integrity sha512-HYDw2QFBxg1X/d6g0rUhirOB5Jq6g90HBnyrZzxKoqKWJCNsCADSgM+h9HgtUw0jA97qBpIqmNO9n3mXFPWU/Q==
   dependencies:
     "@aw-web-design/x-default-browser" "1.4.126"
     "@babel/core" "^7.23.9"
     "@discoveryjs/json-ext" "^0.5.3"
-    "@storybook/builder-manager" "8.0.9"
-    "@storybook/channels" "8.0.9"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/builder-manager" "8.0.10"
+    "@storybook/channels" "8.0.10"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/csf" "^0.1.4"
-    "@storybook/csf-tools" "8.0.9"
+    "@storybook/csf-tools" "8.0.10"
     "@storybook/docs-mdx" "3.0.0"
     "@storybook/global" "^5.0.0"
-    "@storybook/manager" "8.0.9"
-    "@storybook/manager-api" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
-    "@storybook/telemetry" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/manager" "8.0.10"
+    "@storybook/manager-api" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
+    "@storybook/telemetry" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/detect-port" "^1.3.0"
     "@types/node" "^18.0.0"
     "@types/pretty-hrtime" "^1.0.0"
@@ -3491,36 +3502,36 @@
     watchpack "^2.2.0"
     ws "^8.2.3"
 
-"@storybook/core-webpack@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.0.9.tgz#ac8211977bcfc26e24900a3b5dd9cdbc6eb31a7e"
-  integrity sha512-lehuuAmHt/p5z8lZkMW16Y/+uDEh+Z/tExItVadtjEY8jXDe2Ilr1Cts2lvzVNuuESEKd5bqsGJ1L4t9Bf25pg==
+"@storybook/core-webpack@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.0.10.tgz#ea01ccd219d59be01b2af2aa94b7fcb6e61eba6d"
+  integrity sha512-nfhdhulKk0BTQA2e5cuoEpu+mdZawMr7DNnpc29gkTl8sRsED+4TR5HTjWUVCRqMb/a1UNbY4QVe7ozM/rVNdQ==
   dependencies:
-    "@storybook/core-common" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/node" "^18.0.0"
     ts-dedent "^2.0.0"
 
-"@storybook/csf-plugin@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.9.tgz#af030b3063d01278de332c5985df8cff10e9b63b"
-  integrity sha512-pXaNCNi++kxKsqSWwvx215fPx8cNqvepLVxQ7B69qXLHj80DHn0Q3DFBO3sLXNiQMJ2JK4OYcTxMfuOiyzszKw==
+"@storybook/csf-plugin@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.10.tgz#a2b04df70820140f5a3fb82d2227675641585adc"
+  integrity sha512-0EsyEx/06sCjI8sn40r7cABtBU1vUKPMPD+S5mJiZymm73BgdARj0qZOlLoK2LP+t2pcaB/Cn7KX/uyhhv7M2g==
   dependencies:
-    "@storybook/csf-tools" "8.0.9"
+    "@storybook/csf-tools" "8.0.10"
     unplugin "^1.3.1"
 
-"@storybook/csf-tools@8.0.9", "@storybook/csf-tools@^8.0.0":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.9.tgz#8c24422fc12519be7756b4dcccad900962e6a88a"
-  integrity sha512-PiNMhL97giLytTdQwuhsZ92buVk4gy9H/8DtrDhUc45/1OmF95gogm6T2Yap729SIFwgpOcuq/U3aVo6d6swVQ==
+"@storybook/csf-tools@8.0.10", "@storybook/csf-tools@^8.0.0":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.10.tgz#f797c281fb10f9cb6382dc6d4ca55542f75a3c38"
+  integrity sha512-xUc6fVIKoCujf/7JZhkYjrVXeNsTSoDrZFNmqLEmtfktJVqYdXY4LuSAtlBmAIyETi09ULTuuVexrcKFwjzuBA==
   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.4"
-    "@storybook/types" "8.0.9"
+    "@storybook/types" "8.0.10"
     fs-extra "^11.1.0"
     recast "^0.23.5"
     ts-dedent "^2.0.0"
@@ -3533,9 +3544,9 @@
     lodash "^4.17.15"
 
 "@storybook/csf@^0.1.2", "@storybook/csf@^0.1.4":
-  version "0.1.5"
-  resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.5.tgz#58c489f443ad8642957565dac0c7cd860a85162f"
-  integrity sha512-pW7Dtk/bE2JGrAe/KuBY4Io02NBe/2CLP2DkgVgWlSwvEVdm/rbQyiwy8RaL0lQlJCv9CsGBY+n9HQG8d4bZjQ==
+  version "0.1.7"
+  resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.7.tgz#dcc6c16a353bc09c8c619ba1a23ba93b2aab0b9d"
+  integrity sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==
   dependencies:
     type-fest "^2.19.0"
 
@@ -3544,15 +3555,15 @@
   resolved "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.0.0.tgz#5c9b5ce35dcb00ad8aa5dddbabf52ad09fab3974"
   integrity sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==
 
-"@storybook/docs-tools@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.9.tgz#4257adede62028a6e1176151a09fa4f4fa146b12"
-  integrity sha512-OzogAeOmeHea/MxSPKRBWtOQVNSpoq+OOpimO9YRA5h5GBRJ2TUOGT44Gny6QT4ll5AvQA8fIiq9KezKcLekAg==
+"@storybook/docs-tools@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.10.tgz#8ab6f9ce2485814288de25a57ca16c842cc214d3"
+  integrity sha512-rg9KS81vEh13VMr4mAgs+7L4kYqoRtG7kVfV1WHxzJxjR3wYcVR0kP9gPTWV4Xha/TA3onHu9sxKxMTWha0urQ==
   dependencies:
-    "@storybook/core-common" "8.0.9"
-    "@storybook/core-events" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/core-events" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/doctrine" "^0.0.3"
     assert "^2.1.0"
     doctrine "^3.0.0"
@@ -3568,33 +3579,33 @@
   resolved "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz#bb4a51a79e186b62e2dd0e04928b8617ac573838"
   integrity sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==
 
-"@storybook/instrumenter@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.0.9.tgz#a0aec1afcf76dc6c2f3f9e82ef3e8ed7d16bdcbe"
-  integrity sha512-Gw74dgpTU/2p7FG0s7DuVdqCbJ2MEcSuRJjDo7HcXRYcvWp7I6Ly+C0v7N5VaoS+kbBVerAhLKIHZgG/LZf1og==
+"@storybook/instrumenter@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.0.10.tgz#6ecff32206b0409969cb02e5e61f5c54db6e7da5"
+  integrity sha512-6IYjWeQFA5x68xRoW5dU4yAc1Hwq1ZBkZbXVgJbr5LJw5x+y8eKdZzIaOmSsSKOI96R7J5YWWd2WA1Q0nRurtg==
   dependencies:
-    "@storybook/channels" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/channels" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/global" "^5.0.0"
-    "@storybook/preview-api" "8.0.9"
+    "@storybook/preview-api" "8.0.10"
     "@vitest/utils" "^1.3.1"
     util "^0.12.4"
 
-"@storybook/manager-api@8.0.9", "@storybook/manager-api@^8":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.0.9.tgz#5361d253c6704643f44afb95271b3d206d831740"
-  integrity sha512-99b3yKArDSvfabXL7QE3nA95e4DdW/5H/ZCcr6/E2qCQJayZ6G1v/WWamKXbiaTpkndulFmcb/+ZmnDXcweIIQ==
+"@storybook/manager-api@8.0.10", "@storybook/manager-api@^8":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.0.10.tgz#af71d280b84e45146342ff890fa5799a0c31c52d"
+  integrity sha512-LLu6YKQLWf5QB3h3RO8IevjLrSOew7aidIQPr9DIr9xC8wA7N2fQabr+qrJdE306p3cHZ0nzhYNYZxSjm4Dvdw==
   dependencies:
-    "@storybook/channels" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/channels" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/csf" "^0.1.4"
     "@storybook/global" "^5.0.0"
     "@storybook/icons" "^1.2.5"
-    "@storybook/router" "8.0.9"
-    "@storybook/theming" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/router" "8.0.10"
+    "@storybook/theming" "8.0.10"
+    "@storybook/types" "8.0.10"
     dequal "^2.0.2"
     lodash "^4.17.21"
     memoizerific "^1.11.3"
@@ -3602,25 +3613,25 @@
     telejson "^7.2.0"
     ts-dedent "^2.0.0"
 
-"@storybook/manager@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/manager/-/manager-8.0.9.tgz#e24971577714bbed02b55596d1363fbda78cfa21"
-  integrity sha512-+NnRo+5JQFGNqveKrLtC0b+Z08Tae4m44iq292bPeZMpr9OkFsIkU0PBPsHTHPkrqC/zZXRNsCsTEgvu3p2OIA==
-
-"@storybook/node-logger@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.9.tgz#0825e53bce014a8faa51029ab89e91b5eac1af8b"
-  integrity sha512-5ajMdZFrYrjGLJOVDq7dlEQNFsgeLHymt4dCK9MulL/ciXykmXUZXE3Bye0wFy+I2qqDVvrvR8uzCvSFvm5MAQ==
-
-"@storybook/preset-react-webpack@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.0.9.tgz#4070b62a34b23916d720893eb2b3043765eb13b6"
-  integrity sha512-kkJG03ZOJXM8fhYJuvAX9+3QVwoOMnz1tj75M/45c9i6XafPrBi2imGZWjXzuKXMxg/KO9fS/Y0JZmDh7vPM9g==
-  dependencies:
-    "@storybook/core-webpack" "8.0.9"
-    "@storybook/docs-tools" "8.0.9"
-    "@storybook/node-logger" "8.0.9"
-    "@storybook/react" "8.0.9"
+"@storybook/manager@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/manager/-/manager-8.0.10.tgz#c3c6229d7f2cfb47f65dc68572f42cce2661e79f"
+  integrity sha512-bojGglUQNry48L4siURc2zQKswavLzMh69rqsfL3ZXx+i+USfRfB7593azTlaZh0q6HO4bUAjB24RfQCyifLLQ==
+
+"@storybook/node-logger@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.10.tgz#dc48f174b26e44a7fbfbbc497797496dd208fcb9"
+  integrity sha512-UMmaUaA3VOX/mKLsSvOnbZre2/1tZ6hazA6H0eAnClKb51jRD1AJrsBYK+uHr/CAp7t710bB5U8apPov7hayDw==
+
+"@storybook/preset-react-webpack@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.0.10.tgz#a060e93f72a9da5681bcece450ab341db1cbf98b"
+  integrity sha512-+I0x8snLl9sfc3xXh51YLXwp0Km4Jhri+JJeT2r+zSI3k/fdu5bLz5NFPcxDmRm5ZPpaQyiLc2Mge4txMkFsZw==
+  dependencies:
+    "@storybook/core-webpack" "8.0.10"
+    "@storybook/docs-tools" "8.0.10"
+    "@storybook/node-logger" "8.0.10"
+    "@storybook/react" "8.0.10"
     "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0"
     "@types/node" "^18.0.0"
     "@types/semver" "^7.3.4"
@@ -3633,17 +3644,17 @@
     tsconfig-paths "^4.2.0"
     webpack "5"
 
-"@storybook/preview-api@8.0.9", "@storybook/preview-api@^8", "@storybook/preview-api@^8.0.0":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.9.tgz#273ac693a8d7333a33e1a8202e663dd9a9f02cc4"
-  integrity sha512-zHfX34bkAMzzmE7vbDzaqFwSW6ExiBD0HiO1L/IsHF55f0f7xV7IH8uJyFRrDTvAoW3ReSxZDMvvPpeydFPKGA==
+"@storybook/preview-api@8.0.10", "@storybook/preview-api@^8", "@storybook/preview-api@^8.0.0":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.10.tgz#daee994663fff358de4ceb0ce1108e2c099dfb42"
+  integrity sha512-uZ6btF7Iloz9TnDcKLQ5ydi2YK0cnulv/8FLQhBCwSrzLLLb+T2DGz0cAeuWZEvMUNWNmkWJ9PAFQFs09/8p/Q==
   dependencies:
-    "@storybook/channels" "8.0.9"
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-events" "8.0.9"
+    "@storybook/channels" "8.0.10"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-events" "8.0.10"
     "@storybook/csf" "^0.1.4"
     "@storybook/global" "^5.0.0"
-    "@storybook/types" "8.0.9"
+    "@storybook/types" "8.0.10"
     "@types/qs" "^6.9.5"
     dequal "^2.0.2"
     lodash "^4.17.21"
@@ -3653,10 +3664,10 @@
     ts-dedent "^2.0.0"
     util-deprecate "^1.0.2"
 
-"@storybook/preview@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.9.tgz#46ebdf09bc7eb9601c4ddce9a09e0c63ae31c662"
-  integrity sha512-tFsR8xc8AYBZZrZw8enklFbSQt7ZAV+rv20BoxwDhd3q7fjXyK7O4moGPqUwBZ7rukTG13nPoISxr+VXAk/HYA==
+"@storybook/preview@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.10.tgz#3fc29ae45f1b95fc5ccb90f1d474df25449b118f"
+  integrity sha512-op7gZqop8PSFyPA4tc1Zds8jG6VnskwpYUUsa44pZoEez9PKEFCf4jE+7AQwbBS3hnuCb0CKBfASN8GRyoznbw==
 
 "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0":
   version "1.0.6--canary.9.0c3f3b7.0"
@@ -3671,32 +3682,32 @@
     react-docgen-typescript "^2.2.2"
     tslib "^2.0.0"
 
-"@storybook/react-dom-shim@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.9.tgz#9fcfcc93a41c84f5a046b0b97647684061e2ac7d"
-  integrity sha512-8011KlRuG3obr5pZZ7bcEyYYNWF3tR596YadoMd267NPoHKvwAbKL1L/DNgb6kiYjZDUf9QfaKSCWW31k0kcRQ==
+"@storybook/react-dom-shim@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.10.tgz#79311caf5bd4e01f9770038069c299921e2c1ad7"
+  integrity sha512-3x8EWEkZebpWpp1pwXEzdabGINwOQt8odM5+hsOlDRtFZBmUqmmzK0rtn7orlcGlOXO4rd6QuZj4Tc5WV28dVQ==
 
-"@storybook/react-webpack5@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.0.9.tgz#e91ce60be87b0a79ca9daa4d6d8b6417b27e03c4"
-  integrity sha512-JJIEL7fXrSurzc/pUhvZMjwVZpKuWNwjq3N9jTjwy0GxN2lDEu6glHCyMglvij/GURWvm4eXsATHUfNf47B1AA==
+"@storybook/react-webpack5@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.0.10.tgz#82b67258e85a7c0f5db8cb75632df625da26ac1e"
+  integrity sha512-KqQTYiFBTfWJOKP4SxirXRNLYCaLxFlDmEyUjQHuBbA03fEnvTYlCR7Kv5leArvBTiMpat2IfPqXlc048PKFRw==
   dependencies:
-    "@storybook/builder-webpack5" "8.0.9"
-    "@storybook/preset-react-webpack" "8.0.9"
-    "@storybook/react" "8.0.9"
+    "@storybook/builder-webpack5" "8.0.10"
+    "@storybook/preset-react-webpack" "8.0.10"
+    "@storybook/react" "8.0.10"
     "@types/node" "^18.0.0"
 
-"@storybook/react@8.0.9", "@storybook/react@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/react/-/react-8.0.9.tgz#b9e286245a4ae79ae0211d672b1143d1c73c90d3"
-  integrity sha512-NeQ6suZG3HKikwe3Tx9cAIaRx7uP8FKCmlVvIiBg4LTTI5orCt94PPakvuZukZcbkqvcCnEBkebAzwUpn8PiJw==
+"@storybook/react@8.0.10", "@storybook/react@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/react/-/react-8.0.10.tgz#2a6b67f5f320bc10800d197bc4585c0c4f1e6d27"
+  integrity sha512-/MIMc02TNmiNXDzk55dm9+ujfNE5LVNeqqK+vxXWLlCZ0aXRAd1/ZLYeRFuYLgEETB7mh7IP8AXjvM68NX5HYg==
   dependencies:
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/docs-tools" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/docs-tools" "8.0.10"
     "@storybook/global" "^5.0.0"
-    "@storybook/preview-api" "8.0.9"
-    "@storybook/react-dom-shim" "8.0.9"
-    "@storybook/types" "8.0.9"
+    "@storybook/preview-api" "8.0.10"
+    "@storybook/react-dom-shim" "8.0.10"
+    "@storybook/types" "8.0.10"
     "@types/escodegen" "^0.0.6"
     "@types/estree" "^0.0.51"
     "@types/node" "^18.0.0"
@@ -3713,33 +3724,33 @@
     type-fest "~2.19"
     util-deprecate "^1.0.2"
 
-"@storybook/router@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/router/-/router-8.0.9.tgz#69cfff588d8c8a4160404f1f2897ce1feb9cecb1"
-  integrity sha512-aAOWxbM9J4mt+cp4o88T2PB29mgBBTOzU37/pUsTHYnKnR9XI4npXEXdN8Gv+ryqM0kj0AbBpz/llFlnR2MNNA==
+"@storybook/router@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/router/-/router-8.0.10.tgz#07b3744f53fe3d0dfb1f7ef15442f6d81287127a"
+  integrity sha512-AZhgiet+EK0ZsPbaDgbbVTAHW2LAMCP1z/Un2uMBbdDeD0Ys29Af47AbEj/Ome5r1cqasLvzq2WXJlVXPNB0Zw==
   dependencies:
-    "@storybook/client-logger" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
     memoizerific "^1.11.3"
     qs "^6.10.0"
 
-"@storybook/telemetry@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.0.9.tgz#148bd044c4bac7197188aaf54e313fb184fd69aa"
-  integrity sha512-AGGfcup06t+wxhBIkHd0iybieOh9PDVZQJ9oPct5JGB39+ni9wvs0WOD+MYlHbsjp8id7+aGkh6mYuYOvfck+Q==
+"@storybook/telemetry@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.0.10.tgz#a22234c3f8273bbea0766359309f60325fe2bb57"
+  integrity sha512-s4Uc+KZQkdmD2d+64Qf8wYknhQZwmjf2CxjIjv9b4KLsU/nyfDheK7Fzd1jhBKb2UQUlLW5HhZkBgs1RsZcDHA==
   dependencies:
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-common" "8.0.9"
-    "@storybook/csf-tools" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-common" "8.0.10"
+    "@storybook/csf-tools" "8.0.10"
     chalk "^4.1.0"
     detect-package-manager "^2.0.1"
     fetch-retry "^5.0.2"
     fs-extra "^11.1.0"
     read-pkg-up "^7.0.1"
 
-"@storybook/test-runner@^0.17.0":
-  version "0.17.0"
-  resolved "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.17.0.tgz#eba094f35718cc8d1004a514e88a92d981e7dcd8"
-  integrity sha512-4mt822j0VF1H/c0//OWSST9eWV0wboncJUQ+hBm5N4wmyuObvwsiMh4pmgXw8Y82wF7g1RIofjEQqAGLa7NjgQ==
+"@storybook/test-runner@^0.18.0":
+  version "0.18.0"
+  resolved "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.18.0.tgz#f87aba7f6f8183fe1751a5105318bbeb0372f9db"
+  integrity sha512-6IUQbRp78yNwAEpS8w9aIZaaNoaMV8g0r8PXCB+dooWywty9FOL1q6oDOTCUeUQKuziIPUfFX5er58UokSmlRQ==
   dependencies:
     "@babel/core" "^7.22.5"
     "@babel/generator" "^7.22.5"
@@ -3761,17 +3772,18 @@
     jest-runner "^29.6.4"
     jest-serializer-html "^7.1.0"
     jest-watch-typeahead "^2.0.0"
+    nyc "^15.1.0"
     playwright "^1.14.0"
 
-"@storybook/test@8.0.9", "@storybook/test@^8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/test/-/test-8.0.9.tgz#b7c60dca424a57f84d4f6be6c186037a8cc305dd"
-  integrity sha512-bRd5tBJnPzR6UKbDXONWnFWtdkNOY99HMLDUWe5fTRo50GwkrpFBVqPflhdkruEeof0kAbBUbnoN2CIYgtnAFw==
+"@storybook/test@8.0.10", "@storybook/test@^8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/test/-/test-8.0.10.tgz#69f67ff85968e900f683a706717b6fafc6daa217"
+  integrity sha512-VqjzKJiOCjaZ0CjLeKygYk8uetiaiKbpIox+BrND9GtpEBHcRZA5AeFY2P1aSCOhsaDwuh4KRBxJWFug7DhWGQ==
   dependencies:
-    "@storybook/client-logger" "8.0.9"
-    "@storybook/core-events" "8.0.9"
-    "@storybook/instrumenter" "8.0.9"
-    "@storybook/preview-api" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
+    "@storybook/core-events" "8.0.10"
+    "@storybook/instrumenter" "8.0.10"
+    "@storybook/preview-api" "8.0.10"
     "@testing-library/dom" "^9.3.4"
     "@testing-library/jest-dom" "^6.4.2"
     "@testing-library/user-event" "^14.5.2"
@@ -3779,93 +3791,93 @@
     "@vitest/spy" "^1.3.1"
     util "^0.12.4"
 
-"@storybook/theming@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/theming/-/theming-8.0.9.tgz#cb5a4f6ddc4a15faa64905cfad60422c3db252f2"
-  integrity sha512-jgfDuYoiNMMirQiASN3Eg0hGDXsEtpdAcMxyShqYGwu9elxgD9yUnYC2nSckYsM74a3ZQ3JaViZ9ZFSe2FHmeQ==
+"@storybook/theming@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/theming/-/theming-8.0.10.tgz#bc8a3fe98fc83e9751eeabd789be4acc05a10c8a"
+  integrity sha512-7NHt7bMC7lPkwz9KdDpa6DkLoQZz5OV6jsx/qY91kcdLo1rpnRPAiVlJvmWesFxi1oXOpVDpHHllWzf8KDBv8A==
   dependencies:
     "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
-    "@storybook/client-logger" "8.0.9"
+    "@storybook/client-logger" "8.0.10"
     "@storybook/global" "^5.0.0"
     memoizerific "^1.11.3"
 
-"@storybook/types@8.0.9":
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/@storybook/types/-/types-8.0.9.tgz#6597c35c0b147e43a6b23b2159514fea312f2214"
-  integrity sha512-ew0EXzk9k4B557P1qIWYrnvUcgaE0WWA5qQS0AU8l+fRTp5nvl9O3SP/zNIB0SN1qDFO7dXr3idTNTyIikTcEQ==
+"@storybook/types@8.0.10":
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/@storybook/types/-/types-8.0.10.tgz#99864aa267d9761e649b28a8b26a782f78c29de7"
+  integrity sha512-S/hKS7+SqNnYIehwxdQ4M2nnlfGDdYWAXdtPCVJCmS+YF2amgAxeuisiHbUg7eypds6VL0Oxk/j2nPEHOHk9pg==
   dependencies:
-    "@storybook/channels" "8.0.9"
+    "@storybook/channels" "8.0.10"
     "@types/express" "^4.7.0"
     file-system-cache "2.3.0"
 
-"@swc/core-darwin-arm64@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.17.tgz#e62fa7f247bdd1c0c50a3f99722da4dd098c7c67"
-  integrity sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw==
-
-"@swc/core-darwin-x64@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.17.tgz#1145cbb7575e317204ed3a7d0274bd26fe9ffab6"
-  integrity sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA==
-
-"@swc/core-linux-arm-gnueabihf@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.17.tgz#7145b3ada5cf9b748eaacbc9a7c7037ba0fb26bb"
-  integrity sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q==
-
-"@swc/core-linux-arm64-gnu@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.17.tgz#5c0833ef132af17bd3cbdf2253f35b57c0cf62bb"
-  integrity sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q==
-
-"@swc/core-linux-arm64-musl@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.17.tgz#5bfe81eb23c905f04b669a7d2b060a147a263483"
-  integrity sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==
-
-"@swc/core-linux-x64-gnu@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.17.tgz#a0c19bc9635e86ebd1c7f8e9e026503d1a1bf83d"
-  integrity sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==
-
-"@swc/core-linux-x64-musl@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.17.tgz#2179b9536235a3b02a46997ddb1c178dfadf1667"
-  integrity sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==
-
-"@swc/core-win32-arm64-msvc@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.17.tgz#3004a431c836c6b16b4660ea2425dde467a8ee36"
-  integrity sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==
-
-"@swc/core-win32-ia32-msvc@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.17.tgz#59155485d5307fb2a267e5acb215e0f440b6f48f"
-  integrity sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g==
-
-"@swc/core-win32-x64-msvc@1.4.17":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.17.tgz#b98f25fc277fb0e319f25f9fd00a82023662716b"
-  integrity sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg==
+"@swc/core-darwin-arm64@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.5.tgz#65b40093f622ec811713d2e2ebcdf8a39ae2e91d"
+  integrity sha512-Ol5ZwZYdTOZsv2NwjcT/qVVALKzVFeh+IJ4GNarr3P99+38Dkwi81OqCI1o/WaDXQYKAQC/V+CzMbkEuJJfq9Q==
+
+"@swc/core-darwin-x64@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.5.tgz#4e16d5fb55d8f3fa7d95df85e9cfbb5d57a7ac9e"
+  integrity sha512-XHWpKBIPKYLgh5/lV2PYjO84lkzf5JR51kjiloyz2Pa9HIV8tHoAP8bYdJwm4nUp2I7KcEh3pPH0AVu5LpxMKw==
+
+"@swc/core-linux-arm-gnueabihf@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.5.tgz#ab3fbac59b7c527fa5da115a96f3c87e07737686"
+  integrity sha512-vtoWNCWAe+CNSqtqIwFnIH48qgPPlUZKoQ4EVFeMM+7/kDi6SeNxoh5TierJs5bKAWxD49VkPvRoWFCk6V62mA==
+
+"@swc/core-linux-arm64-gnu@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.5.tgz#fcfb1d97f8e8ac6bd495aaaa0d15f8dfdb33b76b"
+  integrity sha512-L4l7M78U6h/rCAxId+y5Vu+1KfDRF6dJZtitFcaT293guiUQFwJv8gLxI4Jh5wFtZ0fYd0QaCuvh2Ip79CzGMg==
+
+"@swc/core-linux-arm64-musl@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.5.tgz#e8678d350500b3784bb125bef4eb97db1e388442"
+  integrity sha512-DkzJc13ukXa7oJpyn24BjIgsiOybYrc+IxjsQyfNlDrrs1QXP4elStcpkD02SsIuSyHjZV8Hw2HFBMQB3OHPrA==
+
+"@swc/core-linux-x64-gnu@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.5.tgz#e68406379d55447217a4ac1a79ffc7ce1e251b29"
+  integrity sha512-kj4ZwWJGeBEUzHrRQP2VudN+kkkYH7OI1dPVDc6kWQx5X4329JeKOas4qY0l7gDVjBbRwN9IbbPI6TIn2KfAug==
+
+"@swc/core-linux-x64-musl@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.5.tgz#40e439aeb265c3cc63526c51f4e89f6492092159"
+  integrity sha512-6pTorCs4mYhPhYtC4jNOnhGgjNd3DZcRoZ9P0tzXXP69aCbYjvlgNH/NRvAROp9AaVFeZ7a7PmCWb6+Rbe7NKg==
+
+"@swc/core-win32-arm64-msvc@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.5.tgz#efdd773a9e7ecc49bb246362a45dfc389f1fbfe0"
+  integrity sha512-o0/9pstmEjwZyrY/bA+mymF0zH7E+GT/XCVqdKeWW9Wn3gTTyWa5MZnrFgI2THQ+AXwdglMB/Zo76ARQPaz/+A==
+
+"@swc/core-win32-ia32-msvc@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.5.tgz#02082adef99bfa0101c6c94b04be636e39ed567f"
+  integrity sha512-B+nypUwsmCuaH6RtKWgiPCb+ENjxstJPPJeMJvBqlJqyCaIkZzN4M07Ozi3xVv1VG21SRkd6G3xIqRoalrNc0Q==
+
+"@swc/core-win32-x64-msvc@1.5.5":
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.5.tgz#699217ea438eb3b533b73d982659891d9aae7379"
+  integrity sha512-ry83ki9ZX0Q+GWGnqc2J618Z+FvKE8Ajn42F8EYi8Wj0q6Jz3mj+pJzgzakk2INm2ldEZ+FaRPipn4ozsZDcBg==
 
 "@swc/core@^1.3.18":
-  version "1.4.17"
-  resolved "https://registry.npmjs.org/@swc/core/-/core-1.4.17.tgz#3ea4180fa5c54282b284006a6de1263ef1cf887f"
-  integrity sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ==
+  version "1.5.5"
+  resolved "https://registry.npmjs.org/@swc/core/-/core-1.5.5.tgz#e7b7ae4323d15ba990a0ffde135a849ffddec69d"
+  integrity sha512-M8O22EEgdSONLd+7KRrXj8pn+RdAZZ7ISnPjE9KCQQlI0kkFNEquWR+uFdlFxQfwlyCe/Zb6uGXGDvtcov4IMg==
   dependencies:
     "@swc/counter" "^0.1.2"
     "@swc/types" "^0.1.5"
   optionalDependencies:
-    "@swc/core-darwin-arm64" "1.4.17"
-    "@swc/core-darwin-x64" "1.4.17"
-    "@swc/core-linux-arm-gnueabihf" "1.4.17"
-    "@swc/core-linux-arm64-gnu" "1.4.17"
-    "@swc/core-linux-arm64-musl" "1.4.17"
-    "@swc/core-linux-x64-gnu" "1.4.17"
-    "@swc/core-linux-x64-musl" "1.4.17"
-    "@swc/core-win32-arm64-msvc" "1.4.17"
-    "@swc/core-win32-ia32-msvc" "1.4.17"
-    "@swc/core-win32-x64-msvc" "1.4.17"
+    "@swc/core-darwin-arm64" "1.5.5"
+    "@swc/core-darwin-x64" "1.5.5"
+    "@swc/core-linux-arm-gnueabihf" "1.5.5"
+    "@swc/core-linux-arm64-gnu" "1.5.5"
+    "@swc/core-linux-arm64-musl" "1.5.5"
+    "@swc/core-linux-x64-gnu" "1.5.5"
+    "@swc/core-linux-x64-musl" "1.5.5"
+    "@swc/core-win32-arm64-msvc" "1.5.5"
+    "@swc/core-win32-ia32-msvc" "1.5.5"
+    "@swc/core-win32-x64-msvc" "1.5.5"
 
 "@swc/counter@^0.1.2", "@swc/counter@^0.1.3":
   version "0.1.3"
@@ -3916,10 +3928,10 @@
     lz-string "^1.5.0"
     pretty-format "^27.0.2"
 
-"@testing-library/jest-dom@^6.4.2":
-  version "6.4.2"
-  resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e"
-  integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==
+"@testing-library/jest-dom@^6.4.2", "@testing-library/jest-dom@^6.4.5":
+  version "6.4.5"
+  resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz#badb40296477149136dabef32b572ddd3b56adf1"
+  integrity sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==
   dependencies:
     "@adobe/css-tools" "^4.3.2"
     "@babel/runtime" "^7.9.2"
@@ -3927,7 +3939,7 @@
     chalk "^3.0.0"
     css.escape "^1.5.1"
     dom-accessibility-api "^0.6.3"
-    lodash "^4.17.15"
+    lodash "^4.17.21"
     redent "^3.0.0"
 
 "@testing-library/react@^12.1.5":
@@ -4090,9 +4102,9 @@
   integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==
 
 "@types/emscripten@^1.39.6":
-  version "1.39.10"
-  resolved "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz#da6e58a6171b46a41d3694f812d845d515c77e18"
-  integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==
+  version "1.39.11"
+  resolved "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.11.tgz#8f8c40cb831a2406c0ee5b0c6e847b3bf659c2e3"
+  integrity sha512-dOeX2BeNA7j6BTEqJQL3ut0bRCfsyQMd5i4FT8JfHfYhAOuJPCGh0dQFbxVJxUyQ+75x6enhDdndGb624/QszA==
 
 "@types/escodegen@^0.0.6":
   version "0.0.6"
@@ -4241,9 +4253,9 @@
   integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
 
 "@types/lodash@^4.14.156", "@types/lodash@^4.14.167":
-  version "4.17.0"
-  resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3"
-  integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==
+  version "4.17.1"
+  resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz#0fabfcf2f2127ef73b119d98452bd317c4a17eb8"
+  integrity sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==
 
 "@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.4":
   version "0.1.4"
@@ -4293,17 +4305,17 @@
   dependencies:
     "@types/node" "*"
 
-"@types/node@*", "@types/node@^20.12.7":
-  version "20.12.7"
-  resolved "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
-  integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
+"@types/node@*", "@types/node@^20.12.11":
+  version "20.12.11"
+  resolved "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be"
+  integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==
   dependencies:
     undici-types "~5.26.4"
 
 "@types/node@^18.0.0":
-  version "18.19.31"
-  resolved "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd"
-  integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==
+  version "18.19.33"
+  resolved "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48"
+  integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==
   dependencies:
     undici-types "~5.26.4"
 
@@ -4540,6 +4552,14 @@
     "@typescript-eslint/types" "6.21.0"
     "@typescript-eslint/visitor-keys" "6.21.0"
 
+"@typescript-eslint/scope-manager@7.9.0":
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz#1dd3e63a4411db356a9d040e75864851b5f2619b"
+  integrity sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==
+  dependencies:
+    "@typescript-eslint/types" "7.9.0"
+    "@typescript-eslint/visitor-keys" "7.9.0"
+
 "@typescript-eslint/type-utils@6.21.0":
   version "6.21.0"
   resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
@@ -4560,6 +4580,11 @@
   resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
   integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
 
+"@typescript-eslint/types@7.9.0":
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz#b58e485e4bfba055659c7e683ad4f5f0821ae2ec"
+  integrity sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==
+
 "@typescript-eslint/typescript-estree@5.62.0":
   version "5.62.0"
   resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
@@ -4587,7 +4612,21 @@
     semver "^7.5.4"
     ts-api-utils "^1.0.1"
 
-"@typescript-eslint/utils@6.21.0", "@typescript-eslint/utils@^6.0.0":
+"@typescript-eslint/typescript-estree@7.9.0":
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz#3395e27656060dc313a6b406c3a298b729685e07"
+  integrity sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==
+  dependencies:
+    "@typescript-eslint/types" "7.9.0"
+    "@typescript-eslint/visitor-keys" "7.9.0"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    minimatch "^9.0.4"
+    semver "^7.6.0"
+    ts-api-utils "^1.3.0"
+
+"@typescript-eslint/utils@6.21.0":
   version "6.21.0"
   resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
   integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
@@ -4614,6 +4653,16 @@
     eslint-scope "^5.1.1"
     semver "^7.3.7"
 
+"@typescript-eslint/utils@^6.0.0 || ^7.0.0":
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz#1b96a34eefdca1c820cb1bbc2751d848b4540899"
+  integrity sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.4.0"
+    "@typescript-eslint/scope-manager" "7.9.0"
+    "@typescript-eslint/types" "7.9.0"
+    "@typescript-eslint/typescript-estree" "7.9.0"
+
 "@typescript-eslint/visitor-keys@5.62.0":
   version "5.62.0"
   resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
@@ -4630,7 +4679,15 @@
     "@typescript-eslint/types" "6.21.0"
     eslint-visitor-keys "^3.4.1"
 
-"@ungap/structured-clone@^1.0.0":
+"@typescript-eslint/visitor-keys@7.9.0":
+  version "7.9.0"
+  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz#82162656e339c3def02895f5c8546f6888d9b9ea"
+  integrity sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==
+  dependencies:
+    "@typescript-eslint/types" "7.9.0"
+    eslint-visitor-keys "^3.4.3"
+
+"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0":
   version "1.2.0"
   resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
   integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
@@ -4652,9 +4709,9 @@
     tinyspy "^2.2.0"
 
 "@vitest/spy@^1.3.1":
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.2.tgz#6b439a933b64522edbb8da878fa5b5b6361140ef"
-  integrity sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==
+  version "1.6.0"
+  resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d"
+  integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==
   dependencies:
     tinyspy "^2.2.0"
 
@@ -4669,9 +4726,9 @@
     pretty-format "^29.7.0"
 
 "@vitest/utils@^1.3.1":
-  version "1.5.2"
-  resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.5.2.tgz#6a314daa8400a242b5509908cd8977a7bd66ef65"
-  integrity sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==
+  version "1.6.0"
+  resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1"
+  integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==
   dependencies:
     diff-sequences "^29.6.3"
     estree-walker "^3.0.3"
@@ -4866,9 +4923,9 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
     negotiator "0.6.3"
 
 ace-builds@^1.17.0:
-  version "1.33.1"
-  resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.33.1.tgz#a37904fb2d37756733346c688dcb235662877d6e"
-  integrity sha512-pj5mcXV1n3s86UI4SWUt8X0ltN8cTaYcvF76cSmvy5i2ZDtXX9KkjVcYTGkCV7ox6VUrzqHByeqH0xRsMjXi4g==
+  version "1.33.2"
+  resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.33.2.tgz#4ce274f940491b4825f37881c633f7e0593e010b"
+  integrity sha512-uDqCe+XDIdnADaDrA8o+x+qAfbM6uqyDQ43QcE6qC7zBPTvQSMOSPcXW+HvjZhEc2YbVYSaxXJX1qQKPgYqi5w==
 
 acorn-globals@^7.0.0:
   version "7.0.1"
@@ -4883,7 +4940,7 @@ acorn-import-assertions@^1.9.0:
   resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
   integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
 
-acorn-jsx@^5.3.1:
+acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
@@ -4898,12 +4955,12 @@ acorn-walk@^8.0.2, acorn-walk@^8.1.1:
   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:
+acorn@^7.4.1:
   version "7.4.1"
   resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
-acorn@^8.1.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2:
+acorn@^8.1.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0:
   version "8.11.3"
   resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
   integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
@@ -4947,7 +5004,7 @@ ajv-keywords@^5.1.0:
   dependencies:
     fast-deep-equal "^3.1.3"
 
-ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5:
+ajv@^6.12.4, ajv@^6.12.5:
   version "6.12.6"
   resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -4958,19 +5015,14 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5:
     uri-js "^4.2.2"
 
 ajv@^8.0.0, ajv@^8.0.1, ajv@^8.5.0, ajv@^8.9.0:
-  version "8.12.0"
-  resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
-  integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
+  version "8.13.0"
+  resolved "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91"
+  integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==
   dependencies:
-    fast-deep-equal "^3.1.1"
+    fast-deep-equal "^3.1.3"
     json-schema-traverse "^1.0.0"
     require-from-string "^2.0.2"
-    uri-js "^4.2.2"
-
-ansi-colors@^4.1.1:
-  version "4.1.3"
-  resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
-  integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+    uri-js "^4.4.1"
 
 ansi-escapes@^4.2.1, ansi-escapes@^4.3.2:
   version "4.3.2"
@@ -5266,9 +5318,9 @@ axe-core@=4.7.0:
   integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
 
 axe-core@^4.2.0:
-  version "4.9.0"
-  resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.9.0.tgz#b18971494551ab39d4ff5f7d4c6411bd20cc7c2a"
-  integrity sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==
+  version "4.9.1"
+  resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae"
+  integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==
 
 axios@^1.6.1, axios@^1.6.8:
   version "1.6.8"
@@ -5705,9 +5757,9 @@ camelize@^1.0.0:
   integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
 
 caniuse-lite@^1.0.30001587:
-  version "1.0.30001614"
-  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz#f894b4209376a0bf923d67d9c361d96b1dfebe39"
-  integrity sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==
+  version "1.0.30001617"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb"
+  integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==
 
 canvg@^3.0.6:
   version "3.0.10"
@@ -5870,9 +5922,9 @@ cli-spinners@^2.5.0, cli-spinners@^2.9.2:
   integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
 
 cli-table3@^0.6.1:
-  version "0.6.4"
-  resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0"
-  integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==
+  version "0.6.5"
+  resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f"
+  integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==
   dependencies:
     string-width "^4.2.0"
   optionalDependencies:
@@ -6472,7 +6524,7 @@ debug@2.6.9:
   dependencies:
     ms "2.0.0"
 
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4:
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -6707,9 +6759,9 @@ detect-package-manager@^2.0.1:
     execa "^5.1.1"
 
 detect-port@^1.3.0:
-  version "1.5.1"
-  resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b"
-  integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==
+  version "1.6.1"
+  resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67"
+  integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==
   dependencies:
     address "^1.0.1"
     debug "4"
@@ -6830,9 +6882,9 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
     domelementtype "^2.2.0"
 
 dompurify@^2.2.0:
-  version "2.5.1"
-  resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.5.1.tgz#4ccfdab5ee6a887fc9ce62079166507d3fa5f74f"
-  integrity sha512-HH391uRJXAAeelougod93W++2gECfHIVCqq+B/4znhjCgb2zVPL+iLOVnTYwejqAuNf69Ffc5ILQYdPHsZACJA==
+  version "2.5.3"
+  resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.5.3.tgz#bc901a9c40a7d97176c1d0ab9a24939db54270a2"
+  integrity sha512-09uyBM2URzOfXMUAqGRnm9R9IUeSkzO9PktXc2eVQIsBmmJUqRmfL1xW2QPBxVJEtlEVs5d8ndrsIQsyAqs81g==
 
 domutils@^1.5.1:
   version "1.7.0"
@@ -6897,9 +6949,9 @@ ejs@^3.1.8:
     jake "^10.8.5"
 
 electron-to-chromium@^1.4.668:
-  version "1.4.750"
-  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz#d278a619af727ed069de1317115187282b1131ee"
-  integrity sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==
+  version "1.4.764"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.764.tgz#6e817e9d767434eb48a85cc9915566485c5ba2c3"
+  integrity sha512-ZXbPV46Y4dNCA+k7YHB+BYlzcoMtZ1yH6V0tQ1ul0wmA7RiwJfS29LSdRlE1myWBXRzEgm/Lz6tryj5WVQiLmg==
 
 element-resize-detector@^1.1.14:
   version "1.2.4"
@@ -6950,21 +7002,13 @@ endent@^2.0.1:
     objectorarray "^1.0.5"
 
 enhanced-resolve@^5.12.0, enhanced-resolve@^5.16.0:
-  version "5.16.0"
-  resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787"
-  integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==
+  version "5.16.1"
+  resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567"
+  integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==
   dependencies:
     graceful-fs "^4.2.4"
     tapable "^2.2.0"
 
-enquirer@^2.3.5:
-  version "2.4.1"
-  resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
-  integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
-  dependencies:
-    ansi-colors "^4.1.1"
-    strip-ansi "^6.0.1"
-
 entities@^1.1.1:
   version "1.1.2"
   resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
@@ -7219,7 +7263,7 @@ esbuild@^0.17.18:
     "@esbuild/win32-ia32" "0.20.2"
     "@esbuild/win32-x64" "0.20.2"
 
-escalade@^3.1.1:
+escalade@^3.1.1, escalade@^3.1.2:
   version "3.1.2"
   resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
   integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
@@ -7330,12 +7374,12 @@ eslint-plugin-import@^2.29.1:
     semver "^6.3.1"
     tsconfig-paths "^3.15.0"
 
-eslint-plugin-jest@^28.3.0:
-  version "28.3.0"
-  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz#d52dea5e4f191fde061cbf1cea44c8a0a23e62ec"
-  integrity sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==
+eslint-plugin-jest@^28.5.0:
+  version "28.5.0"
+  resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz#b497b795de37f671eaccd38bd83030186ff5dc8d"
+  integrity sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==
   dependencies:
-    "@typescript-eslint/utils" "^6.0.0"
+    "@typescript-eslint/utils" "^6.0.0 || ^7.0.0"
 
 eslint-plugin-jsx-a11y@^6.8.0:
   version "6.8.0"
@@ -7413,89 +7457,88 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1:
     esrecurse "^4.3.0"
     estraverse "^4.1.1"
 
-eslint-utils@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
-  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+eslint-scope@^7.2.2:
+  version "7.2.2"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+  integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
   dependencies:
-    eslint-visitor-keys "^1.1.0"
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
 
-eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+eslint-visitor-keys@^1.0.0:
   version "1.3.0"
   resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
   integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
 
-eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
+eslint-visitor-keys@^2.1.0:
   version "2.1.0"
   resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
   integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
 
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
   version "3.4.3"
   resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
-eslint@^7.32.0:
-  version "7.32.0"
-  resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
-  integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
+eslint@^8.57.0:
+  version "8.57.0"
+  resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+  integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
   dependencies:
-    "@babel/code-frame" "7.12.11"
-    "@eslint/eslintrc" "^0.4.3"
-    "@humanwhocodes/config-array" "^0.5.0"
-    ajv "^6.10.0"
+    "@eslint-community/eslint-utils" "^4.2.0"
+    "@eslint-community/regexpp" "^4.6.1"
+    "@eslint/eslintrc" "^2.1.4"
+    "@eslint/js" "8.57.0"
+    "@humanwhocodes/config-array" "^0.11.14"
+    "@humanwhocodes/module-importer" "^1.0.1"
+    "@nodelib/fs.walk" "^1.2.8"
+    "@ungap/structured-clone" "^1.2.0"
+    ajv "^6.12.4"
     chalk "^4.0.0"
     cross-spawn "^7.0.2"
-    debug "^4.0.1"
+    debug "^4.3.2"
     doctrine "^3.0.0"
-    enquirer "^2.3.5"
     escape-string-regexp "^4.0.0"
-    eslint-scope "^5.1.1"
-    eslint-utils "^2.1.0"
-    eslint-visitor-keys "^2.0.0"
-    espree "^7.3.1"
-    esquery "^1.4.0"
+    eslint-scope "^7.2.2"
+    eslint-visitor-keys "^3.4.3"
+    espree "^9.6.1"
+    esquery "^1.4.2"
     esutils "^2.0.2"
     fast-deep-equal "^3.1.3"
     file-entry-cache "^6.0.1"
-    functional-red-black-tree "^1.0.1"
-    glob-parent "^5.1.2"
-    globals "^13.6.0"
-    ignore "^4.0.6"
-    import-fresh "^3.0.0"
+    find-up "^5.0.0"
+    glob-parent "^6.0.2"
+    globals "^13.19.0"
+    graphemer "^1.4.0"
+    ignore "^5.2.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
-    js-yaml "^3.13.1"
+    is-path-inside "^3.0.3"
+    js-yaml "^4.1.0"
     json-stable-stringify-without-jsonify "^1.0.1"
     levn "^0.4.1"
     lodash.merge "^4.6.2"
-    minimatch "^3.0.4"
+    minimatch "^3.1.2"
     natural-compare "^1.4.0"
-    optionator "^0.9.1"
-    progress "^2.0.0"
-    regexpp "^3.1.0"
-    semver "^7.2.1"
-    strip-ansi "^6.0.0"
-    strip-json-comments "^3.1.0"
-    table "^6.0.9"
+    optionator "^0.9.3"
+    strip-ansi "^6.0.1"
     text-table "^0.2.0"
-    v8-compile-cache "^2.0.3"
 
-espree@^7.3.0, espree@^7.3.1:
-  version "7.3.1"
-  resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
-  integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+espree@^9.6.0, espree@^9.6.1:
+  version "9.6.1"
+  resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+  integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
   dependencies:
-    acorn "^7.4.0"
-    acorn-jsx "^5.3.1"
-    eslint-visitor-keys "^1.3.0"
+    acorn "^8.9.0"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.4.1"
 
 esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
   version "4.0.1"
   resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
   integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
 
-esquery@^1.4.0:
+esquery@^1.4.2:
   version "1.5.0"
   resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
   integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
@@ -7888,9 +7931,9 @@ flatted@^3.2.9:
   integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
 
 flow-parser@0.*:
-  version "0.235.1"
-  resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.235.1.tgz#469c70adfa3c156f3a1792e7b6d7017f01f45f1d"
-  integrity sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==
+  version "0.236.0"
+  resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.236.0.tgz#8e8e6c59ff7e8d196c0ed215b3919320a1c6e332"
+  integrity sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw==
 
 follow-redirects@^1.0.0, follow-redirects@^1.15.6:
   version "1.15.6"
@@ -8025,9 +8068,9 @@ fs-minipass@^2.0.0:
     minipass "^3.0.0"
 
 fs-monkey@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788"
-  integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2"
+  integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==
 
 fs.realpath@^1.0.0:
   version "1.0.0"
@@ -8064,11 +8107,6 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
     es-abstract "^1.22.1"
     functions-have-names "^1.2.3"
 
-functional-red-black-tree@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
-  integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
-
 functions-have-names@^1.2.3:
   version "1.2.3"
   resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
@@ -8140,9 +8178,9 @@ get-symbol-description@^1.0.2:
     get-intrinsic "^1.2.4"
 
 get-tsconfig@^4.5.0:
-  version "4.7.3"
-  resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83"
-  integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==
+  version "4.7.5"
+  resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf"
+  integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==
   dependencies:
     resolve-pkg-maps "^1.0.0"
 
@@ -8175,7 +8213,7 @@ gl-matrix@^3.4.3:
   resolved "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9"
   integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==
 
-glob-parent@^5.1.2, glob-parent@~5.1.2:
+glob-parent@^5.1.2, glob-parent@^6.0.2, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -8188,15 +8226,15 @@ glob-to-regexp@^0.4.1:
   integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
 
 glob@^10.0.0, glob@^10.3.7:
-  version "10.3.12"
-  resolved "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b"
-  integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==
+  version "10.3.15"
+  resolved "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz#e72bc61bc3038c90605f5dd48543dc67aaf3b50d"
+  integrity sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==
   dependencies:
     foreground-child "^3.1.0"
     jackspeak "^2.3.6"
     minimatch "^9.0.1"
     minipass "^7.0.4"
-    path-scurry "^1.10.2"
+    path-scurry "^1.11.0"
 
 glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
   version "7.2.3"
@@ -8249,7 +8287,7 @@ globals@^11.1.0:
   resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
-globals@^13.6.0, globals@^13.9.0:
+globals@^13.19.0:
   version "13.24.0"
   resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
   integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
@@ -8257,11 +8295,12 @@ globals@^13.6.0, globals@^13.9.0:
     type-fest "^0.20.2"
 
 globalthis@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
-  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
+  integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
   dependencies:
-    define-properties "^1.1.3"
+    define-properties "^1.2.1"
+    gopd "^1.0.1"
 
 globby@^11.0.1, globby@^11.0.2, globby@^11.1.0:
   version "11.1.0"
@@ -8650,11 +8689,6 @@ ieee754@^1.1.12, ieee754@^1.1.13:
   resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
   integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
 
-ignore@^4.0.6:
-  version "4.0.6"
-  resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
-  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-
 ignore@^5.2.0, ignore@^5.2.1, ignore@^5.2.4:
   version "5.3.1"
   resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
@@ -8671,11 +8705,11 @@ immutability-helper@^3.1.1:
   integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==
 
 immutable@^4.0.0:
-  version "4.3.5"
-  resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0"
-  integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
+  version "4.3.6"
+  resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447"
+  integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==
 
-import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
+import-fresh@^3.2.1, import-fresh@^3.3.0:
   version "3.3.0"
   resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
   integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -8982,7 +9016,7 @@ is-path-cwd@^2.2.0:
   resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
   integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
 
-is-path-inside@^3.0.2:
+is-path-inside@^3.0.2, is-path-inside@^3.0.3:
   version "3.0.3"
   resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
   integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
@@ -9242,9 +9276,9 @@ jackspeak@^2.3.6:
     "@pkgjs/parseargs" "^0.11.0"
 
 jake@^10.8.5:
-  version "10.8.7"
-  resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
-  integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+  version "10.9.1"
+  resolved "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz#8dc96b7fcc41cb19aa502af506da4e1d56f5e62b"
+  integrity sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==
   dependencies:
     async "^3.2.3"
     chalk "^4.0.2"
@@ -9712,9 +9746,9 @@ jexl@^2.2.2:
     "@babel/runtime" "^7.10.2"
 
 joi@^17.11.0:
-  version "17.13.0"
-  resolved "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz#b6f340b8029ee7af2397f821d17a4f03bf34b043"
-  integrity sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==
+  version "17.13.1"
+  resolved "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz#9c7b53dc3b44dd9ae200255cc3b398874918a6ca"
+  integrity sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==
   dependencies:
     "@hapi/hoek" "^9.3.0"
     "@hapi/topo" "^5.1.0"
@@ -10243,12 +10277,12 @@ memfs@^3.4.1, memfs@^3.4.12:
     fs-monkey "^1.0.4"
 
 memfs@^4.6.0:
-  version "4.9.1"
-  resolved "https://registry.npmjs.org/memfs/-/memfs-4.9.1.tgz#cd0b94987c365298a6e57b4beb98c658008d7ff1"
-  integrity sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw==
+  version "4.9.2"
+  resolved "https://registry.npmjs.org/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433"
+  integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==
   dependencies:
-    "@jsonjoy.com/json-pack" "^1.0.2"
-    "@jsonjoy.com/util" "^1.1.0"
+    "@jsonjoy.com/json-pack" "^1.0.3"
+    "@jsonjoy.com/util" "^1.1.2"
     sonic-forest "^1.0.0"
     tslib "^2.0.0"
 
@@ -10354,7 +10388,7 @@ minimatch@9.0.3:
   dependencies:
     brace-expansion "^2.0.1"
 
-minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
   version "3.1.2"
   resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
   integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -10368,7 +10402,7 @@ minimatch@^5.0.1:
   dependencies:
     brace-expansion "^2.0.1"
 
-minimatch@^9.0.1:
+minimatch@^9.0.1, minimatch@^9.0.4:
   version "9.0.4"
   resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
   integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
@@ -10402,9 +10436,9 @@ minipass@^5.0.0:
   integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
 
 "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
-  version "7.0.4"
-  resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
-  integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+  version "7.1.1"
+  resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481"
+  integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==
 
 minizlib@^2.1.1:
   version "2.1.2"
@@ -10468,16 +10502,16 @@ msw-storybook-addon@2.0.0--canary.122.06f0c92.0:
   dependencies:
     is-node-process "^1.0.1"
 
-msw@^2.2.14:
-  version "2.2.14"
-  resolved "https://registry.npmjs.org/msw/-/msw-2.2.14.tgz#ed16b89f99ffc105a84b0295a6fcae2ee99f5c62"
-  integrity sha512-64i8rNCa1xzDK8ZYsTrVMli05D687jty8+Th+PU5VTbJ2/4P7fkQFVyDQ6ZFT5FrNR8z2BHhbY47fKNvfHrumA==
+msw@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/msw/-/msw-2.3.0.tgz#7d48ab8472a435878f4ee94dfa0efcd2b3c2264b"
+  integrity sha512-cDr1q/QTMzaWhY8n9lpGhceY209k29UZtdTgJ3P8Bzne3TSMchX2EM/ldvn4ATLOktpCefCU2gcEgzHc31GTPw==
   dependencies:
     "@bundled-es-modules/cookie" "^2.0.0"
     "@bundled-es-modules/statuses" "^1.0.1"
     "@inquirer/confirm" "^3.0.0"
     "@mswjs/cookies" "^1.1.0"
-    "@mswjs/interceptors" "^0.26.14"
+    "@mswjs/interceptors" "^0.29.0"
     "@open-draft/until" "^2.1.0"
     "@types/cookie" "^0.6.0"
     "@types/statuses" "^2.0.4"
@@ -10683,9 +10717,9 @@ numeral@^2.0.6:
   integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==
 
 nwsapi@^2.2.2:
-  version "2.2.9"
-  resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz#7f3303218372db2e9f27c27766bcfc59ae7e61c6"
-  integrity sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==
+  version "2.2.10"
+  resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8"
+  integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==
 
 nyc@^15.1.0:
   version "15.1.0"
@@ -10877,7 +10911,7 @@ open@^8.0.4, open@^8.4.0:
     is-docker "^2.1.1"
     is-wsl "^2.2.0"
 
-optionator@^0.9.1:
+optionator@^0.9.3:
   version "0.9.4"
   resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
   integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
@@ -11101,10 +11135,10 @@ path-parse@^1.0.7:
   resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
-path-scurry@^1.10.2:
-  version "1.10.2"
-  resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7"
-  integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==
+path-scurry@^1.11.0:
+  version "1.11.1"
+  resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
+  integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
   dependencies:
     lru-cache "^10.2.0"
     minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -11211,17 +11245,17 @@ pkg-dir@^7.0.0:
   dependencies:
     find-up "^6.3.0"
 
-playwright-core@1.43.1, playwright-core@>=1.2.0:
-  version "1.43.1"
-  resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz#0eafef9994c69c02a1a3825a4343e56c99c03b02"
-  integrity sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==
+playwright-core@1.44.0, playwright-core@>=1.2.0:
+  version "1.44.0"
+  resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz#316c4f0bca0551ffb88b6eb1c97bc0d2d861b0d5"
+  integrity sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==
 
 playwright@^1.14.0:
-  version "1.43.1"
-  resolved "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz#8ad08984ac66c9ef3d0db035be54dd7ec9f1c7d9"
-  integrity sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==
+  version "1.44.0"
+  resolved "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz#22894e9b69087f6beb639249323d80fe2b5087ff"
+  integrity sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==
   dependencies:
-    playwright-core "1.43.1"
+    playwright-core "1.44.0"
   optionalDependencies:
     fsevents "2.3.2"
 
@@ -11396,11 +11430,6 @@ process@^0.11.10:
   resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
   integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
 
-progress@^2.0.0:
-  version "2.0.3"
-  resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
-  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
 promise-inflight@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -11724,20 +11753,20 @@ react-resize-detector@^3.2.1:
     prop-types "^15.6.2"
     resize-observer-polyfill "^1.5.1"
 
-react-router-dom@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz#8b80ad92ad28f4dc38972e92d84b4c208150545a"
-  integrity sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==
+react-router-dom@^6.23.1:
+  version "6.23.1"
+  resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz#30cbf266669693e9492aa4fc0dde2541ab02322f"
+  integrity sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==
   dependencies:
-    "@remix-run/router" "1.16.0"
-    react-router "6.23.0"
+    "@remix-run/router" "1.16.1"
+    react-router "6.23.1"
 
-react-router@6.23.0:
-  version "6.23.0"
-  resolved "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz#2f2d7492c66a6bdf760be4c6bdf9e1d672fa154b"
-  integrity sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==
+react-router@6.23.1:
+  version "6.23.1"
+  resolved "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz#d08cbdbd9d6aedc13eea6e94bc6d9b29cb1c4be9"
+  integrity sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==
   dependencies:
-    "@remix-run/router" "1.16.0"
+    "@remix-run/router" "1.16.1"
 
 react-spring@9.2.4:
   version "9.2.4"
@@ -11816,9 +11845,9 @@ readdirp@~3.6.0:
     picomatch "^2.2.1"
 
 recast@^0.23.3, recast@^0.23.5:
-  version "0.23.6"
-  resolved "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz#198fba74f66143a30acc81929302d214ce4e3bfa"
-  integrity sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==
+  version "0.23.7"
+  resolved "https://registry.npmjs.org/recast/-/recast-0.23.7.tgz#1e08f164e10402b075c904a2b01022b3da039c72"
+  integrity sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag==
   dependencies:
     ast-types "^0.16.1"
     esprima "~4.0.0"
@@ -11905,11 +11934,6 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2:
     es-errors "^1.3.0"
     set-function-name "^2.0.1"
 
-regexpp@^3.1.0:
-  version "3.2.0"
-  resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
-  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
-
 regexpu-core@^5.3.1:
   version "5.3.2"
   resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
@@ -12118,9 +12142,9 @@ rimraf@^3.0.0, rimraf@^3.0.2:
     glob "^7.1.3"
 
 rimraf@^5.0.5:
-  version "5.0.5"
-  resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
-  integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
+  version "5.0.7"
+  resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74"
+  integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==
   dependencies:
     glob "^10.3.7"
 
@@ -12202,9 +12226,9 @@ safe-regex-test@^1.0.3:
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 
 sass@^1.62.1:
-  version "1.75.0"
-  resolved "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c"
-  integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==
+  version "1.77.1"
+  resolved "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz#018cdfb206afd14724030c02e9fefd8f30a76cd0"
+  integrity sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==
   dependencies:
     chokidar ">=3.0.0 <4.0.0"
     immutable "^4.0.0"
@@ -12278,12 +12302,10 @@ selfsigned@^2.4.1:
     "@types/node-forge" "^1.3.0"
     node-forge "^1"
 
-"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^6.0.0, semver@^6.3.0, semver@^6.3.1, semver@^7.1.1, semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
-  version "7.6.0"
-  resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
-  integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
-  dependencies:
-    lru-cache "^6.0.0"
+"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^6.0.0, semver@^6.3.0, semver@^6.3.1, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2:
+  version "7.6.2"
+  resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
+  integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
 
 send@0.18.0:
   version "0.18.0"
@@ -12464,9 +12486,11 @@ sockjs@^0.3.24:
     websocket-driver "^0.7.4"
 
 sonic-forest@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.0.tgz#b0b77d9bca76434f4ef87b61042d041da63f3be5"
-  integrity sha512-yFO2N4uTUFtgKLw03WWFpN1iEwZySweMsa18XN3Kt0yYrlmVHunC2ZgM+437zDoKISAJHcH3Cg18U7d6tuSgSQ==
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb"
+  integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==
+  dependencies:
+    tree-dump "^1.0.0"
 
 sort-asc@^0.2.0:
   version "0.2.0"
@@ -12648,12 +12672,12 @@ store2@^2.14.2:
   resolved "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz#24077d7ba110711864e4f691d2af941ec533deb5"
   integrity sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==
 
-storybook@^8.0.9:
-  version "8.0.9"
-  resolved "https://registry.npmjs.org/storybook/-/storybook-8.0.9.tgz#169f0625511f4881046a467b56b196b093176a1c"
-  integrity sha512-/Mvij0Br5bUwJpCvqAUZMEDIWmdRxEyllvVj8Ukw5lIWJePxfpSsz4px5jg9+R6B9tO8sQSqjg4HJvQ/pZk8Tg==
+storybook@^8.0.10:
+  version "8.0.10"
+  resolved "https://registry.npmjs.org/storybook/-/storybook-8.0.10.tgz#397e7a95641421610ba4741bc63adbb380eed01f"
+  integrity sha512-9/4oxISopLyr5xz7Du27mmQgcIfB7UTLlNzkK4IklWTiSgsOgYgZpsmIwymoXNtkrvh+QsqskdcUP1C7nNiEtw==
   dependencies:
-    "@storybook/cli" "8.0.9"
+    "@storybook/cli" "8.0.10"
 
 stream-shift@^1.0.0:
   version "1.0.3"
@@ -12832,7 +12856,7 @@ strip-indent@^4.0.0:
   dependencies:
     min-indent "^1.0.1"
 
-strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.0.1, strip-json-comments@^3.1.1:
   version "3.1.1"
   resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -12973,7 +12997,7 @@ symbol-tree@^3.2.4:
   resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
   integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
 
-table@^6.0.9, table@^6.8.1:
+table@^6.8.1:
   version "6.8.2"
   resolved "https://registry.npmjs.org/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58"
   integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==
@@ -13162,9 +13186,9 @@ to-regex-range@^5.0.1:
     is-number "^7.0.0"
 
 tocbot@^4.20.1:
-  version "4.27.13"
-  resolved "https://registry.npmjs.org/tocbot/-/tocbot-4.27.13.tgz#7568a9da2e04ee13b56202ecbf8b90de79525fc9"
-  integrity sha512-zS8GVVg14x/KBTxbvF6s3BNLltfMNZxTPaBpj+FjuwmnSv+ZK0trNN4uV5Ptw64NLFi2E30gt33+/a1Fkt3cWQ==
+  version "4.27.20"
+  resolved "https://registry.npmjs.org/tocbot/-/tocbot-4.27.20.tgz#c7ba627585894fa306d65b08f53f624949becf19"
+  integrity sha512-6M78FT20+FA5edtx7KowLvhG3gbZ6GRcEkL/0b2TcPbn6Ba+1ayI3SEVxe25zjkWGs0jd04InImaO81Hd8Hukw==
 
 toidentifier@1.0.1:
   version "1.0.1"
@@ -13193,6 +13217,11 @@ tr46@~0.0.3:
   resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
   integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
 
+tree-dump@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96"
+  integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==
+
 tree-kill@^1.2.2:
   version "1.2.2"
   resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
@@ -13203,7 +13232,7 @@ trim-newlines@^3.0.0:
   resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
   integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
 
-ts-api-utils@^1.0.1:
+ts-api-utils@^1.0.1, ts-api-utils@^1.3.0:
   version "1.3.0"
   resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
   integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
@@ -13316,9 +13345,9 @@ type-fest@^2.19.0, type-fest@~2.19:
   integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
 
 type-fest@^4.9.0:
-  version "4.18.0"
-  resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.18.0.tgz#414399bfdecfc60d6e89af9f5cf197aef1b6515b"
-  integrity sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==
+  version "4.18.2"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz#8d765c42e7280a11f4d04fb77a00dacc417c8b05"
+  integrity sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==
 
 type-is@~1.6.18:
   version "1.6.18"
@@ -13523,14 +13552,14 @@ untildify@^4.0.0:
   integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
 
 update-browserslist-db@^1.0.13:
-  version "1.0.13"
-  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
-  integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+  version "1.0.15"
+  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz#60ed9f8cba4a728b7ecf7356f641a31e3a691d97"
+  integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==
   dependencies:
-    escalade "^3.1.1"
+    escalade "^3.1.2"
     picocolors "^1.0.0"
 
-uri-js@^4.2.2:
+uri-js@^4.2.2, uri-js@^4.4.1:
   version "4.4.1"
   resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
   integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
@@ -13626,7 +13655,7 @@ v8-compile-cache-lib@^3.0.1:
   resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
   integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
 
-v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0:
+v8-compile-cache@^2.3.0:
   version "2.4.0"
   resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128"
   integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==
@@ -14215,7 +14244,7 @@ yocto-queue@^1.0.0:
   resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
   integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
 
-zod@^3.23.4:
-  version "3.23.4"
-  resolved "https://registry.npmjs.org/zod/-/zod-3.23.4.tgz#c63805b2f39e10d4ab3d55eb3c8cdb472c79dfb1"
-  integrity sha512-/AtWOKbBgjzEYYQRNfoGKHObgfAZag6qUJX1VbHo2PRBgS+wfWagEY2mizjfyAPcGesrJOcx/wcl0L9WnVrHFw==
+zod@^3.23.8:
+  version "3.23.8"
+  resolved "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
+  integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==


Test patch:
diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml
index 26f125480..c4fd2b230 100644
--- a/.github/workflows/build-test-release.yml
+++ b/.github/workflows/build-test-release.yml
@@ -281,7 +281,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.6
+      - uses: splunk/appinspect-cli-action@v2.7
         with:
           app_path: tests/packaged
           included_tags: ${{ matrix.tags }}
diff --git a/tests/smoke/test_ucc_build.py b/tests/smoke/test_ucc_build.py
index 1670c6145..a813fa583 100644
--- a/tests/smoke/test_ucc_build.py
+++ b/tests/smoke/test_ucc_build.py
@@ -6,6 +6,7 @@
 from pathlib import Path
 
 from tests.smoke import helpers
+from tests.unit import helpers as unit_helpers
 import addonfactory_splunk_conf_parser_lib as conf_parser
 
 from splunk_add_on_ucc_framework.commands import build
@@ -188,6 +189,8 @@ def test_ucc_generate_with_everything():
             ("default", "data", "ui", "views", "inputs.xml"),
             ("default", "data", "ui", "views", "dashboard.xml"),
             ("default", "data", "ui", "views", "splunk_ta_uccexample_redirect.xml"),
+            ("bin", "helper_one.py"),
+            ("bin", "helper_two.py"),
             ("bin", "example_input_one.py"),
             ("bin", "example_input_two.py"),
             ("bin", "example_input_three.py"),
@@ -222,8 +225,8 @@ def test_ucc_generate_with_everything():
             ("static", "appIconAlt_2x.png"),
         ]
         for f in files_to_exist:
-            expected_file_path = path.join(expected_folder, *f)
-            assert path.exists(expected_file_path)
+            actual_file_path = path.join(actual_folder, *f)
+            assert path.exists(actual_file_path)
 
         # when custom files are provided, default files shouldn't be shipped
         files_should_be_absent = [
@@ -308,8 +311,8 @@ def test_ucc_generate_with_configuration():
             ("static", "appIconAlt_2x.png"),
         ]
         for f in files_to_exist:
-            expected_file_path = path.join(expected_folder, *f)
-            assert path.exists(expected_file_path)
+            actual_file_path = path.join(actual_folder, *f)
+            assert path.exists(actual_file_path)
 
 
 def test_ucc_generate_with_configuration_files_only():
@@ -365,10 +368,10 @@ def test_ucc_generate_openapi_with_configuration_files_only():
         )
         build.generate(source=package_folder, output_directory=temp_dir)
 
-        expected_file_path = path.join(
+        actual_file_path = path.join(
             temp_dir, "Splunk_TA_UCCExample", "appserver", "static", "openapi.json"
         )
-        assert not path.exists(expected_file_path)
+        assert not path.exists(actual_file_path)
 
 
 def test_ucc_build_verbose_mode(caplog):
@@ -503,13 +506,18 @@ def test_ucc_generate_with_everything_uccignore(caplog):
             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"
+        edm_paths = {
+            f"{temp_dir}/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_example_input_one.py",
+            f"{temp_dir}/Splunk_TA_UCCExample/bin/helper_one.py",
+            f"{temp_dir}/Splunk_TA_UCCExample/bin/example_input_one.py",
+            f"{temp_dir}/Splunk_TA_UCCExample/bin/splunk_ta_uccexample_rh_example_input_two.py",
+        }
+        removed = set(
+            caplog.text.split("Removed:", 1)[1].split("INFO")[0].strip().split("\n")
+        )
 
         assert expected_warning_msg in caplog.text
-        assert (edm1 + edm2 + edm3 + edm4) in caplog.text
+        assert edm_paths == removed
 
         actual_folder = path.join(temp_dir, "Splunk_TA_UCCExample")
         # when custom files are provided, default files shouldn't be shipped
@@ -533,3 +541,29 @@ def test_ucc_generate_only_one_tab():
         "package",
     )
     build.generate(source=package_folder)
+
+
+def test_ucc_generate_with_all_alert_types(tmp_path, caplog):
+    package_folder = path.join(
+        path.dirname(path.realpath(__file__)),
+        "..",
+        "testdata",
+        "test_addons",
+        "package_global_config_only_one_tab",
+        "package",
+    )
+    tmp_file_gc = tmp_path / "globalConfig.json"
+    unit_helpers.copy_testdata_gc_to_tmp_file(
+        tmp_file_gc, "valid_config_all_alerts.json"
+    )
+
+    build.generate(source=package_folder, config_path=str(tmp_file_gc))
+
+    # there are 2 occurrences of 'activeResponse' in 'valid_config_all_alerts.json'
+    assert (
+        caplog.messages.count(
+            "'activeResponse' is deprecated. Please use 'adaptiveResponse' instead."
+        )
+        == 2
+    )
+    assert "Updated globalConfig schema to version 0.0.4" in caplog.messages
diff --git a/tests/smoke/test_ucc_init.py b/tests/smoke/test_ucc_init.py
index 7b7fa6809..b8f72a231 100644
--- a/tests/smoke/test_ucc_init.py
+++ b/tests/smoke/test_ucc_init.py
@@ -32,6 +32,7 @@ def test_ucc_init():
         ("package", "LICENSE.txt"),
         ("package", "app.manifest"),
         ("package", "bin", "demo_input.py"),
+        ("package", "bin", "demo_input_helper.py"),
         ("package", "lib", "requirements.txt"),
     ]
     helpers.compare_file_content(
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 7a6d40e89..cbf8f7fd3 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,110 +1,39 @@
-import json
-import logging
-import sys
-
 import import_declare_test
-from solnlib import conf_manager, log
-from splunklib import modularinput as smi
-
-ADDON_NAME = "demo_addon_for_splunk"
-
-
-def logger_for_input(input_name: str) -> logging.Logger:
-    return log.Logs().get_logger(f"{ADDON_NAME.lower()}_{input_name}")
-
-
-def get_account_api_key(session_key: str, account_name: str):
-    cfm = conf_manager.ConfManager(
-        session_key,
-        ADDON_NAME,
-        realm=f"__REST_CREDENTIAL__#{ADDON_NAME}#configs/conf-demo_addon_for_splunk_account",
-    )
-    account_conf_file = cfm.get_conf("demo_addon_for_splunk_account")
-    return account_conf_file.get(account_name).get("api_key")
 
+import sys
 
-def get_data_from_api(logger: logging.Logger, api_key: str):
-    logger.info("Getting data from an external API")
-    dummy_data = [
-        {
-            "line1": "hello",
-        },
-        {
-            "line2": "world",
-        },
-    ]
-    return dummy_data
+from splunklib import modularinput as smi
+from demo_input_helper import stream_events, validate_input
 
 
-class Input(smi.Script):
+class DEMO_INPUT(smi.Script):
     def __init__(self):
-        super().__init__()
+        super(DEMO_INPUT, self).__init__()
 
     def get_scheme(self):
-        scheme = smi.Scheme("demo_input")
-        scheme.description = "demo_input input"
+        scheme = smi.Scheme('demo_input')
+        scheme.description = 'demo_input input'
         scheme.use_external_validation = True
         scheme.streaming_mode_xml = True
         scheme.use_single_instance = False
+
         scheme.add_argument(
             smi.Argument(
-                "name", title="Name", description="Name", required_on_create=True
+                'name',
+                title='Name',
+                description='Name',
+                required_on_create=True
             )
         )
         return scheme
 
     def validate_input(self, definition: smi.ValidationDefinition):
-        return
+        return validate_input(definition)
 
-    def stream_events(self, inputs: smi.InputDefinition, event_writer: smi.EventWriter):
-        # inputs.inputs is a Python dictionary object like:
-        # {
-        #   "demo_input://<input_name>": {
-        #     "account": "<account_name>",
-        #     "disabled": "0",
-        #     "host": "$decideOnStartup",
-        #     "index": "<index_name>",
-        #     "interval": "<interval_value>",
-        #     "python.version": "python3",
-        #   },
-        # }
-        for input_name, input_item in inputs.inputs.items():
-            normalized_input_name = input_name.split("/")[-1]
-            logger = logger_for_input(normalized_input_name)
-            try:
-                session_key = self._input_definition.metadata["session_key"]
-                log_level = conf_manager.get_log_level(
-                    logger=logger,
-                    session_key=session_key,
-                    app_name=ADDON_NAME,
-                    conf_name=f"{ADDON_NAME}_settings",
-                )
-                logger.setLevel(log_level)
-                log.modular_input_start(logger, normalized_input_name)
-                api_key = get_account_api_key(session_key, input_item.get("account"))
-                data = get_data_from_api(logger, api_key)
-                sourcetype = "dummy-data"
-                for line in data:
-                    event_writer.write_event(
-                        smi.Event(
-                            data=json.dumps(line, ensure_ascii=False, default=str),
-                            index=input_item.get("index"),
-                            sourcetype=sourcetype,
-                        )
-                    )
-                log.events_ingested(
-                    logger,
-                    input_name,
-                    sourcetype,
-                    len(data),
-                    input_item.get("index"),
-                    account=input_item.get("account")
-                )
-                log.modular_input_end(logger, normalized_input_name)
-            except Exception as e:
-                log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
+        return stream_events(inputs, ew)
 
 
-if __name__ == "__main__":
-    exit_code = Input().run(sys.argv)
+if __name__ == '__main__':
+    exit_code = DEMO_INPUT().run(sys.argv)
     sys.exit(exit_code)
diff --git a/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input_helper.py b/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input_helper.py
new file mode 100644
index 000000000..b158543d6
--- /dev/null
+++ b/tests/testdata/expected_addons/expected_addon_after_init/demo_addon_for_splunk/package/bin/demo_input_helper.py
@@ -0,0 +1,87 @@
+import json
+import logging
+
+import import_declare_test
+from solnlib import conf_manager, log
+from splunklib import modularinput as smi
+
+
+ADDON_NAME = "demo_addon_for_splunk"
+
+
+def logger_for_input(input_name: str) -> logging.Logger:
+    return log.Logs().get_logger(f"{ADDON_NAME.lower()}_{input_name}")
+
+
+def get_account_api_key(session_key: str, account_name: str):
+    cfm = conf_manager.ConfManager(
+        session_key,
+        ADDON_NAME,
+        realm=f"__REST_CREDENTIAL__#{ADDON_NAME}#configs/conf-demo_addon_for_splunk_account",
+    )
+    account_conf_file = cfm.get_conf("demo_addon_for_splunk_account")
+    return account_conf_file.get(account_name).get("api_key")
+
+
+def get_data_from_api(logger: logging.Logger, api_key: str):
+    logger.info("Getting data from an external API")
+    dummy_data = [
+        {
+            "line1": "hello",
+        },
+        {
+            "line2": "world",
+        },
+    ]
+    return dummy_data
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, event_writer: smi.EventWriter):
+    # inputs.inputs is a Python dictionary object like:
+    # {
+    #   "demo_input://<input_name>": {
+    #     "account": "<account_name>",
+    #     "disabled": "0",
+    #     "host": "$decideOnStartup",
+    #     "index": "<index_name>",
+    #     "interval": "<interval_value>",
+    #     "python.version": "python3",
+    #   },
+    # }
+    for input_name, input_item in inputs.inputs.items():
+        normalized_input_name = input_name.split("/")[-1]
+        logger = logger_for_input(normalized_input_name)
+        try:
+            session_key = inputs.metadata["session_key"]
+            log_level = conf_manager.get_log_level(
+                logger=logger,
+                session_key=session_key,
+                app_name=ADDON_NAME,
+                conf_name=f"{ADDON_NAME}_settings",
+            )
+            logger.setLevel(log_level)
+            log.modular_input_start(logger, normalized_input_name)
+            api_key = get_account_api_key(session_key, input_item.get("account"))
+            data = get_data_from_api(logger, api_key)
+            sourcetype = "dummy-data"
+            for line in data:
+                event_writer.write_event(
+                    smi.Event(
+                        data=json.dumps(line, ensure_ascii=False, default=str),
+                        index=input_item.get("index"),
+                        sourcetype=sourcetype,
+                    )
+                )
+            log.events_ingested(
+                logger,
+                normalized_input_name,
+                sourcetype,
+                len(data),
+            )
+            log.modular_input_end(logger, normalized_input_name)
+        except Exception as e:
+            log.log_exception(logger, e, msg_before="Exception raised while ingesting data for demo_input: ")
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_four.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_four.py
index 8ef52c1d9..652842d8f 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_four.py
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_four.py
@@ -1,12 +1,12 @@
 import import_declare_test
 
-import sys
 import json
+import sys
 
 from splunklib import modularinput as smi
 
-class EXAMPLE_INPUT_FOUR(smi.Script):
 
+class EXAMPLE_INPUT_FOUR(smi.Script):
     def __init__(self):
         super(EXAMPLE_INPUT_FOUR, self).__init__()
 
@@ -25,13 +25,12 @@ def get_scheme(self):
                 required_on_create=True
             )
         )
-        
         return scheme
 
-    def validate_input(self, definition):
+    def validate_input(self, definition: smi.ValidationDefinition):
         return
 
-    def stream_events(self, inputs, ew):
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
         input_items = [{'count': len(inputs.inputs)}]
         for input_name, input_item in inputs.inputs.items():
             input_item['name'] = input_name
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_one.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_one.py
index 64a060f1b..1ae45c5ec 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_one.py
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_one.py
@@ -1,12 +1,12 @@
 import import_declare_test
 
 import sys
-import json
 
 from splunklib import modularinput as smi
+from helper_one import stream_events, validate_input
 
-class EXAMPLE_INPUT_ONE(smi.Script):
 
+class EXAMPLE_INPUT_ONE(smi.Script):
     def __init__(self):
         super(EXAMPLE_INPUT_ONE, self).__init__()
 
@@ -25,113 +25,91 @@ def get_scheme(self):
                 required_on_create=True
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'input_one_checkbox',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'input_one_radio',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'singleSelectTest',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'multipleSelectTest',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'account',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'object',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'object_fields',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'order_by',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'use_existing_checkpoint',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'start_date',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'limit',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'example_textarea_field',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'example_help_link',
                 required_on_create=False,
             )
         )
-        
         return scheme
 
-    def validate_input(self, definition):
-        return
+    def validate_input(self, definition: smi.ValidationDefinition):
+        return validate_input(definition)
 
-    def stream_events(self, inputs, ew):
-        input_items = [{'count': len(inputs.inputs)}]
-        for input_name, input_item in inputs.inputs.items():
-            input_item['name'] = input_name
-            input_items.append(input_item)
-        event = smi.Event(
-            data=json.dumps(input_items),
-            sourcetype='example_input_one',
-        )
-        ew.write_event(event)
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
+        return stream_events(inputs, ew)
 
 
 if __name__ == '__main__':
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_three.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_three.py
index e319e172a..95bf73b84 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_three.py
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_three.py
@@ -1,12 +1,12 @@
 import import_declare_test
 
-import sys
 import json
+import sys
 
 from splunklib import modularinput as smi
 
-class EXAMPLE_INPUT_THREE(smi.Script):
 
+class EXAMPLE_INPUT_THREE(smi.Script):
     def __init__(self):
         super(EXAMPLE_INPUT_THREE, self).__init__()
 
@@ -25,13 +25,12 @@ def get_scheme(self):
                 required_on_create=True
             )
         )
-        
         return scheme
 
-    def validate_input(self, definition):
+    def validate_input(self, definition: smi.ValidationDefinition):
         return
 
-    def stream_events(self, inputs, ew):
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
         input_items = [{'count': len(inputs.inputs)}]
         for input_name, input_item in inputs.inputs.items():
             input_item['name'] = input_name
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_two.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_two.py
index 47d522bfc..0e82401cf 100644
--- a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_two.py
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/example_input_two.py
@@ -1,12 +1,12 @@
 import import_declare_test
 
 import sys
-import json
 
 from splunklib import modularinput as smi
+from helper_two import stream_events, validate_input
 
-class EXAMPLE_INPUT_TWO(smi.Script):
 
+class EXAMPLE_INPUT_TWO(smi.Script):
     def __init__(self):
         super(EXAMPLE_INPUT_TWO, self).__init__()
 
@@ -25,78 +25,61 @@ def get_scheme(self):
                 required_on_create=True
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'account',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'input_two_multiple_select',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'input_two_checkbox',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'input_two_radio',
                 required_on_create=True,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'use_existing_checkpoint',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'start_date',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'example_help_link',
                 required_on_create=False,
             )
         )
-        
         scheme.add_argument(
             smi.Argument(
                 'apis',
                 required_on_create=False,
             )
         )
-        
         return scheme
 
-    def validate_input(self, definition):
-        return
+    def validate_input(self, definition: smi.ValidationDefinition):
+        return validate_input(definition)
 
-    def stream_events(self, inputs, ew):
-        input_items = [{'count': len(inputs.inputs)}]
-        for input_name, input_item in inputs.inputs.items():
-            input_item['name'] = input_name
-            input_items.append(input_item)
-        event = smi.Event(
-            data=json.dumps(input_items),
-            sourcetype='example_input_two',
-        )
-        ew.write_event(event)
+    def stream_events(self, inputs: smi.InputDefinition, ew: smi.EventWriter):
+        return stream_events(inputs, ew)
 
 
 if __name__ == '__main__':
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_one.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_one.py
new file mode 100644
index 000000000..d9426a540
--- /dev/null
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_one.py
@@ -0,0 +1,20 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    # INPUT 1
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='example_input_one',
+    )
+    ew.write_event(event)
diff --git a/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_two.py b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_two.py
new file mode 100644
index 000000000..1891465b8
--- /dev/null
+++ b/tests/testdata/expected_addons/expected_output_global_config_everything/Splunk_TA_UCCExample/bin/helper_two.py
@@ -0,0 +1,20 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    # INPUT 2
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='example_input_two',
+    )
+    ew.write_event(event)
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 fc98c35e9..33935d372 100644
--- a/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json
+++ b/tests/testdata/test_addons/package_files_conflict_test/globalConfig.json
@@ -206,7 +206,7 @@
     "meta": {
         "name": "test_addon",
         "restRoot": "test_addon",
-        "version": "5.42.1R67372a0b",
+        "version": "5.41.0Reda406cf",
         "displayName": "This is my add-on",
         "schemaVersion": "0.0.6",
         "_uccVersion": "5.42.1"
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 c950c0a43..81089ed6d 100644
--- a/tests/testdata/test_addons/package_global_config_everything/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_everything/globalConfig.json
@@ -675,6 +675,7 @@
             "services": [
                 {
                     "name": "example_input_one",
+                    "inputHelperModule": "helper_one",
                     "warning": {
                         "create": {
                             "message": "Some warning for account text create"
@@ -960,6 +961,7 @@
                 },
                 {
                     "name": "example_input_two",
+                    "inputHelperModule": "helper_two",
                     "entity": [
                         {
                             "type": "text",
@@ -1377,7 +1379,8 @@
                     "edit",
                     "enable",
                     "delete",
-                    "clone"
+                    "clone",
+                    "search"
                 ],
                 "header": [
                     {
diff --git a/tests/testdata/test_addons/package_global_config_everything/package/bin/example_input_three_helper.py b/tests/testdata/test_addons/package_global_config_everything/package/bin/example_input_three_helper.py
new file mode 100644
index 000000000..35efccf55
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything/package/bin/example_input_three_helper.py
@@ -0,0 +1,20 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    # INPUT 3
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='example_input_three',
+    )
+    ew.write_event(event)
diff --git a/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_one.py b/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_one.py
new file mode 100644
index 000000000..d9426a540
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_one.py
@@ -0,0 +1,20 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    # INPUT 1
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='example_input_one',
+    )
+    ew.write_event(event)
diff --git a/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_two.py b/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_two.py
new file mode 100644
index 000000000..1891465b8
--- /dev/null
+++ b/tests/testdata/test_addons/package_global_config_everything/package/bin/helper_two.py
@@ -0,0 +1,20 @@
+import json
+
+from splunklib import modularinput as smi
+
+
+def validate_input(definition: smi.ValidationDefinition):
+    return
+
+
+def stream_events(inputs: smi.InputDefinition, ew: smi.EventWriter):
+    # INPUT 2
+    input_items = [{'count': len(inputs.inputs)}]
+    for input_name, input_item in inputs.inputs.items():
+        input_item['name'] = input_name
+        input_items.append(input_item)
+    event = smi.Event(
+        data=json.dumps(input_items),
+        sourcetype='example_input_two',
+    )
+    ew.write_event(event)
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
index 35273a854..cc30cb20b 100644
--- a/tests/testdata/test_addons/package_global_config_everything_uccignore/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_everything_uccignore/globalConfig.json
@@ -482,6 +482,7 @@
             "services": [
                 {
                     "name": "example_input_one",
+                    "inputHelperModule": "helper_one",
                     "warning": {
                         "create": {
                             "message": "Some warning for account text create"
@@ -767,6 +768,7 @@
                 },
                 {
                     "name": "example_input_two",
+                    "inputHelperModule": "helper_two",
                     "entity": [
                         {
                             "type": "text",
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
index 5541ab6d0..4e3cf52dd 100644
--- a/tests/testdata/test_addons/package_global_config_multi_input/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_multi_input/globalConfig.json
@@ -431,7 +431,7 @@
     "meta": {
         "name": "Splunk_TA_UCCExample",
         "restRoot": "splunk_ta_uccexample",
-        "version": "5.42.1R67372a0b",
+        "version": "5.41.0Reda406cf",
         "displayName": "Splunk UCC test Add-on",
         "schemaVersion": "0.0.6",
         "_uccVersion": "5.42.1"
diff --git a/tests/testdata/test_addons/package_global_config_only_one_tab/globalConfig.json b/tests/testdata/test_addons/package_global_config_only_one_tab/globalConfig.json
index 41894ad5d..1ffe3345b 100644
--- a/tests/testdata/test_addons/package_global_config_only_one_tab/globalConfig.json
+++ b/tests/testdata/test_addons/package_global_config_only_one_tab/globalConfig.json
@@ -36,7 +36,7 @@
     "meta": {
         "name": "Splunk_TA_UCCExample",
         "restRoot": "splunk_ta_uccexample",
-        "version": "5.42.1R67372a0b",
+        "version": "5.41.0Reda406cf",
         "displayName": "Splunk UCC test Add-on",
         "schemaVersion": "0.0.6",
         "_uccVersion": "5.42.1"
diff --git a/tests/ui/test_input_page.py b/tests/ui/test_input_page.py
index 92aa29bb6..ab55a9325 100644
--- a/tests/ui/test_input_page.py
+++ b/tests/ui/test_input_page.py
@@ -1061,7 +1061,7 @@ def test_example_input_one_add_frontend_backend_validation(
                 "interval": "90",
                 "index": "default",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
@@ -1134,7 +1134,7 @@ def test_example_input_one_edit_frontend_backend_validation(
                 "interval": "3600",
                 "index": "main",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
@@ -1213,7 +1213,7 @@ def test_example_input_one_clone_frontend_backend_validation(
                 "interval": "180",
                 "index": "default",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
@@ -1872,7 +1872,7 @@ def test_example_input_two_add_frontend_backend_validation(
                 "interval": "90",
                 "index": "main",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
@@ -1931,7 +1931,7 @@ def test_example_input_two_edit_frontend_backend_validation(
                 "interval": "3600",
                 "index": "main",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
@@ -1999,7 +1999,7 @@ def test_example_input_two_clone_frontend_backend_validation(
                 "interval": "180",
                 "index": "main",
                 "status": "Enabled",
-                "actions": "Edit | Clone | Delete",
+                "actions": "Edit | Clone | Search | Delete",
             },
         )
         value_to_test = {
diff --git a/tests/unit/commands/test_build.py b/tests/unit/commands/test_build.py
index 76615452e..d8b5553b3 100644
--- a/tests/unit/commands/test_build.py
+++ b/tests/unit/commands/test_build.py
@@ -4,6 +4,7 @@
 import pytest
 
 from splunk_add_on_ucc_framework.commands.build import (
+    _add_modular_input,
     _get_build_output_path,
     _get_python_version_from_executable,
 )
@@ -48,3 +49,62 @@ def test_get_python_version_from_executable_nonexisting_command():
 
     with pytest.raises(CouldNotIdentifyPythonVersionException):
         _get_python_version_from_executable(target_python_version)
+
+
+@patch("splunk_add_on_ucc_framework.global_config.GlobalConfig")
+def test_add_modular_input(GlobalConfig, tmp_path):
+    ta_name = "test_ta"
+    (tmp_path / ta_name / "bin").mkdir(parents=True)
+    (tmp_path / ta_name / "default").mkdir(parents=True)
+
+    gc = GlobalConfig("", False)
+    gc.inputs = [
+        {
+            "name": "example_input_three",
+            "restHandlerName": "splunk_ta_uccexample_rh_three_custom",
+            "inputHelperModule": "example_helper",
+            "entity": [
+                {
+                    "type": "text",
+                    "label": "Name",
+                    "validators": [
+                        {
+                            "type": "regex",
+                            "errorMsg": "...",
+                            "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",
+        }
+    ]
+    _add_modular_input(ta_name, gc, str(tmp_path))
+
+    input_path = tmp_path / ta_name / "bin" / "example_input_three.py"
+    helper_path = tmp_path / ta_name / "bin" / "example_helper.py"
+    assert input_path.is_file()
+    assert helper_path.is_file()
diff --git a/tests/unit/testdata/valid_config_all_alerts.json b/tests/unit/testdata/valid_config_all_alerts.json
index 706f348f7..6131b8514 100644
--- a/tests/unit/testdata/valid_config_all_alerts.json
+++ b/tests/unit/testdata/valid_config_all_alerts.json
@@ -1,7 +1,43 @@
 {
     "pages": {
         "configuration": {
-            "tabs": []
+            "tabs": [
+                {
+                    "name": "account",
+                    "table": {
+                        "actions": [
+                            "edit",
+                            "delete",
+                            "clone"
+                        ],
+                        "header": [
+                            {
+                                "label": "Name",
+                                "field": "name"
+                            }
+                        ]
+                    },
+                    "entity": [
+                        {
+                            "type": "text",
+                            "label": "Name",
+                            "validators": [
+                                {
+                                    "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
+                        }
+                    ],
+                    "title": "Account"
+                }
+            ],
+            "title": "Configuration",
+            "description": "Set up your add-on"
         }
     },
     "alerts": [
diff --git a/ui/src/components/FileInputComponent/FileInputComponent.test.tsx b/ui/src/components/FileInputComponent/FileInputComponent.test.tsx
index c48f9f505..0d36068b8 100644
--- a/ui/src/components/FileInputComponent/FileInputComponent.test.tsx
+++ b/ui/src/components/FileInputComponent/FileInputComponent.test.tsx
@@ -346,3 +346,34 @@ it('File input disabled - rendered correctly with disabled attr', () => {
     expect(fileComponent).toHaveAttribute('disabled');
     consoleSpy.mockRestore();
 });
+
+test('Check FileInputComponent encodes base64 correctly and passed it to handler', async () => {
+    const field = 'testFileField';
+    const disabled = false;
+    const controlOptions = {
+        fileSupportMessage: 'Support Message',
+        supportedFileTypes: ['json'],
+        useBase64Encoding: true,
+    };
+    const fileContent = '{"test":"test"}';
+    const handleChange = jest.fn();
+
+    const testfile = new File([fileContent], 'test.json', {
+        type: 'application/json',
+    });
+
+    render(
+        <FileInputComponent
+            field={field}
+            disabled={disabled}
+            controlOptions={controlOptions}
+            handleChange={handleChange}
+        />
+    );
+
+    const fileInput = screen.getByTestId('file-input');
+    await userEvent.upload(fileInput, testfile);
+
+    // Check that handleChange is called with valid args.
+    expect(handleChange).toHaveBeenCalledWith(field, btoa(fileContent));
+});