diff --git a/backend/internal/api/handler/dns_providers.go b/backend/internal/api/handler/dns_providers.go
index 6040b6b..0f5c8f1 100644
--- a/backend/internal/api/handler/dns_providers.go
+++ b/backend/internal/api/handler/dns_providers.go
@@ -133,8 +133,7 @@ func DeleteDNSProvider() func(http.ResponseWriter, *http.Request) {
 // Route: GET /dns-providers/acmesh
 func GetAcmeshProviders() func(http.ResponseWriter, *http.Request) {
 	return func(w http.ResponseWriter, r *http.Request) {
-		items := dnsproviders.List()
-		h.ResultResponseJSON(w, r, http.StatusOK, items)
+		h.ResultResponseJSON(w, r, http.StatusOK, dnsproviders.List())
 	}
 }
 
diff --git a/backend/internal/api/schema/create_dns_provider.go b/backend/internal/api/schema/create_dns_provider.go
index 03b2000..90dcef9 100644
--- a/backend/internal/api/schema/create_dns_provider.go
+++ b/backend/internal/api/schema/create_dns_provider.go
@@ -5,6 +5,7 @@ import (
 	"strings"
 
 	"npm/internal/dnsproviders"
+	"npm/internal/logger"
 	"npm/internal/util"
 )
 
@@ -15,7 +16,12 @@ func CreateDNSProvider() string {
 
 	allSchemasWrapped := make([]string, 0)
 	for providerName, provider := range allProviders {
-		allSchemasWrapped = append(allSchemasWrapped, createDNSProviderType(providerName, provider.Schema))
+		schema, err := provider.GetJsonSchema()
+		if err != nil {
+			logger.Error("ProviderSchemaError", fmt.Errorf("Invalid Provider Schema for %s: %v", provider.Title, err))
+		} else {
+			allSchemasWrapped = append(allSchemasWrapped, createDNSProviderType(providerName, schema))
+		}
 	}
 
 	return fmt.Sprintf(fmtStr, util.ConvertStringSliceToInterface(allSchemasWrapped)...)
diff --git a/backend/internal/dnsproviders/common.go b/backend/internal/dnsproviders/common.go
index 700924d..8c848f1 100644
--- a/backend/internal/dnsproviders/common.go
+++ b/backend/internal/dnsproviders/common.go
@@ -1,36 +1,47 @@
 package dnsproviders
 
 import (
+	"encoding/json"
 	"errors"
-	"npm/internal/util"
 )
 
+// providerField should mimick jsonschema, so that
+// the ui can render a field and validate it
+// before we do.
+// See: https://json-schema.org/draft/2020-12/json-schema-validation.html
 type providerField struct {
-	Name       string `json:"name"`
-	Type       string `json:"type"`
-	IsRequired bool   `json:"is_required"`
-	IsSecret   bool   `json:"is_secret"`
-	MetaKey    string `json:"meta_key"`
-	EnvKey     string `json:"-"` // not exposed in api
+	Title                string `json:"title"`
+	Type                 string `json:"type"`
+	AdditionalProperties bool   `json:"additionalProperties"`
+	Minimum              int    `json:"minimum,omitempty"`
+	Maximum              int    `json:"maximum,omitempty"`
+	MinLength            int    `json:"minLength,omitempty"`
+	MaxLength            int    `json:"maxLength,omitempty"`
+	Pattern              string `json:"pattern,omitempty"`
+	IsSecret             bool   `json:"isSecret"` // Not valid jsonschema
 }
 
 // Provider is a simple struct
 type Provider struct {
-	AcmeshName string          `json:"acmesh_name"`
-	Schema     string          `json:"-"`
-	Fields     []providerField `json:"fields"`
+	Title                string                   `json:"title"`
+	Type                 string                   `json:"type"` // Should always be "object"
+	AdditionalProperties bool                     `json:"additionalProperties"`
+	MinProperties        int                      `json:"minProperties,omitempty"`
+	Required             []string                 `json:"required,omitempty"`
+	Properties           map[string]providerField `json:"properties"`
 }
 
-// GetAcmeEnvVars will map the meta given to the env var required for
-// acme.sh to use this dns provider
-func (p *Provider) GetAcmeEnvVars(meta interface{}) map[string]string {
-	res := make(map[string]string)
-	for _, field := range p.Fields {
-		if acmeShEnvValue, found := util.FindItemInInterface(field.MetaKey, meta); found {
-			res[field.EnvKey] = acmeShEnvValue.(string)
-		}
-	}
-	return res
+// GetJsonSchema encodes this object as JSON string
+func (p *Provider) GetJsonSchema() (string, error) {
+	b, err := json.Marshal(p)
+	return string(b), err
+}
+
+// ConvertToUpdatable will manipulate this object so that it returns
+// an updatable json schema
+func (p *Provider) ConvertToUpdatable() {
+	p.MinProperties = 1
+	p.Required = nil
 }
 
 // List returns an array of providers
@@ -89,7 +100,7 @@ func GetAll() map[string]Provider {
 	mp := make(map[string]Provider)
 	items := List()
 	for _, item := range items {
-		mp[item.AcmeshName] = item
+		mp[item.Title] = item
 	}
 	return mp
 }
@@ -102,51 +113,3 @@ func Get(provider string) (Provider, error) {
 	}
 	return Provider{}, errors.New("provider_not_found")
 }
-
-// GetAllSchemas returns a flat array with just the schemas
-func GetAllSchemas() []string {
-	items := List()
-	mp := make([]string, 0)
-	for _, item := range items {
-		mp = append(mp, item.Schema)
-	}
-	return mp
-}
-
-const commonKeySchema = `
-{
-	"type": "object",
-	"required": [
-		"api_key"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
-// nolint: gosec
-const commonKeySecretSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_key",
-		"secret"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		},
-		"secret": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
diff --git a/backend/internal/dnsproviders/dns_acmedns.go b/backend/internal/dnsproviders/dns_acmedns.go
index af3aa60..6730240 100644
--- a/backend/internal/dnsproviders/dns_acmedns.go
+++ b/backend/internal/dnsproviders/dns_acmedns.go
@@ -1,68 +1,33 @@
 package dnsproviders
 
-const acmeDNSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_url",
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_url": {
-			"type": "string",
-			"minLength": 4
-		},
-		"subdomain": {
-			"type": "string",
-			"minLength": 1
-		},
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSAcmeDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_acmedns",
-		Schema:     acmeDNSchema,
-		Fields: []providerField{
-			{
-				Name:       "Base URL",
-				Type:       "text",
-				MetaKey:    "api_url",
-				EnvKey:     "ACMEDNS_BASE_URL",
-				IsRequired: true,
+		Title:                "dns_acmedns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"ACMEDNS_BASE_URL",
+			"ACMEDNS_SUBDOMAIN",
+			"ACMEDNS_USERNAME",
+			"ACMEDNS_PASSWORD",
+		},
+		Properties: map[string]providerField{
+			"ACMEDNS_BASE_URL": {
+				Title: "base-url",
+				Type:  "string",
 			},
-			{
-				Name:       "Subdomain",
-				Type:       "text",
-				MetaKey:    "subdomain",
-				EnvKey:     "ACMEDNS_SUBDOMAIN",
-				IsRequired: true,
+			"ACMEDNS_SUBDOMAIN": {
+				Title: "subdomain",
+				Type:  "string",
 			},
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "ACMEDNS_USERNAME",
-				IsRequired: true,
+			"ACMEDNS_USERNAME": {
+				Title: "username",
+				Type:  "string",
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "ACMEDNS_PASSWORD",
-				IsRequired: true,
-				IsSecret:   true,
+			"ACMEDNS_PASSWORD": {
+				Title:    "password",
+				Type:     "string",
+				IsSecret: true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_ad.go b/backend/internal/dnsproviders/dns_ad.go
index f3c5e58..243f23c 100644
--- a/backend/internal/dnsproviders/dns_ad.go
+++ b/backend/internal/dnsproviders/dns_ad.go
@@ -2,15 +2,17 @@ package dnsproviders
 
 func getDNSAd() Provider {
 	return Provider{
-		AcmeshName: "dns_ad",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "AD_API_KEY",
-				IsRequired: true,
+		Title:                "dns_ad",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"AD_API_KEY",
+		},
+		Properties: map[string]providerField{
+			"AD_API_KEY": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_ali.go b/backend/internal/dnsproviders/dns_ali.go
index d4906df..e338f27 100644
--- a/backend/internal/dnsproviders/dns_ali.go
+++ b/backend/internal/dnsproviders/dns_ali.go
@@ -2,23 +2,24 @@ package dnsproviders
 
 func getDNSAli() Provider {
 	return Provider{
-		AcmeshName: "dns_ali",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "Ali_Key",
-				IsRequired: true,
+		Title:                "dns_ali",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"Ali_Key",
+			"Ali_Secret",
+		},
+		Properties: map[string]providerField{
+			"Ali_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "Ali_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"Ali_Secret": {
+				Title:     "secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_autodns.go b/backend/internal/dnsproviders/dns_autodns.go
index e593b89..bb04f7c 100644
--- a/backend/internal/dnsproviders/dns_autodns.go
+++ b/backend/internal/dnsproviders/dns_autodns.go
@@ -1,57 +1,31 @@
 package dnsproviders
 
-const autoDNSSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password",
-		"context"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		},
-		"context": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSAutoDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_autodns",
-		Schema:     autoDNSSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "AUTODNS_USER",
-				IsRequired: true,
+		Title:                "dns_autodns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"AUTODNS_USER",
+			"AUTODNS_PASSWORD",
+			"AUTODNS_CONTEXT",
+		},
+		Properties: map[string]providerField{
+			"AUTODNS_USER": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "AUTODNS_PASSWORD",
-				IsRequired: true,
-				IsSecret:   true,
+			"AUTODNS_PASSWORD": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "Context",
-				Type:       "text",
-				MetaKey:    "context",
-				EnvKey:     "AUTODNS_CONTEXT",
-				IsRequired: true,
+			"AUTODNS_CONTEXT": {
+				Title:     "context",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_aws.go b/backend/internal/dnsproviders/dns_aws.go
index 88139e8..aed0694 100644
--- a/backend/internal/dnsproviders/dns_aws.go
+++ b/backend/internal/dnsproviders/dns_aws.go
@@ -1,55 +1,29 @@
 package dnsproviders
 
-const route53Schema = `
-{
-	"type": "object",
-	"required": [
-		"access_key_id",
-		"access_key"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"access_key_id": {
-			"type": "string",
-			"minLength": 10
-		},
-		"access_key": {
-			"type": "string",
-			"minLength": 10
-		},
-		"slow_rate": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSAws() Provider {
 	return Provider{
-		AcmeshName: "dns_aws",
-		Schema:     route53Schema,
-		Fields: []providerField{
-			{
-				Name:       "Access Key ID",
-				Type:       "text",
-				MetaKey:    "access_key_id",
-				EnvKey:     "AWS_ACCESS_KEY_ID",
-				IsRequired: true,
+		Title:                "dns_aws",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"AWS_ACCESS_KEY_ID",
+			"AWS_SECRET_ACCESS_KEY",
+		},
+		Properties: map[string]providerField{
+			"AWS_ACCESS_KEY_ID": {
+				Title:     "access-key-id",
+				Type:      "string",
+				MinLength: 10,
 			},
-			{
-				Name:       "Secret Access Key",
-				Type:       "password",
-				MetaKey:    "access_key",
-				EnvKey:     "AWS_SECRET_ACCESS_KEY",
-				IsRequired: true,
-				IsSecret:   true,
+			"AWS_SECRET_ACCESS_KEY": {
+				Title:     "secret-access-key",
+				Type:      "string",
+				MinLength: 10,
+				IsSecret:  true,
 			},
-			{
-				Name:    "Slow Rate",
-				Type:    "number",
-				MetaKey: "slow_rate",
-				EnvKey:  "AWS_DNS_SLOWRATE",
+			"AWS_DNS_SLOWRATE": {
+				Title: "slow-rate",
+				Type:  "integer",
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_azure.go b/backend/internal/dnsproviders/dns_azure.go
index 69c3fb9..a8c5a43 100644
--- a/backend/internal/dnsproviders/dns_azure.go
+++ b/backend/internal/dnsproviders/dns_azure.go
@@ -1,69 +1,37 @@
 package dnsproviders
 
-const azureSchema = `
-{
-	"type": "object",
-	"required": [
-		"subscription_id",
-		"tenant_id",
-		"app_id",
-		"client_secret"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"subscription_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"tenant_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"app_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"client_secret": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSAzure() Provider {
 	return Provider{
-		AcmeshName: "dns_azure",
-		Schema:     azureSchema,
-		Fields: []providerField{
-			{
-				Name:       "Subscription ID",
-				Type:       "text",
-				MetaKey:    "subscription_id",
-				EnvKey:     "AZUREDNS_SUBSCRIPTIONID",
-				IsRequired: true,
+		Title:                "dns_azure",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"AZUREDNS_SUBSCRIPTIONID",
+			"AZUREDNS_TENANTID",
+			"AZUREDNS_APPID",
+			"AZUREDNS_CLIENTSECRET",
+		},
+		Properties: map[string]providerField{
+			"AZUREDNS_SUBSCRIPTIONID": {
+				Title:     "subscription-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Tenant ID",
-				Type:       "text",
-				MetaKey:    "tenant_id",
-				EnvKey:     "AZUREDNS_TENANTID",
-				IsRequired: true,
+			"AZUREDNS_TENANTID": {
+				Title:     "tenant-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "APP ID",
-				Type:       "text",
-				MetaKey:    "app_id",
-				EnvKey:     "AZUREDNS_APPID",
-				IsRequired: true,
+			"AZUREDNS_APPID": {
+				Title:     "app-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Client Secret",
-				Type:       "password",
-				MetaKey:    "client_secret",
-				EnvKey:     "AZUREDNS_CLIENTSECRET",
-				IsRequired: true,
-				IsSecret:   true,
+			"AZUREDNS_CLIENTSECRET": {
+				Title:     "client-secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_cf.go b/backend/internal/dnsproviders/dns_cf.go
index dab2054..b35695c 100644
--- a/backend/internal/dnsproviders/dns_cf.go
+++ b/backend/internal/dnsproviders/dns_cf.go
@@ -1,79 +1,42 @@
 package dnsproviders
 
-const cloudflareSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_key",
-		"email",
-		"token",
-		"account_id"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		},
-		"email": {
-			"type": "string",
-			"minLength": 5
-		},
-		"token": {
-			"type": "string",
-			"minLength": 5
-		},
-		"account_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"zone_id": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSCf() Provider {
 	return Provider{
-		AcmeshName: "dns_cf",
-		Schema:     cloudflareSchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "CF_Key",
-				IsRequired: true,
+		Title:                "dns_cf",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"CF_Key",
+			"CF_Email",
+			"CF_Token",
+			"CF_Account_ID",
+		},
+		Properties: map[string]providerField{
+			"CF_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Email",
-				Type:       "text",
-				MetaKey:    "email",
-				EnvKey:     "CF_Email",
-				IsRequired: true,
+			"CF_Email": {
+				Title:     "email",
+				Type:      "string",
+				MinLength: 5,
 			},
-			{
-				Name:       "Token",
-				Type:       "text",
-				MetaKey:    "token",
-				EnvKey:     "CF_Token",
-				IsRequired: true,
-				IsSecret:   true,
+			"CF_Token": {
+				Title:     "token",
+				Type:      "string",
+				MinLength: 5,
+				IsSecret:  true,
 			},
-			{
-				Name:       "Account ID",
-				Type:       "text",
-				MetaKey:    "account_id",
-				EnvKey:     "CF_Account_ID",
-				IsRequired: true,
+			"CF_Account_ID": {
+				Title:     "account-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:    "Zone ID",
-				Type:    "string",
-				MetaKey: "zone_id",
-				EnvKey:  "CF_Zone_ID",
+			"CF_Zone_ID": {
+				Title:     "zone-id",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_cloudns.go b/backend/internal/dnsproviders/dns_cloudns.go
index 7848a3a..297de58 100644
--- a/backend/internal/dnsproviders/dns_cloudns.go
+++ b/backend/internal/dnsproviders/dns_cloudns.go
@@ -1,53 +1,31 @@
 package dnsproviders
 
-const clouDNSNetSchema = `
-{
-	"type": "object",
-	"required": [
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"auth_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"sub_auth_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSCloudns() Provider {
 	return Provider{
-		AcmeshName: "dns_cloudns",
-		Schema:     clouDNSNetSchema,
-		Fields: []providerField{
-			{
-				Name:    "Auth ID",
-				Type:    "text",
-				MetaKey: "auth_id",
-				EnvKey:  "CLOUDNS_AUTH_ID",
+		Title:                "dns_cloudns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"CLOUDNS_AUTH_ID",
+			"CLOUDNS_SUB_AUTH_ID",
+			"CLOUDNS_AUTH_PASSWORD",
+		},
+		Properties: map[string]providerField{
+			"CLOUDNS_AUTH_ID": {
+				Title:     "auth-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:    "Sub Auth ID",
-				Type:    "text",
-				MetaKey: "sub_auth_id",
-				EnvKey:  "CLOUDNS_SUB_AUTH_ID",
+			"CLOUDNS_SUB_AUTH_ID": {
+				Title:     "sub-auth-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "CLOUDNS_AUTH_PASSWORD",
-				IsRequired: true,
-				IsSecret:   true,
+			"CLOUDNS_AUTH_PASSWORD": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_conoha.go b/backend/internal/dnsproviders/dns_conoha.go
index d2e1b36..d84aacd 100644
--- a/backend/internal/dnsproviders/dns_conoha.go
+++ b/backend/internal/dnsproviders/dns_conoha.go
@@ -1,69 +1,37 @@
 package dnsproviders
 
-const conohaSchema = `
-{
-	"type": "object",
-	"required": [
-		"subscription_id",
-		"tenant_id",
-		"app_id",
-		"client_secret"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_url": {
-			"type": "string",
-			"minLength": 4
-		},
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"pass": {
-			"type": "string",
-			"minLength": 1
-		},
-		"tenant_id": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSConoha() Provider {
 	return Provider{
-		AcmeshName: "dns_conoha",
-		Schema:     conohaSchema,
-		Fields: []providerField{
-			{
-				Name:       "API URL",
-				Type:       "text",
-				MetaKey:    "api_url",
-				EnvKey:     "CONOHA_IdentityServiceApi",
-				IsRequired: true,
+		Title:                "dns_conoha",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"CONOHA_IdentityServiceApi",
+			"CONOHA_Username",
+			"CONOHA_Password",
+			"CONOHA_TenantId",
+		},
+		Properties: map[string]providerField{
+			"CONOHA_IdentityServiceApi": {
+				Title:     "api-url",
+				Type:      "string",
+				MinLength: 4,
 			},
-			{
-				Name:       "Username",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "CONOHA_Username",
-				IsRequired: true,
+			"CONOHA_Username": {
+				Title:     "username",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "CONOHA_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"CONOHA_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "Tenant ID",
-				Type:       "text",
-				MetaKey:    "tenant_id",
-				EnvKey:     "CONOHA_TenantId",
-				IsRequired: true,
+			"CONOHA_TenantId": {
+				Title:     "tenant-id",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_cx.go b/backend/internal/dnsproviders/dns_cx.go
index 39d2325..2750124 100644
--- a/backend/internal/dnsproviders/dns_cx.go
+++ b/backend/internal/dnsproviders/dns_cx.go
@@ -2,23 +2,22 @@ package dnsproviders
 
 func getDNSCx() Provider {
 	return Provider{
-		AcmeshName: "dns_cx",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "CX_Key",
-				IsRequired: true,
+		Title:                "dns_cx",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"CX_Key",
+			"CX_Secret",
+		},
+		Properties: map[string]providerField{
+			"CX_Key": {
+				Title: "key",
+				Type:  "string",
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "CX_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"CX_Secret": {
+				Title:    "secret",
+				Type:     "string",
+				IsSecret: true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_cyon.go b/backend/internal/dnsproviders/dns_cyon.go
index cacd25d..87a5ab3 100644
--- a/backend/internal/dnsproviders/dns_cyon.go
+++ b/backend/internal/dnsproviders/dns_cyon.go
@@ -1,56 +1,32 @@
 package dnsproviders
 
-const cyonChSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		},
-		"otp_secret": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSCyon() Provider {
 	return Provider{
-		AcmeshName: "dns_cyon",
-		Schema:     cyonChSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "CY_Username",
-				IsRequired: true,
+		Title:                "dns_cyon",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"CY_Username",
+			"CY_Password",
+			"CY_OTP_Secret",
+		},
+		Properties: map[string]providerField{
+			"CY_Username": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "CY_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"CY_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:     "OTP Secret",
-				Type:     "password",
-				MetaKey:  "otp_secret",
-				EnvKey:   "CY_OTP_Secret",
-				IsSecret: true,
+			"CY_OTP_Secret": {
+				Title:     "otp-secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_da.go b/backend/internal/dnsproviders/dns_da.go
index 7133a0e..ee9e0f6 100644
--- a/backend/internal/dnsproviders/dns_da.go
+++ b/backend/internal/dnsproviders/dns_da.go
@@ -1,41 +1,22 @@
 package dnsproviders
 
-const daSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_url"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_url": {
-			"type": "string",
-			"minLength": 4
-		},
-		"insecure": {
-			"type": "boolean"
-		}
-	}
-}
-`
-
 func getDNSDa() Provider {
 	return Provider{
-		AcmeshName: "dns_da",
-		Schema:     daSchema,
-		Fields: []providerField{
-			{
-				Name:       "API URL",
-				Type:       "text",
-				MetaKey:    "api_url",
-				EnvKey:     "DA_Api",
-				IsRequired: true,
+		Title:                "dns_da",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DA_Api",
+		},
+		Properties: map[string]providerField{
+			"DA_Api": {
+				Title:     "api-url",
+				Type:      "string",
+				MinLength: 4,
 			},
-			{
-				Name:    "Insecure",
-				Type:    "bool",
-				MetaKey: "insecure",
-				EnvKey:  "DA_Api_Insecure",
+			"DA_Api_Insecure": {
+				Title: "insecure",
+				Type:  "boolean",
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dgon.go b/backend/internal/dnsproviders/dns_dgon.go
index 0d8aaa1..91113cc 100644
--- a/backend/internal/dnsproviders/dns_dgon.go
+++ b/backend/internal/dnsproviders/dns_dgon.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSDgon() Provider {
 	return Provider{
-		AcmeshName: "dns_dgon",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "DO_API_KEY",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_dgon",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DO_API_KEY",
+		},
+		Properties: map[string]providerField{
+			"DO_API_KEY": {
+				Title:    "api-key",
+				Type:     "string",
+				IsSecret: true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dnsimple.go b/backend/internal/dnsproviders/dns_dnsimple.go
index 7fb7e98..a4a02ae 100644
--- a/backend/internal/dnsproviders/dns_dnsimple.go
+++ b/backend/internal/dnsproviders/dns_dnsimple.go
@@ -2,16 +2,18 @@ package dnsproviders
 
 func getDNSDNSimple() Provider {
 	return Provider{
-		AcmeshName: "dns_dnsimple",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "OAuth Token",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "DNSimple_OAUTH_TOKEN",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_dnsimple",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DNSimple_OAUTH_TOKEN",
+		},
+		Properties: map[string]providerField{
+			"DNSimple_OAUTH_TOKEN": {
+				Title:     "oauth-token",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dp.go b/backend/internal/dnsproviders/dns_dp.go
index 0c0579f..cece1a0 100644
--- a/backend/internal/dnsproviders/dns_dp.go
+++ b/backend/internal/dnsproviders/dns_dp.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const dnsPodCnSchema = `
-{
-	"type": "object",
-	"required": [
-		"id",
-		"api_key"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSDp() Provider {
 	return Provider{
-		AcmeshName: "dns_dp",
-		Schema:     dnsPodCnSchema,
-		Fields: []providerField{
-			{
-				Name:       "ID",
-				Type:       "text",
-				MetaKey:    "id",
-				EnvKey:     "DP_Id",
-				IsRequired: true,
+		Title:                "dns_dp",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DP_Id",
+			"DP_Key",
+		},
+		Properties: map[string]providerField{
+			"DP_Id": {
+				Title:     "id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "DP_Key",
-				IsRequired: true,
-				IsSecret:   true,
+			"DP_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dpi.go b/backend/internal/dnsproviders/dns_dpi.go
index 5dce7dc..0b5255c 100644
--- a/backend/internal/dnsproviders/dns_dpi.go
+++ b/backend/internal/dnsproviders/dns_dpi.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const dnsPodComSchema = `
-{
-	"type": "object",
-	"required": [
-		"id",
-		"api_key"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSDpi() Provider {
 	return Provider{
-		AcmeshName: "dns_dpi",
-		Schema:     dnsPodComSchema,
-		Fields: []providerField{
-			{
-				Name:       "ID",
-				Type:       "text",
-				MetaKey:    "id",
-				EnvKey:     "DPI_Id",
-				IsRequired: true,
+		Title:                "dns_dpi",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DPI_Id",
+			"DPI_Key",
+		},
+		Properties: map[string]providerField{
+			"DPI_Id": {
+				Title:     "id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "DPI_Key",
-				IsRequired: true,
-				IsSecret:   true,
+			"DPI_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dreamhost.go b/backend/internal/dnsproviders/dns_dreamhost.go
index 95ebc79..037c5f8 100644
--- a/backend/internal/dnsproviders/dns_dreamhost.go
+++ b/backend/internal/dnsproviders/dns_dreamhost.go
@@ -2,16 +2,18 @@ package dnsproviders
 
 func getDNSDreamhost() Provider {
 	return Provider{
-		AcmeshName: "dns_dreamhost",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "DH_API_KEY",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_dreamhost",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DH_API_KEY",
+		},
+		Properties: map[string]providerField{
+			"DH_API_KEY": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_duckdns.go b/backend/internal/dnsproviders/dns_duckdns.go
index f88e3cb..3407ca0 100644
--- a/backend/internal/dnsproviders/dns_duckdns.go
+++ b/backend/internal/dnsproviders/dns_duckdns.go
@@ -2,16 +2,18 @@ package dnsproviders
 
 func getDNSDuckDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_duckdns",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "Token",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "DuckDNS_Token",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_duckdns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DuckDNS_Token",
+		},
+		Properties: map[string]providerField{
+			"DuckDNS_Token": {
+				Title:     "token",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dyn.go b/backend/internal/dnsproviders/dns_dyn.go
index a3b75fe..be595ce 100644
--- a/backend/internal/dnsproviders/dns_dyn.go
+++ b/backend/internal/dnsproviders/dns_dyn.go
@@ -1,57 +1,31 @@
 package dnsproviders
 
-const dynSchema = `
-{
-	"type": "object",
-	"required": [
-		"customer",
-		"username",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"customer": {
-			"type": "string",
-			"minLength": 1
-		},
-		"username": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSDyn() Provider {
 	return Provider{
-		AcmeshName: "dns_dyn",
-		Schema:     dynSchema,
-		Fields: []providerField{
-			{
-				Name:       "Customer",
-				Type:       "text",
-				MetaKey:    "customer",
-				EnvKey:     "DYN_Customer",
-				IsRequired: true,
+		Title:                "dns_dyn",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"DYN_Customer",
+			"DYN_Username",
+			"DYN_Password",
+		},
+		Properties: map[string]providerField{
+			"DYN_Customer": {
+				Title:     "customer",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Username",
-				Type:       "text",
-				MetaKey:    "username",
-				EnvKey:     "DYN_Username",
-				IsRequired: true,
+			"DYN_Username": {
+				Title:     "username",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "DYN_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"DYN_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_dynu.go b/backend/internal/dnsproviders/dns_dynu.go
index 468b7f8..1f3024c 100644
--- a/backend/internal/dnsproviders/dns_dynu.go
+++ b/backend/internal/dnsproviders/dns_dynu.go
@@ -2,23 +2,23 @@ package dnsproviders
 
 func getDNSDynu() Provider {
 	return Provider{
-		AcmeshName: "dns_dynu",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Client ID",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "Dynu_ClientId",
-				IsRequired: true,
+		Title:                "dns_dynu",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"Dynu_ClientId",
+		},
+		Properties: map[string]providerField{
+			"Dynu_ClientId": {
+				Title:     "client-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "Dynu_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"Dynu_Secret": {
+				Title:     "secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_euserv.go b/backend/internal/dnsproviders/dns_euserv.go
index adf496f..be50048 100644
--- a/backend/internal/dnsproviders/dns_euserv.go
+++ b/backend/internal/dnsproviders/dns_euserv.go
@@ -1,49 +1,25 @@
 package dnsproviders
 
-const euservSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		},
-		"otp_secret": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSEuserv() Provider {
 	return Provider{
-		AcmeshName: "dns_euserv",
-		Schema:     euservSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "EUSERV_Username",
-				IsRequired: true,
+		Title:                "dns_euserv",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"EUSERV_Username",
+			"EUSERV_Password",
+		},
+		Properties: map[string]providerField{
+			"EUSERV_Username": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "EUSERV_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"EUSERV_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_freedns.go b/backend/internal/dnsproviders/dns_freedns.go
index 3c56069..7c6849b 100644
--- a/backend/internal/dnsproviders/dns_freedns.go
+++ b/backend/internal/dnsproviders/dns_freedns.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const freeDNSSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSFreeDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_freedns",
-		Schema:     freeDNSSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "FREEDNS_User",
-				IsRequired: true,
+		Title:                "dns_freedns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"FREEDNS_User",
+			"FREEDNS_Password",
+		},
+		Properties: map[string]providerField{
+			"FREEDNS_User": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "FREEDNS_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"FREEDNS_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_gandi_livedns.go b/backend/internal/dnsproviders/dns_gandi_livedns.go
index 214b061..a22ebbf 100644
--- a/backend/internal/dnsproviders/dns_gandi_livedns.go
+++ b/backend/internal/dnsproviders/dns_gandi_livedns.go
@@ -2,15 +2,17 @@ package dnsproviders
 
 func getDNSGandiLiveDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_gandi_livedns",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "GANDI_LIVEDNS_KEY",
-				IsRequired: true,
+		Title:                "dns_gandi_livedns",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"GANDI_LIVEDNS_KEY",
+		},
+		Properties: map[string]providerField{
+			"GANDI_LIVEDNS_KEY": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_gd.go b/backend/internal/dnsproviders/dns_gd.go
index 0429c73..1124894 100644
--- a/backend/internal/dnsproviders/dns_gd.go
+++ b/backend/internal/dnsproviders/dns_gd.go
@@ -2,23 +2,24 @@ package dnsproviders
 
 func getDNSGd() Provider {
 	return Provider{
-		AcmeshName: "dns_gd",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "GD_Key",
-				IsRequired: true,
+		Title:                "dns_gd",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"GD_Key",
+			"GD_Secret",
+		},
+		Properties: map[string]providerField{
+			"GD_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "GD_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"GD_Secret": {
+				Title:     "secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_he.go b/backend/internal/dnsproviders/dns_he.go
index dc6911e..f4aed32 100644
--- a/backend/internal/dnsproviders/dns_he.go
+++ b/backend/internal/dnsproviders/dns_he.go
@@ -1,46 +1,25 @@
 package dnsproviders
 
-// nolint: gosec
-const commonUserPassSchema = `
-{
-	"type": "object",
-	"required": [
-		"username",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"username": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSHe() Provider {
 	return Provider{
-		AcmeshName: "dns_he",
-		Schema:     commonUserPassSchema,
-		Fields: []providerField{
-			{
-				Name:       "Username",
-				Type:       "text",
-				MetaKey:    "username",
-				EnvKey:     "HE_Username",
-				IsRequired: true,
+		Title:                "dns_he",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"HE_Username",
+			"HE_Password",
+		},
+		Properties: map[string]providerField{
+			"HE_Username": {
+				Title:     "username",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "HE_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"HE_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_infoblox.go b/backend/internal/dnsproviders/dns_infoblox.go
index 97368ca..f356f36 100644
--- a/backend/internal/dnsproviders/dns_infoblox.go
+++ b/backend/internal/dnsproviders/dns_infoblox.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const infobloxSchema = `
-{
-	"type": "object",
-	"required": [
-		"credentials",
-		"server"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"credentials": {
-			"type": "string",
-			"minLength": 1
-		},
-		"server": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSInfoblox() Provider {
 	return Provider{
-		AcmeshName: "dns_infoblox",
-		Schema:     infobloxSchema,
-		Fields: []providerField{
-			{
-				Name:       "Credentials",
-				Type:       "text",
-				MetaKey:    "credentials",
-				EnvKey:     "Infoblox_Creds",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_infoblox",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"Infoblox_Creds",
+			"Infoblox_Server",
+		},
+		Properties: map[string]providerField{
+			"Infoblox_Creds": {
+				Title:     "credentials",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "Server",
-				Type:       "text",
-				MetaKey:    "server",
-				EnvKey:     "Infoblox_Server",
-				IsRequired: true,
+			"Infoblox_Server": {
+				Title:     "server",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_inwx.go b/backend/internal/dnsproviders/dns_inwx.go
index 1142f59..c0f75cc 100644
--- a/backend/internal/dnsproviders/dns_inwx.go
+++ b/backend/internal/dnsproviders/dns_inwx.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const inwxSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSInwx() Provider {
 	return Provider{
-		AcmeshName: "dns_inwx",
-		Schema:     inwxSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "INWX_User",
-				IsRequired: true,
+		Title:                "dns_inwx",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"INWX_User",
+			"INWX_Password",
+		},
+		Properties: map[string]providerField{
+			"INWX_User": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "INWX_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"INWX_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_ispconfig.go b/backend/internal/dnsproviders/dns_ispconfig.go
index 00c1dd1..f10e0f7 100644
--- a/backend/internal/dnsproviders/dns_ispconfig.go
+++ b/backend/internal/dnsproviders/dns_ispconfig.go
@@ -1,66 +1,35 @@
 package dnsproviders
 
-const ispConfigSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password",
-		"api_url"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		},
-		"api_url": {
-			"type": "string",
-			"minLength": 1
-		},
-		"insecure": {
-			"type": "string"
-		}
-	}
-}
-`
-
 func getDNSIspconfig() Provider {
 	return Provider{
-		AcmeshName: "dns_ispconfig",
-		Schema:     ispConfigSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "ISPC_User",
-				IsRequired: true,
+		Title:                "dns_ispconfig",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"ISPC_User",
+			"ISPC_Password",
+			"ISPC_Api",
+		},
+		Properties: map[string]providerField{
+			"ISPC_User": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "ISPC_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"ISPC_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "API URL",
-				Type:       "text",
-				MetaKey:    "api_url",
-				EnvKey:     "ISPC_Api",
-				IsRequired: true,
+			"ISPC_Api": {
+				Title:     "api-url",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:    "Insecure",
-				Type:    "bool",
-				MetaKey: "insecure",
-				EnvKey:  "ISPC_Api_Insecure",
+			"ISPC_Api_Insecure": {
+				Title: "insecure",
+				Type:  "boolean",
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_kinghost.go b/backend/internal/dnsproviders/dns_kinghost.go
index 8e3dbcb..a497acc 100644
--- a/backend/internal/dnsproviders/dns_kinghost.go
+++ b/backend/internal/dnsproviders/dns_kinghost.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const kinghostSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSKinghost() Provider {
 	return Provider{
-		AcmeshName: "dns_kinghost",
-		Schema:     kinghostSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "KINGHOST_Username",
-				IsRequired: true,
+		Title:                "dns_kinghost",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"KINGHOST_Username",
+			"KINGHOST_Password",
+		},
+		Properties: map[string]providerField{
+			"KINGHOST_Username": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "KINGHOST_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"KINGHOST_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_linode_v4.go b/backend/internal/dnsproviders/dns_linode_v4.go
index b79ff53..ddafeca 100644
--- a/backend/internal/dnsproviders/dns_linode_v4.go
+++ b/backend/internal/dnsproviders/dns_linode_v4.go
@@ -4,16 +4,18 @@ package dnsproviders
 // needs 15 minute sleep, not currently implemented
 func getDNSLinodeV4() Provider {
 	return Provider{
-		AcmeshName: "dns_linode_v4",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "LINODE_V4_API_KEY",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_linode_v4",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"LINODE_V4_API_KEY",
+		},
+		Properties: map[string]providerField{
+			"LINODE_V4_API_KEY": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_loopia.go b/backend/internal/dnsproviders/dns_loopia.go
index 1708192..64d22d3 100644
--- a/backend/internal/dnsproviders/dns_loopia.go
+++ b/backend/internal/dnsproviders/dns_loopia.go
@@ -1,57 +1,31 @@
 package dnsproviders
 
-const loopiaSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_url",
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_url": {
-			"type": "string",
-			"minLength": 4
-		},
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSLoopia() Provider {
 	return Provider{
-		AcmeshName: "dns_loopia",
-		Schema:     loopiaSchema,
-		Fields: []providerField{
-			{
-				Name:       "API URL",
-				Type:       "text",
-				MetaKey:    "api_url",
-				EnvKey:     "LOOPIA_Api",
-				IsRequired: true,
+		Title:                "dns_loopia",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"LOOPIA_Api",
+			"LOOPIA_User",
+			"LOOPIA_Password",
+		},
+		Properties: map[string]providerField{
+			"LOOPIA_Api": {
+				Title:     "api-url",
+				Type:      "string",
+				MinLength: 4,
 			},
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "LOOPIA_User",
-				IsRequired: true,
+			"LOOPIA_User": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "LOOPIA_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"LOOPIA_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_lua.go b/backend/internal/dnsproviders/dns_lua.go
index 6c24a45..b79a87a 100644
--- a/backend/internal/dnsproviders/dns_lua.go
+++ b/backend/internal/dnsproviders/dns_lua.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const luaDNSSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_key",
-		"email"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		},
-		"email": {
-			"type": "string",
-			"minLength": 5
-		}
-	}
-}
-`
-
 func getDNSLua() Provider {
 	return Provider{
-		AcmeshName: "dns_lua",
-		Schema:     luaDNSSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "LUA_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_lua",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"LUA_Key",
+			"LUA_Email",
+		},
+		Properties: map[string]providerField{
+			"LUA_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "Email",
-				Type:       "text",
-				MetaKey:    "email",
-				EnvKey:     "LUA_Email",
-				IsRequired: true,
+			"LUA_Email": {
+				Title:     "email",
+				Type:      "string",
+				MinLength: 5,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_me.go b/backend/internal/dnsproviders/dns_me.go
index bf888ca..96b3d4a 100644
--- a/backend/internal/dnsproviders/dns_me.go
+++ b/backend/internal/dnsproviders/dns_me.go
@@ -2,23 +2,24 @@ package dnsproviders
 
 func getDNSMe() Provider {
 	return Provider{
-		AcmeshName: "dns_me",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "ME_Key",
-				IsRequired: true,
+		Title:                "dns_me",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"ME_Key",
+			"ME_Secret",
+		},
+		Properties: map[string]providerField{
+			"ME_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "ME_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"ME_Secret": {
+				Title:     "secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_namecom.go b/backend/internal/dnsproviders/dns_namecom.go
index 5d040d9..9a72de6 100644
--- a/backend/internal/dnsproviders/dns_namecom.go
+++ b/backend/internal/dnsproviders/dns_namecom.go
@@ -1,45 +1,25 @@
 package dnsproviders
 
-const nameComSchema = `
-{
-	"type": "object",
-	"required": [
-		"username",
-		"token"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"username": {
-			"type": "string",
-			"minLength": 1
-		},
-		"token": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSNamecom() Provider {
 	return Provider{
-		AcmeshName: "dns_namecom",
-		Schema:     nameComSchema,
-		Fields: []providerField{
-			{
-				Name:       "Username",
-				Type:       "text",
-				MetaKey:    "username",
-				EnvKey:     "Namecom_Username",
-				IsRequired: true,
+		Title:                "dns_namecom",
+		Type:                 "object",
+		AdditionalProperties: false,
+		Required: []string{
+			"Namecom_Username",
+			"Namecom_Token",
+		},
+		Properties: map[string]providerField{
+			"Namecom_Username": {
+				Title:     "username",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Token",
-				Type:       "text",
-				MetaKey:    "token",
-				EnvKey:     "Namecom_Token",
-				IsRequired: true,
-				IsSecret:   true,
+			"Namecom_Token": {
+				Title:     "token",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_namesilo.go b/backend/internal/dnsproviders/dns_namesilo.go
index 72ff6c2..b3b961d 100644
--- a/backend/internal/dnsproviders/dns_namesilo.go
+++ b/backend/internal/dnsproviders/dns_namesilo.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSNamesilo() Provider {
 	return Provider{
-		AcmeshName: "dns_namesilo",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "Namesilo_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_namesilo",
+		AdditionalProperties: false,
+		Required: []string{
+			"Namesilo_Key",
+		},
+		Properties: map[string]providerField{
+			"Namesilo_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_nsone.go b/backend/internal/dnsproviders/dns_nsone.go
index b02a178..7372567 100644
--- a/backend/internal/dnsproviders/dns_nsone.go
+++ b/backend/internal/dnsproviders/dns_nsone.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSOne() Provider {
 	return Provider{
-		AcmeshName: "dns_nsone",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "NS1_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_nsone",
+		AdditionalProperties: false,
+		Required: []string{
+			"NS1_Key",
+		},
+		Properties: map[string]providerField{
+			"NS1_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_pdns.go b/backend/internal/dnsproviders/dns_pdns.go
index 35db50e..21d1c7d 100644
--- a/backend/internal/dnsproviders/dns_pdns.go
+++ b/backend/internal/dnsproviders/dns_pdns.go
@@ -1,68 +1,35 @@
 package dnsproviders
 
-const powerDNSSchema = `
-{
-	"type": "object",
-	"required": [
-		"url",
-		"server_id",
-		"token",
-		"ttl"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"url": {
-			"type": "string",
-			"minLength": 1
-		},
-		"server_id": {
-			"type": "string",
-			"minLength": 1
-		},
-		"token": {
-			"type": "string",
-			"minLength": 1
-		},
-		"ttl": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSPDNS() Provider {
 	return Provider{
-		AcmeshName: "dns_pdns",
-		Schema:     powerDNSSchema,
-		Fields: []providerField{
-			{
-				Name:       "URL",
-				Type:       "text",
-				MetaKey:    "url",
-				EnvKey:     "PDNS_Url",
-				IsRequired: true,
+		Title:                "dns_pdns",
+		AdditionalProperties: false,
+		Required: []string{
+			"PDNS_Url",
+			"PDNS_ServerId",
+			"PDNS_Token",
+			"PDNS_Ttl",
+		},
+		Properties: map[string]providerField{
+			"PDNS_Url": {
+				Title:     "url",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Server ID",
-				Type:       "text",
-				MetaKey:    "server_id",
-				EnvKey:     "PDNS_ServerId",
-				IsRequired: true,
+			"PDNS_ServerId": {
+				Title:     "server-id",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Token",
-				Type:       "text",
-				MetaKey:    "token",
-				EnvKey:     "PDNS_Token",
-				IsRequired: true,
+			"PDNS_Token": {
+				Title:     "token",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "TTL",
-				Type:       "number",
-				MetaKey:    "ttl",
-				EnvKey:     "PDNS_Ttl",
-				IsRequired: true,
+			"PDNS_Ttl": {
+				Title:   "ttl",
+				Type:    "integer",
+				Minimum: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_selectel.go b/backend/internal/dnsproviders/dns_selectel.go
index de0328c..0ad79d7 100644
--- a/backend/internal/dnsproviders/dns_selectel.go
+++ b/backend/internal/dnsproviders/dns_selectel.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSSelectel() Provider {
 	return Provider{
-		AcmeshName: "dns_selectel",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "SL_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_selectel",
+		AdditionalProperties: false,
+		Required: []string{
+			"SL_Key",
+		},
+		Properties: map[string]providerField{
+			"SL_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_servercow.go b/backend/internal/dnsproviders/dns_servercow.go
index 9b93711..cb2c0ba 100644
--- a/backend/internal/dnsproviders/dns_servercow.go
+++ b/backend/internal/dnsproviders/dns_servercow.go
@@ -1,45 +1,24 @@
 package dnsproviders
 
-const servercowSchema = `
-{
-	"type": "object",
-	"required": [
-		"user",
-		"password"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"user": {
-			"type": "string",
-			"minLength": 1
-		},
-		"password": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSServercow() Provider {
 	return Provider{
-		AcmeshName: "dns_servercow",
-		Schema:     servercowSchema,
-		Fields: []providerField{
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "SERVERCOW_API_Username",
-				IsRequired: true,
+		Title:                "dns_servercow",
+		AdditionalProperties: false,
+		Required: []string{
+			"SERVERCOW_API_Username",
+			"SERVERCOW_API_Password",
+		},
+		Properties: map[string]providerField{
+			"SERVERCOW_API_Username": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Password",
-				Type:       "password",
-				MetaKey:    "password",
-				EnvKey:     "SERVERCOW_API_Password",
-				IsRequired: true,
-				IsSecret:   true,
+			"SERVERCOW_API_Password": {
+				Title:     "password",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_tele3.go b/backend/internal/dnsproviders/dns_tele3.go
index 68896a9..9ebb15b 100644
--- a/backend/internal/dnsproviders/dns_tele3.go
+++ b/backend/internal/dnsproviders/dns_tele3.go
@@ -2,23 +2,23 @@ package dnsproviders
 
 func getDNSTele3() Provider {
 	return Provider{
-		AcmeshName: "dns_tele3",
-		Schema:     commonKeySecretSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "TELE3_Key",
-				IsRequired: true,
+		Title:                "dns_tele3",
+		AdditionalProperties: false,
+		Required: []string{
+			"TELE3_Key",
+			"TELE3_Secret",
+		},
+		Properties: map[string]providerField{
+			"TELE3_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
 			},
-			{
-				Name:       "Secret",
-				Type:       "password",
-				MetaKey:    "secret",
-				EnvKey:     "TELE3_Secret",
-				IsRequired: true,
-				IsSecret:   true,
+			"TELE3_Secret": {
+				Title:     "secret",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_unoeuro.go b/backend/internal/dnsproviders/dns_unoeuro.go
index 8524a89..59a3ece 100644
--- a/backend/internal/dnsproviders/dns_unoeuro.go
+++ b/backend/internal/dnsproviders/dns_unoeuro.go
@@ -1,46 +1,25 @@
 package dnsproviders
 
-const unoEuroSchema = `
-{
-	"type": "object",
-	"required": [
-		"api_key",
-		"user"
-	],
-	"additionalProperties": false,
-	"properties": {
-		"api_key": {
-			"type": "string",
-			"minLength": 1
-		},
-		"user": {
-			"type": "string",
-			"minLength": 1
-		}
-	}
-}
-`
-
 func getDNSUnoeuro() Provider {
 	return Provider{
-		AcmeshName: "dns_unoeuro",
-		Schema:     unoEuroSchema,
-		Fields: []providerField{
-			{
-				Name:       "Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "UNO_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_unoeuro",
+		AdditionalProperties: false,
+		Required: []string{
+			"UNO_Key",
+			"UNO_User",
+		},
+		Properties: map[string]providerField{
+			"UNO_Key": {
+				Title:     "key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
-			{
-				Name:       "User",
-				Type:       "text",
-				MetaKey:    "user",
-				EnvKey:     "UNO_User",
-				IsRequired: true,
-				IsSecret:   true,
+			"UNO_User": {
+				Title:     "user",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_vscale.go b/backend/internal/dnsproviders/dns_vscale.go
index 59463cf..ccf5632 100644
--- a/backend/internal/dnsproviders/dns_vscale.go
+++ b/backend/internal/dnsproviders/dns_vscale.go
@@ -2,15 +2,16 @@ package dnsproviders
 
 func getDNSVscale() Provider {
 	return Provider{
-		AcmeshName: "dns_vscale",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "VSCALE_API_KEY",
-				IsRequired: true,
+		Title:                "dns_vscale",
+		AdditionalProperties: false,
+		Required: []string{
+			"VSCALE_API_KEY",
+		},
+		Properties: map[string]providerField{
+			"VSCALE_API_KEY": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_yandex.go b/backend/internal/dnsproviders/dns_yandex.go
index 7812069..8ee7b1d 100644
--- a/backend/internal/dnsproviders/dns_yandex.go
+++ b/backend/internal/dnsproviders/dns_yandex.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSYandex() Provider {
 	return Provider{
-		AcmeshName: "dns_yandex",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "Token",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "PDD_Token",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_yandex",
+		AdditionalProperties: false,
+		Required: []string{
+			"PDD_Token",
+		},
+		Properties: map[string]providerField{
+			"PDD_Token": {
+				Title:     "token",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_zilore.go b/backend/internal/dnsproviders/dns_zilore.go
index 687a042..e7ade44 100644
--- a/backend/internal/dnsproviders/dns_zilore.go
+++ b/backend/internal/dnsproviders/dns_zilore.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSDNZilore() Provider {
 	return Provider{
-		AcmeshName: "dns_zilore",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "text",
-				MetaKey:    "api_key",
-				EnvKey:     "Zilore_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_zilore",
+		AdditionalProperties: false,
+		Required: []string{
+			"Zilore_Key",
+		},
+		Properties: map[string]providerField{
+			"Zilore_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/dnsproviders/dns_zonomi.go b/backend/internal/dnsproviders/dns_zonomi.go
index 052e173..7f38a15 100644
--- a/backend/internal/dnsproviders/dns_zonomi.go
+++ b/backend/internal/dnsproviders/dns_zonomi.go
@@ -2,16 +2,17 @@ package dnsproviders
 
 func getDNSZonomi() Provider {
 	return Provider{
-		AcmeshName: "dns_zonomi",
-		Schema:     commonKeySchema,
-		Fields: []providerField{
-			{
-				Name:       "API Key",
-				Type:       "password",
-				MetaKey:    "api_key",
-				EnvKey:     "ZM_Key",
-				IsRequired: true,
-				IsSecret:   true,
+		Title:                "dns_zonomi",
+		AdditionalProperties: false,
+		Required: []string{
+			"ZM_Key",
+		},
+		Properties: map[string]providerField{
+			"ZM_Key": {
+				Title:     "api-key",
+				Type:      "string",
+				MinLength: 1,
+				IsSecret:  true,
 			},
 		},
 	}
diff --git a/backend/internal/entity/dnsprovider/model.go b/backend/internal/entity/dnsprovider/model.go
index 34253be..0514c26 100644
--- a/backend/internal/entity/dnsprovider/model.go
+++ b/backend/internal/entity/dnsprovider/model.go
@@ -87,15 +87,24 @@ func (m *Model) GetAcmeShEnvVars() ([]string, error) {
 		return nil, err
 	}
 
-	envs := make([]string, 0)
-
-	// Then, using the meta, convert to env vars
-	envPairs := acmeDNSProvider.GetAcmeEnvVars(m.Meta.Decoded)
-	logger.Debug("meta: %+v", m.Meta)
-	logger.Debug("envPairs: %+v", envPairs)
-	for envName, envValue := range envPairs {
-		envs = append(envs, fmt.Sprintf(`%s=%v`, envName, envValue))
-	}
-
+	// Convert the meta interface to envs slice for use by acme.sh
+	envs := getEnvsFromMeta(m.Meta.Decoded)
 	return envs, nil
 }
+
+func getEnvsFromMeta(meta interface{}) []string {
+	if rec, ok := meta.(map[string]interface{}); ok {
+		envs := make([]string, 0)
+		for key, val := range rec {
+			if f, ok := val.(string); ok {
+				envs = append(envs, fmt.Sprintf(`%s=%v`, key, f))
+			} else if f, ok := val.(int); ok {
+				envs = append(envs, fmt.Sprintf(`%s=%d`, key, f))
+			}
+		}
+		return envs
+	} else {
+		logger.Debug("getEnvsFromMeta: meta is not an map of strings")
+		return nil
+	}
+}
diff --git a/frontend/package.json b/frontend/package.json
index f888dc7..a444b4d 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -3,9 +3,9 @@
 	"version": "3.0.0",
 	"private": true,
 	"dependencies": {
-		"@chakra-ui/react": "^2.2.4",
-		"@emotion/react": "^11",
-		"@emotion/styled": "^11.9.3",
+		"@chakra-ui/react": "^2.4.7",
+		"@emotion/react": "^11.10.5",
+		"@emotion/styled": "^11.10.5",
 		"@testing-library/jest-dom": "5.16.4",
 		"@testing-library/react": "13.3.0",
 		"@types/humps": "^2.0.2",
@@ -34,7 +34,7 @@
 		"eslint-plugin-react": "^7.30.1",
 		"eslint-plugin-react-hooks": "^4.6.0",
 		"formik": "^2.2.9",
-		"framer-motion": "^6",
+		"framer-motion": "^8.4.2",
 		"humps": "^2.0.1",
 		"jest-date-mock": "1.0.8",
 		"jest-fetch-mock": "3.0.3",
@@ -59,7 +59,7 @@
 		"react-table": "7.8.0",
 		"rooks": "5.11.8",
 		"tmp": "^0.2.1",
-		"typescript": "^4.7.4"
+		"typescript": "^4.9.4"
 	},
 	"scripts": {
 		"start": "react-scripts start",
diff --git a/frontend/src/api/npm/base.ts b/frontend/src/api/npm/base.ts
index 8d6e471..a1d9065 100644
--- a/frontend/src/api/npm/base.ts
+++ b/frontend/src/api/npm/base.ts
@@ -28,21 +28,22 @@ function buildBody(data?: Record<string, any>) {
 	}
 }
 
-async function processResponse(response: Response) {
+async function processResponse(response: Response, skipCamelize = false) {
 	const payload = await response.json();
 	if (!response.ok) {
 		throw new Error(payload.error.message);
 	}
-	return camelizeKeys(payload) as any;
+	return (skipCamelize ? payload : camelizeKeys(payload)) as any;
 }
 
 interface GetArgs {
 	url: string;
 	params?: queryString.StringifiableRecord;
+	skipCamelize?: boolean;
 }
 
 export async function get(
-	{ url, params }: GetArgs,
+	{ url, params, skipCamelize }: GetArgs,
 	abortController?: AbortController,
 ) {
 	const apiUrl = buildUrl({ url, params });
@@ -50,7 +51,7 @@ export async function get(
 	const signal = abortController?.signal;
 	const headers = buildAuthHeader();
 	const response = await fetch(apiUrl, { method, headers, signal });
-	return processResponse(response);
+	return processResponse(response, skipCamelize);
 }
 
 interface PostArgs {
diff --git a/frontend/src/api/npm/getDNSProvidersAcmesh.ts b/frontend/src/api/npm/getDNSProvidersAcmesh.ts
index 03654c6..b46d55f 100644
--- a/frontend/src/api/npm/getDNSProvidersAcmesh.ts
+++ b/frontend/src/api/npm/getDNSProvidersAcmesh.ts
@@ -7,6 +7,8 @@ export async function getDNSProvidersAcmesh(
 	const { result } = await api.get(
 		{
 			url: "dns-providers/acmesh",
+			// Important for this endpoint:
+			skipCamelize: true,
 		},
 		abortController,
 	);
diff --git a/frontend/src/api/npm/models.ts b/frontend/src/api/npm/models.ts
index 2026791..4d7bd21 100644
--- a/frontend/src/api/npm/models.ts
+++ b/frontend/src/api/npm/models.ts
@@ -74,18 +74,25 @@ export interface DNSProvider {
 	meta: any;
 }
 
-export interface DNSProvidersAcmeshField {
-	name: string;
+export interface DNSProvidersAcmeshProperty {
+	title: string;
 	type: string;
-	metaKey: string;
-	isRequired: boolean;
+	additionalProperties: boolean;
+	minimum: number;
+	maximum: number;
+	minLength: number;
+	maxLength: number;
+	pattern: string;
 	isSecret: boolean;
 }
 
 export interface DNSProvidersAcmesh {
-	name: string;
-	acmeshName: string;
-	fields: DNSProvidersAcmeshField[];
+	title: string;
+	type: string;
+	additionalProperties: boolean;
+	minProperties: number;
+	required: string[];
+	properties: any;
 }
 
 export interface Host {
diff --git a/frontend/src/locale/src/en.json b/frontend/src/locale/src/en.json
index f48f37f..2db87b0 100644
--- a/frontend/src/locale/src/en.json
+++ b/frontend/src/locale/src/en.json
@@ -137,6 +137,108 @@
 	"acmesh.dns_zonomi": {
 		"defaultMessage": "Zonomi"
 	},
+	"acmesh-property.access-key-id": {
+		"defaultMessage": "Access Key ID"
+	},
+	"acmesh-property.account-id": {
+		"defaultMessage": "Account ID"
+	},
+	"acmesh-property.api-key": {
+		"defaultMessage": "API Key"
+	},
+	"acmesh-property.api-url": {
+		"defaultMessage": "API URL"
+	},
+	"acmesh-property.app-id": {
+		"defaultMessage": "APP ID"
+	},
+	"acmesh-property.auth-id": {
+		"defaultMessage": "Auth ID"
+	},
+	"acmesh-property.base-url": {
+		"defaultMessage": "Base URL"
+	},
+	"acmesh-property.client-id": {
+		"defaultMessage": "Client ID"
+	},
+	"acmesh-property.client-secret": {
+		"defaultMessage": "Client Secret"
+	},
+	"acmesh-property.credentials": {
+		"defaultMessage": "Credentials"
+	},
+	"acmesh-property.context": {
+		"defaultMessage": "Context"
+	},
+	"acmesh-property.customer": {
+		"defaultMessage": "Customer"
+	},
+	"acmesh-property.email": {
+		"defaultMessage": "Email"
+	},
+	"acmesh-property.id": {
+		"defaultMessage": "ID"
+	},
+	"acmesh-property.insecure": {
+		"defaultMessage": "Insecure"
+	},
+	"acmesh-property.key": {
+		"defaultMessage": "Key"
+	},
+	"acmesh-property.oauth-token": {
+		"defaultMessage": "OAuth Token"
+	},
+	"acmesh-property.otp-secret": {
+		"defaultMessage": "OTP Secret"
+	},
+	"acmesh-property.password": {
+		"defaultMessage": "Password"
+	},
+	"acmesh-property.secret": {
+		"defaultMessage": "Secret"
+	},
+	"acmesh-property.secret-access-key": {
+		"defaultMessage": "Secret Access Key"
+	},
+	"acmesh-property.server": {
+		"defaultMessage": "Server"
+	},
+	"acmesh-property.server-id": {
+		"defaultMessage": "Server ID"
+	},
+	"acmesh-property.slow-rate": {
+		"defaultMessage": "Slow Rate"
+	},
+	"acmesh-property.subdomain": {
+		"defaultMessage": "Subdomain"
+	},
+	"acmesh-property.subscription-id": {
+		"defaultMessage": "Subscription ID"
+	},
+	"acmesh-property.sub-auth-id": {
+		"defaultMessage": "Sub-Auth ID"
+	},
+	"acmesh-property.tenant-id": {
+		"defaultMessage": "Tenant ID"
+	},
+	"acmesh-property.token": {
+		"defaultMessage": "Token"
+	},
+	"acmesh-property.ttl": {
+		"defaultMessage": "TTL"
+	},
+	"acmesh-property.user": {
+		"defaultMessage": "User"
+	},
+	"acmesh-property.username": {
+		"defaultMessage": "Username"
+	},
+	"acmesh-property.url": {
+		"defaultMessage": "URL"
+	},
+	"acmesh-property.zone-id": {
+		"defaultMessage": "Zone ID"
+	},
 	"action.edit": {
 		"defaultMessage": "Edit"
 	},
diff --git a/frontend/src/modals/DNSProviderCreateModal copy.tsx b/frontend/src/modals/DNSProviderCreateModal copy.tsx
new file mode 100644
index 0000000..ef1a1ca
--- /dev/null
+++ b/frontend/src/modals/DNSProviderCreateModal copy.tsx	
@@ -0,0 +1,284 @@
+import { useEffect, useState } from "react";
+
+import {
+	Button,
+	Checkbox,
+	FormControl,
+	FormErrorMessage,
+	FormLabel,
+	Input,
+	Modal,
+	ModalOverlay,
+	ModalContent,
+	ModalHeader,
+	ModalCloseButton,
+	ModalBody,
+	ModalFooter,
+	Select,
+	Stack,
+	useToast,
+} from "@chakra-ui/react";
+import {
+	DNSProvider,
+	DNSProvidersAcmesh,
+	DNSProvidersAcmeshProperty,
+} from "api/npm";
+import { PrettyButton } from "components";
+import { Formik, Form, Field } from "formik";
+import { useSetDNSProvider, useDNSProvidersAcmesh } from "hooks";
+import { intl } from "locale";
+import { validateString } from "modules/Validations";
+
+interface DNSProviderCreateModalProps {
+	isOpen: boolean;
+	onClose: () => void;
+}
+function DNSProviderCreateModal({
+	isOpen,
+	onClose,
+}: DNSProviderCreateModalProps) {
+	const toast = useToast();
+	const { mutate: setDNSProvider } = useSetDNSProvider();
+	const {
+		isLoading: acmeshIsLoading,
+		// isError: acmeshIsError,
+		// error: acmeshError,
+		data: acmeshDataResp,
+	} = useDNSProvidersAcmesh();
+
+	const [acmeshData, setAcmeshData] = useState([] as DNSProvidersAcmesh[]);
+	const [acmeshItem, setAcmeshItem] = useState("");
+
+	useEffect(() => {
+		setAcmeshData(acmeshDataResp || []);
+	}, [acmeshDataResp]);
+
+	const onSubmit = async (
+		payload: DNSProvider,
+		{ setErrors, setSubmitting }: any,
+	) => {
+		// TODO: filter out the meta object and only include items that apply to the acmesh provider selected
+
+		const showErr = (msg: string) => {
+			toast({
+				description: intl.formatMessage({
+					id: `error.${msg}`,
+				}),
+				status: "error",
+				position: "top",
+				duration: 3000,
+				isClosable: true,
+			});
+		};
+
+		setDNSProvider(payload, {
+			onError: (err: any) => {
+				if (err.message === "ca-bundle-does-not-exist") {
+					setErrors({
+						caBundle: intl.formatMessage({
+							id: `error.${err.message}`,
+						}),
+					});
+				} else {
+					showErr(err.message);
+				}
+			},
+			onSuccess: () => onClose(),
+			onSettled: () => setSubmitting(false),
+		});
+	};
+
+	const getAcmeshItem = (name: string): DNSProvidersAcmesh | undefined => {
+		return acmeshData.find((item) => item.title === name);
+	};
+
+	const fullItem = getAcmeshItem(acmeshItem);
+	const itemProperties = fullItem?.properties;
+
+	const renderInputType = (
+		field: any,
+		fieldName: string,
+		f: DNSProvidersAcmeshProperty,
+		value: any,
+	) => {
+		if (f.type === "bool") {
+			return (
+				<Checkbox {...field} size="md" colorScheme="orange" isChecked={value}>
+					{f.title}
+				</Checkbox>
+			);
+		}
+
+		let type = "text";
+		let props: any = {};
+		if (fullItem?.required.indexOf(fieldName) !== -1) {
+			// This is required
+			props.required = true;
+		}
+		if (f.type === "string") {
+			props.minLength = f.minLength || null;
+			props.maxLength = f.maxLength || null;
+			props.pattern = f.pattern || null;
+		}
+		if (f.type === "integer") {
+			type = "number";
+			props.min = f.minimum || null;
+			props.max = f.maximum || null;
+		}
+		if (f.isSecret) {
+			type = "password";
+		}
+
+		return (
+			<Input
+				{...field}
+				id={fieldName}
+				type={type}
+				defaultValue={value}
+				{...props}
+			/>
+		);
+	};
+
+	return (
+		<Modal isOpen={isOpen} onClose={onClose} closeOnOverlayClick={false}>
+			<ModalOverlay />
+			<ModalContent>
+				{acmeshIsLoading ? (
+					"loading"
+				) : (
+					<Formik
+						initialValues={
+							{
+								acmeshName: "",
+								name: "",
+								dnsSleep: 0,
+								meta: {},
+							} as DNSProvider
+						}
+						onSubmit={onSubmit}>
+						{({ isSubmitting, handleChange, values, setValues }) => (
+							<Form>
+								<ModalHeader>
+									{intl.formatMessage({ id: "dns-provider.create" })}
+								</ModalHeader>
+								<ModalCloseButton />
+								<ModalBody>
+									<Stack spacing={4}>
+										<Field name="name" validate={validateString(1, 100)}>
+											{({ field, form }: any) => (
+												<FormControl
+													isRequired
+													isInvalid={form.errors.name && form.touched.name}>
+													<FormLabel htmlFor="name">
+														{intl.formatMessage({
+															id: "dns-provider.name",
+														})}
+													</FormLabel>
+													<Input
+														{...field}
+														id="name"
+														placeholder={intl.formatMessage({
+															id: "dns-provider.name",
+														})}
+													/>
+													<FormErrorMessage>
+														{form.errors.name}
+													</FormErrorMessage>
+												</FormControl>
+											)}
+										</Field>
+										<Field name="acmeshName">
+											{({ field, form }: any) => (
+												<FormControl
+													isRequired
+													isInvalid={
+														form.errors.acmeshName && form.touched.acmeshName
+													}>
+													<FormLabel htmlFor="acmeshName">
+														{intl.formatMessage({
+															id: "dns-provider.acmesh-name",
+														})}
+													</FormLabel>
+													<Select
+														{...field}
+														id="acmeshName"
+														onChange={(e: any) => {
+															handleChange(e);
+															setAcmeshItem(e.target.value);
+														}}>
+														<option value="" />
+														{acmeshData.map((item: DNSProvidersAcmesh) => {
+															return (
+																<option key={item.title} value={item.title}>
+																	{intl.formatMessage({
+																		id: `acmesh.${item.title}`,
+																	})}
+																</option>
+															);
+														})}
+													</Select>
+													<FormErrorMessage>
+														{form.errors.acmeshName}
+													</FormErrorMessage>
+												</FormControl>
+											)}
+										</Field>
+										{acmeshItem !== "" ? <hr /> : null}
+										{itemProperties
+											? Object.keys(itemProperties).map((fieldName, _) => {
+													const f = itemProperties[fieldName];
+													const name = `meta[${fieldName}]`;
+													return (
+														<Field
+															name={fieldName}
+															type={
+																f.type === "boolean" ? "checkbox" : undefined
+															}>
+															{({ field, form }: any) => (
+																<FormControl
+																	isRequired={f.isRequired}
+																	isInvalid={
+																		form.errors[name] && form.touched[name]
+																	}>
+																	{f.type !== "bool" ? (
+																		<FormLabel htmlFor={name}>
+																			{f.title}
+																			{/* todo: locale for this*/}
+																		</FormLabel>
+																	) : null}
+																	{renderInputType(
+																		field,
+																		fieldName,
+																		f,
+																		values.meta[f.title],
+																	)}
+																	<FormErrorMessage>
+																		{form.errors[name]}
+																	</FormErrorMessage>
+																</FormControl>
+															)}
+														</Field>
+													);
+											  })
+											: null}
+									</Stack>
+								</ModalBody>
+								<ModalFooter>
+									<PrettyButton mr={3} isLoading={isSubmitting}>
+										{intl.formatMessage({ id: "form.save" })}
+									</PrettyButton>
+									<Button onClick={onClose} isLoading={isSubmitting}>
+										{intl.formatMessage({ id: "form.cancel" })}
+									</Button>
+								</ModalFooter>
+							</Form>
+						)}
+					</Formik>
+				)}
+			</ModalContent>
+		</Modal>
+	);
+}
+
+export { DNSProviderCreateModal };
diff --git a/frontend/src/modals/DNSProviderCreateModal.tsx b/frontend/src/modals/DNSProviderCreateModal.tsx
index 832db91..f8e39f5 100644
--- a/frontend/src/modals/DNSProviderCreateModal.tsx
+++ b/frontend/src/modals/DNSProviderCreateModal.tsx
@@ -21,7 +21,7 @@ import {
 import {
 	DNSProvider,
 	DNSProvidersAcmesh,
-	DNSProvidersAcmeshField,
+	DNSProvidersAcmeshProperty,
 } from "api/npm";
 import { PrettyButton } from "components";
 import { Formik, Form, Field } from "formik";
@@ -53,11 +53,17 @@ function DNSProviderCreateModal({
 		setAcmeshData(acmeshDataResp || []);
 	}, [acmeshDataResp]);
 
+	const onModalClose = () => {
+		setAcmeshItem("");
+		onClose();
+	};
+
 	const onSubmit = async (
 		payload: DNSProvider,
 		{ setErrors, setSubmitting }: any,
 	) => {
 		// TODO: filter out the meta object and only include items that apply to the acmesh provider selected
+		console.log("PAYLOAD:", payload);
 
 		const showErr = (msg: string) => {
 			toast({
@@ -83,35 +89,63 @@ function DNSProviderCreateModal({
 					showErr(err.message);
 				}
 			},
-			onSuccess: () => onClose(),
+			onSuccess: () => onModalClose(),
 			onSettled: () => setSubmitting(false),
 		});
 	};
 
 	const getAcmeshItem = (name: string): DNSProvidersAcmesh | undefined => {
-		return acmeshData.find((item) => item.acmeshName === name);
+		return acmeshData.find((item) => item.title === name);
 	};
 
+	const fullItem = getAcmeshItem(acmeshItem);
+	const itemProperties = fullItem?.properties;
+
 	const renderInputType = (
 		field: any,
-		f: DNSProvidersAcmeshField,
+		fieldName: string,
+		f: DNSProvidersAcmeshProperty,
 		value: any,
 	) => {
-		if (f.type === "bool") {
+		if (["bool", "boolean"].indexOf(f.type) !== -1) {
 			return (
-				<Checkbox {...field} size="md" colorScheme="orange" isChecked={value}>
-					{f.name}
+				<Checkbox size="md" colorScheme="orange" isChecked={value} {...field}>
+					{f.title}
 				</Checkbox>
 			);
 		}
 
+		let type = "text";
+		let props: any = {};
+
+		if (f.type === "string") {
+			props.minLength = f.minLength || null;
+			props.maxLength = f.maxLength || null;
+			props.pattern = f.pattern || null;
+		}
+		if (f.type === "integer") {
+			type = "number";
+			props.min = f.minimum || null;
+			props.max = f.maximum || null;
+		}
+		if (f.isSecret) {
+			type = "password";
+		}
+
 		return (
-			<Input {...field} id={f.metaKey} type={f.type} defaultValue={value} />
+			<Input
+				{...field}
+				id={fieldName}
+				type={type}
+				defaultValue={value}
+				placeholder={fieldName}
+				{...props}
+			/>
 		);
 	};
 
 	return (
-		<Modal isOpen={isOpen} onClose={onClose} closeOnOverlayClick={false}>
+		<Modal isOpen={isOpen} onClose={onModalClose} closeOnOverlayClick={false}>
 			<ModalOverlay />
 			<ModalContent>
 				{acmeshIsLoading ? (
@@ -135,29 +169,6 @@ function DNSProviderCreateModal({
 								<ModalCloseButton />
 								<ModalBody>
 									<Stack spacing={4}>
-										<Field name="name" validate={validateString(1, 100)}>
-											{({ field, form }: any) => (
-												<FormControl
-													isRequired
-													isInvalid={form.errors.name && form.touched.name}>
-													<FormLabel htmlFor="name">
-														{intl.formatMessage({
-															id: "dns-provider.name",
-														})}
-													</FormLabel>
-													<Input
-														{...field}
-														id="name"
-														placeholder={intl.formatMessage({
-															id: "dns-provider.name",
-														})}
-													/>
-													<FormErrorMessage>
-														{form.errors.name}
-													</FormErrorMessage>
-												</FormControl>
-											)}
-										</Field>
 										<Field name="acmeshName">
 											{({ field, form }: any) => (
 												<FormControl
@@ -180,11 +191,9 @@ function DNSProviderCreateModal({
 														<option value="" />
 														{acmeshData.map((item: DNSProvidersAcmesh) => {
 															return (
-																<option
-																	key={item.acmeshName}
-																	value={item.acmeshName}>
+																<option key={item.title} value={item.title}>
 																	{intl.formatMessage({
-																		id: `acmesh.${item.acmeshName}`,
+																		id: `acmesh.${item.title}`,
 																	})}
 																</option>
 															);
@@ -196,42 +205,84 @@ function DNSProviderCreateModal({
 												</FormControl>
 											)}
 										</Field>
-										{acmeshItem !== "" ? <hr /> : null}
-										{getAcmeshItem(acmeshItem)?.fields.map((f) => {
-											const name = `meta[${f.metaKey}]`;
-											return (
-												<Field
-													name={name}
-													type={f.type === "bool" ? "checkbox" : undefined}>
+										{acmeshItem !== "" ? (
+											<>
+												<Field name="name" validate={validateString(1, 100)}>
 													{({ field, form }: any) => (
 														<FormControl
-															isRequired={f.isRequired}
-															isInvalid={
-																form.errors[name] && form.touched[name]
-															}>
-															{f.type !== "bool" ? (
-																<FormLabel htmlFor={name}>{f.name}</FormLabel>
-															) : null}
-															{renderInputType(
-																field,
-																f,
-																values.meta[f.metaKey],
-															)}
+															isRequired
+															isInvalid={form.errors.name && form.touched.name}>
+															<FormLabel htmlFor="name">
+																{intl.formatMessage({
+																	id: "dns-provider.name",
+																})}
+															</FormLabel>
+															<Input
+																{...field}
+																id="name"
+																placeholder={intl.formatMessage({
+																	id: "dns-provider.name",
+																})}
+															/>
 															<FormErrorMessage>
-																{form.errors[name]}
+																{form.errors.name}
 															</FormErrorMessage>
 														</FormControl>
 													)}
 												</Field>
-											);
-										})}
+												{itemProperties
+													? Object.keys(itemProperties).map((fieldName, _) => {
+															const f = itemProperties[fieldName];
+															const name = `meta[${fieldName}]`;
+															return (
+																<Field
+																	name={`meta[${fieldName}]`}
+																	type={
+																		f.type === "boolean"
+																			? "checkbox"
+																			: undefined
+																	}>
+																	{({ field, form }: any) => (
+																		<FormControl
+																			isRequired={
+																				fullItem?.required.indexOf(
+																					fieldName,
+																				) !== -1
+																			}
+																			isInvalid={
+																				form.errors[name] && form.touched[name]
+																			}>
+																			{f.type !== "bool" ? (
+																				<FormLabel htmlFor={name}>
+																					{intl.formatMessage({
+																						id: `acmesh-property.${f.title}`,
+																					})}
+																				</FormLabel>
+																			) : null}
+																			{renderInputType(
+																				field,
+																				fieldName,
+																				f,
+																				values.meta[f.title],
+																			)}
+																			<FormErrorMessage>
+																				{form.errors[name]}
+																			</FormErrorMessage>
+																		</FormControl>
+																	)}
+																</Field>
+															);
+													  })
+													: null}
+											</>
+										) : null}
 									</Stack>
 								</ModalBody>
 								<ModalFooter>
 									<PrettyButton mr={3} isLoading={isSubmitting}>
 										{intl.formatMessage({ id: "form.save" })}
 									</PrettyButton>
-									<Button onClick={onClose} isLoading={isSubmitting}>
+									<Button onClick={onModalClose} isLoading={isSubmitting}>
 										{intl.formatMessage({ id: "form.cancel" })}
 									</Button>
 								</ModalFooter>
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index ed47067..74a06cd 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -164,7 +164,7 @@
   dependencies:
     "@babel/types" "^7.18.6"
 
-"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6":
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
   integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
@@ -515,7 +515,7 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.8.0"
 
-"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.18.6":
+"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
   integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
@@ -1027,7 +1027,7 @@
     core-js-pure "^3.20.2"
     regenerator-runtime "^0.13.4"
 
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
   version "7.18.6"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580"
   integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==
@@ -1072,557 +1072,790 @@
   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
   integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
 
-"@chakra-ui/accordion@2.0.6":
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.0.6.tgz#e92a273ee50a3bb2e7bfb8140bd298c737733082"
-  integrity sha512-1wPSSk2ZbiIHV4W/HMrv0t+jxiLMTDFVFd92ru8loFtU1AjNJ068OlJJs2V5hz4mbriC0nDctMxDJmT0zmPNaA==
+"@chakra-ui/accordion@2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.1.6.tgz#b8d6d8890eb57e31bcf4858829ce2fb3559ab3b0"
+  integrity sha512-C4JHxg9V2Y+MiuXO06x6o5pRBz0jWSb8BgWHrz9/5Zrm5zcoxenB7lHP4QiTF0vx/ZCSf0vari7gLVvM93klbA==
   dependencies:
-    "@chakra-ui/descendant" "3.0.3"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/transition" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/descendant" "3.0.12"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/transition" "2.0.13"
 
-"@chakra-ui/alert@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.0.4.tgz#944613e20993a294f20b509d5ef09b41c5b48098"
-  integrity sha512-n9YA7IivGI5DzTeSGoqjTnI+Rvk5FHRaieAJAlCoFbj+5QQQu7oOGvWRVVbe/SAYONV0yG35PBiv0zGGV0whtg==
+"@chakra-ui/alert@2.0.15":
+  version "2.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.0.15.tgz#ef3e2d1b56aa8e85877e9f1d616c3176ba4bcbd7"
+  integrity sha512-31V4l+dpZblUdidSLCw7sqOFxYoGFaxYEdN2jX1T31hViQubBAuuenwBoAQGNCM3s2zm6HVJTRUJCXxSCViJKQ==
   dependencies:
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/spinner" "^2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/spinner" "2.0.12"
 
-"@chakra-ui/anatomy@2.0.1":
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.0.1.tgz#3be152b6eaef93e0727cd12d3269b2e4374335d2"
-  integrity sha512-lbOUfPmCtgIe0G7Iu6C2MaFP3FKOHgKWxDrYc3498TQ7/z5N1r7AO6jB+gFRGDbxJNLjRGOLG7tV0bufagGTUw==
+"@chakra-ui/anatomy@2.1.1":
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.1.1.tgz#819a1458ff727157e5500a69fc26bfea6e944495"
+  integrity sha512-LUHAoqJAgxAqmyckG5bUpBrfEo1FleEyY+1A8hkWciy58gZ+h3GoY9oBpHcdo7XdHPpy3G+3hieK/7i9NLwxAw==
+
+"@chakra-ui/avatar@2.2.2":
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.2.2.tgz#ac93579a499b2a87406f32a122efa41f825de785"
+  integrity sha512-wFDK1wT5kQxkpCAX6mPhx9kh0Pi2RnfN32bCRFio4Mmiq0ltfSEWi3/XxlawDr31Ch3T3qbtPVLqn355B4U9ZA==
   dependencies:
-    "@chakra-ui/theme-tools" "^2.0.2"
+    "@chakra-ui/image" "2.0.13"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/avatar@2.0.5":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.0.5.tgz#10e8e35a7c99eda6f3ea99bae073adca67a46af2"
-  integrity sha512-FkheIKRUY9eltGgEyiOUIrBHQdgLA3Z/6WydIAU929SuAN2JuQnDZPH8BauTsddW+R3qhRLu1+tIC+HQtOTLxA==
-  dependencies:
-    "@chakra-ui/image" "2.0.5"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/breadcrumb@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.0.4.tgz#7d1491e2cbead2524f8c635a4f57f38e42b33849"
-  integrity sha512-Vr4H09I03DSGuZk3aST2af2ln69S3cO3/2E9gkzeWj3Wo3AYZrwuxUTtujmERao6EWOKlMqaA1x/hNpRubW9JA==
-  dependencies:
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/button@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.0.4.tgz#76b36c0d9a672109b6232e5037dba94118fd708b"
-  integrity sha512-bhae6Vw0rrwkyz72Y0//aWO80jM6VblFf9kuMnHLtO1y+I3ptWnx7jjN3865xn/PJl3lu1AzuHn67DuNuvZ2UQ==
-  dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/spinner" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/checkbox@2.1.3":
-  version "2.1.3"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.1.3.tgz#c08c9ac50cb89fe33f4d110def6a023bc51c37a0"
-  integrity sha512-1Nzh4ETLEuSAYm8Godgh9i1veUz559lHtvpjOkg8nrmOoN/51yyXfon0QCTJBq/1umGcHZmXrBrJgj2Wd9f+ZQ==
-  dependencies:
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
-    "@zag-js/focus-visible" "0.1.0"
-
-"@chakra-ui/clickable@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.0.4.tgz#7d1006b962b9ec04e926376bdeb317ec319aeed0"
-  integrity sha512-20otkOHNMrPMYbpRMSzX6AQBIUwbtN97ua+R0E+yG4DrgbXjOQvYyMAbSdBsKbGf0egx4c+4RlGmVf2kVA8Ahg==
-  dependencies:
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/close-button@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.0.4.tgz#948f10cb58115539f63ec5417c24aeace30a41dd"
-  integrity sha512-IfRJXK3ADEnnECoyE+gKGVtiIZoxtBiu17z/EeJriswV1x82Iw5ltptNUz0JoDrTD794a9YSnX7rDPI9wR5IMw==
-  dependencies:
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/color-mode@2.1.2":
+"@chakra-ui/breadcrumb@2.1.2":
   version "2.1.2"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.1.2.tgz#ff41168d96494186ff09f24e161c8b15ae347fa8"
-  integrity sha512-HJv+Jaizsg+uyW9TIjNwvkhUdD6NEBQLabAMOAk03CNtv/k4pTc56yLwn9TCDV06pZsViDpdO+vqgbGAOXiByw==
+  resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.1.2.tgz#72cc5a25d35dec7637a2135a2945e66317f6d723"
+  integrity sha512-NbWg9YKCxo6nbwORpfFkD6bIDvcDdCPPLx+tqIqVwoplpaSPeFV5lzPy4Lg/MS6x6Ko6a/GItGpDQGPuey+iWA==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/control-box@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.0.4.tgz#c68554de19d340aee1db5ef979e7ec16513b935d"
-  integrity sha512-jJD+Ka827qBlagKYzTjbKENi6+wgSowb9MHIlMybwnE6AA9qBws/lHHiUEk6S7tZW9BHMJYFeSbZFVtYaQho4A==
+"@chakra-ui/breakpoint-utils@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.6.tgz#ed31aeda21ff309eb0102ccd324b1d2096caa08a"
+  integrity sha512-aigYoZdHtV+PNFr/RTHjbIYK49PsMLvwtpZsowKWJ6xDyPKHtfhwZ2VOBTUyaQf4mXgaB9MNOF46zOTJN8RfLQ==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/counter@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.0.4.tgz#08df011cb3d8f050c52447b32a8afb78221e9c8b"
-  integrity sha512-j1y5ZJ+QVN+QotTm6SNNE0u1YFLaPyfiLu0+gspacvC/ugH9vhDwkkzqXJolkThWLbcAdL0I7J6XuAy5XOXKjA==
+"@chakra-ui/button@2.0.14":
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.0.14.tgz#9ffc852504a2a6150140e15e46866fd55660ce7e"
+  integrity sha512-XdP1sB67N2DujDXPWyyXMTjW7frcnbf3yN/3F/asQClZX7ppw8Y36a6uZ94+6Cv67BPc0CokN+m3oQZhINJ+vw==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/spinner" "2.0.12"
 
-"@chakra-ui/css-reset@2.0.1":
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.0.1.tgz#53bbc2c48dd9fdfb59af8cb8e20390ad7ddb3688"
-  integrity sha512-8RhAC7l5RHp9hNDN2M2feZ2wPaoSrgxzqx6VqLTIul2lwucpp1LTlrDlPCBMJe8fp51Q83IOCW4882ktsXxktA==
-
-"@chakra-ui/descendant@3.0.3":
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.0.3.tgz#9c9b356d04bfdaf6f6d7040576884945b23c5c69"
-  integrity sha512-uI0B5BO7khb22UWE42W7n3oGjxQkdJl+H5lhX58lAOAjbNsbmd8XbIVXTO/Kb7LvS3sPimkyG8nRC9A1epq4tw==
+"@chakra-ui/card@2.1.4":
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/card/-/card-2.1.4.tgz#731bea5cfe76d1768fa0b5bfbee5ca4e6eaac652"
+  integrity sha512-MO8tjFBX2OZJt+NOthDoKcGRMQW/43NePze8Sju7zXqv1ocq7VB0DvToPLkopgeKaPx6AyYhzRXQjYXLcjYgQw==
   dependencies:
-    "@chakra-ui/react-utils" "^2.0.1"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/editable@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-2.0.4.tgz#cb2ddc106dd1a10cf36f84183d821dafed71ba94"
-  integrity sha512-Xof9NXWzs/3H5MChxcbRmttYKf7MYGDePtRrZvW4GKLhi5fjpbuhzZIeC8XV3Pm1gBCLkyG8WHj3d99SNqdNig==
+"@chakra-ui/checkbox@2.2.8":
+  version "2.2.8"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.2.8.tgz#c37e2cc9e5d7c83820de69dc1dc77c23adb7c210"
+  integrity sha512-ZYllpZBuIXiT5bw/wo4al84W95Ke20/Yh+qELB6edImRMrEJwtpvCo9UDARrZXrhqjuUizN58hh2pMzcrKqyng==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/visually-hidden" "2.0.14"
+    "@zag-js/focus-visible" "0.2.1"
 
-"@chakra-ui/focus-lock@2.0.5":
+"@chakra-ui/clickable@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.0.12.tgz#479ed8fd2b1af079f6a630f8b2181b106112dd74"
+  integrity sha512-boZwlHZ1BdsC4P/1r+SRbKRMG+/UzOgc16Fmhl2QkZquVF6jS6QtJBS1/fL+1N8oijz87nuhBoetNECnfWYN+w==
+  dependencies:
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/close-button@2.0.15":
+  version "2.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.0.15.tgz#b969d550323566ee0731eb627d9fd729bb185734"
+  integrity sha512-VY//pwXQj3WBRQGnikE73F38MP/pDqZOV7Wc3pcTNdFoCqLwZl7AQyfjcm2ukgePiDzr/kRJIxgzhTY2DCxDYg==
+  dependencies:
+    "@chakra-ui/icon" "3.0.15"
+
+"@chakra-ui/color-mode@2.1.11":
+  version "2.1.11"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.1.11.tgz#9347c1b81a21b7d68bde1aa4a332f7060c8145d4"
+  integrity sha512-556wqI/MohJAqzP9AD+YsKGi982TzrsAaRGr7RCY5fChNe/wHraLPjMPNITPjjDQWiUmZYkaEos78/4u3qOdpA==
+  dependencies:
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+
+"@chakra-ui/control-box@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.0.12.tgz#d1109b3c28214421a5278c3776be499b8d843e83"
+  integrity sha512-SR2rG917ttCAda9Kh0eqr0X2AWQii2iRrgTks3fbDGi7seV7m3tkrpK2hr7rPz5zX0UoJi6CFO04Q6cSclFylw==
+
+"@chakra-ui/counter@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.0.12.tgz#68007b194aed7e5e55e185fddd38c778d2467354"
+  integrity sha512-LselA3J2OvO1GxXo9pTvFEDEYXaSkelEGAOasUfME2ckQnznMOI96x7cLAujyMuhTAuGnz0n4mxAOp/iMHKL4Q==
+  dependencies:
+    "@chakra-ui/number-utils" "2.0.6"
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/css-reset@2.0.11":
+  version "2.0.11"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.0.11.tgz#d2b65a543bac785c9788ce152a9eece157595289"
+  integrity sha512-TnydPIMYaQX8kJ8cKgbXfHaBKLr9wCqZS+UnqUxUo3YzMNRjOUPg4DWVO4n4s+GwuZy860DGsBoJaheLqrilVg==
+
+"@chakra-ui/descendant@3.0.12":
+  version "3.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.0.12.tgz#823eee949eb56e0045d3ee84bbfd614b4d9203e9"
+  integrity sha512-jx37SI6PYKMSgn+46Ou8LGa2nbEiBRmU4rzz+0/klVpCSd4yQLcm1c4nPv0D7SoQrhq/cQq4tUPfC2U4tXeovQ==
+  dependencies:
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+
+"@chakra-ui/dom-utils@2.0.5":
   version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.0.5.tgz#177e11d78088481bfc9aaa21bef876dc8a6bae29"
-  integrity sha512-WPseFKMTlXsc6FH2L4ZcO2PJVhEqZqUfgUMNM/1PVU/oZoa0t8A2HG/cq1EGaOf/EMGzVOGc/Gz4LE712JfZhg==
+  resolved "https://registry.yarnpkg.com/@chakra-ui/dom-utils/-/dom-utils-2.0.5.tgz#cd34be7342f217a5fad42766a15d3cda1b99be21"
+  integrity sha512-cZsaji3ntRcJOqrc9xyS2JSGXr/VLPFTTvShLApxg5dCDWvrGrCJGQ+iSP6R2FGHo2D6cpAgMdPO9O65KUyZBA==
+
+"@chakra-ui/editable@2.0.17":
+  version "2.0.17"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-2.0.17.tgz#f77953dacb08350ac66251bb5504cc886768f654"
+  integrity sha512-1Yy2rfWPtRg/1qx2yv9ovTwrpuFHFLEB8LyizM44yvKnSEqTb2K6CTYhVHQBzI92bQUbGsorSflLvFFUzB55XQ==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-focus-on-pointer-down" "2.0.5"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/event-utils@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/event-utils/-/event-utils-2.0.7.tgz#358db8db4f628ae492eba110fe801b5087f09076"
+  integrity sha512-OBEIx7CIK5k3nYUGnh2WDhth1oGe26fwXMVQjVM9+2LBUYw2Y1Ufac4o7lMiD1CnyUP+Q70yjMV/mFacvP1EMw==
+
+"@chakra-ui/focus-lock@2.0.14":
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.0.14.tgz#2137499570aad7df9404a40dfeb62311d52c3399"
+  integrity sha512-p4aieMBm4CG+uhfJ/W+2p3koGfPsHzdzSu2A8AYM5kGZ3rCx6IM97XYSneConw5WH7mSQR4lXzuEDjAyDozXFg==
+  dependencies:
+    "@chakra-ui/dom-utils" "2.0.5"
     react-focus-lock "^2.9.1"
 
-"@chakra-ui/form-control@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.0.4.tgz#63b6d723a20f1e3e0e56ca4e760c1febd857d175"
-  integrity sha512-ZPeG4gWdEcZZhROQn3NNwLEWh5meq+W1Dof5iB1L2VSgZHRpCSM1G8jeZQjxZsGV8AumEhyNq4nyLu2h+fPQAg==
+"@chakra-ui/form-control@2.0.15":
+  version "2.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.0.15.tgz#be14aef3cd65b9951dfae7d18c975902076900e9"
+  integrity sha512-xWPRyXMhp9dVr8hb62U6NSx7X//M1YGVfFMOkWyTwjCHqSAi63j5TZggTHzf1BWy/FkqepGWxUenyriSnKlBFQ==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/hooks@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.0.4.tgz#dcff23f86c9c27dcb69bf46aa316051b75ade633"
-  integrity sha512-5FJZ6JY1449rHZdjOSq7ei8TBG5mdSeNRbGGgTxt7xteU9o6vpr3hKJy9TFjaSNPJamSMS8Lf0YXJu2R044o0w==
+"@chakra-ui/hooks@2.1.4":
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.1.4.tgz#b8fc1904fb5d1daa4d19d61ffb64c1f76a28b846"
+  integrity sha512-FOsBBMK2zl7qdBrBgmkMNMkkbkKzM0RwYoK7oV+ldUG1f7pvjPBmzRFZ3wiIh5FlbffZvlLAH22D3a2xldWDZw==
   dependencies:
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-utils" "2.0.11"
+    "@chakra-ui/utils" "2.0.14"
     compute-scroll-into-view "1.0.14"
     copy-to-clipboard "3.3.1"
 
-"@chakra-ui/icon@3.0.4":
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.4.tgz#a8f2209e6accbf607a46eecb95e1cbd6036774cb"
-  integrity sha512-9Ry+fa6EKRYUexffvgOJ9dRIkxCSnASgdSnb09EbQTgCTeM+47LUsxR2+r8pbY6ZT5D4m2zRLkTrv7O7icoyOw==
+"@chakra-ui/icon@3.0.15":
+  version "3.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.15.tgz#589adf65550b2ef07342a064376adcf64331606c"
+  integrity sha512-6RRppml4kW3hOMgMCtgeKc73nJhJEZXOvzDvmZKKW9WrLsDpWiI7WDQb5VIxUXqZlbrh88K5WVRY0YivIefCDA==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/image@2.0.5":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.0.5.tgz#c3948a80b205c326eec2a622f4c1db92de26febf"
-  integrity sha512-1+/VjzjNv9moxrydsEryVhl3NOPxK1xr7BMd1UmPCp4g8ZZNNFmEah2FiL7GDVBdf2I4/e/2xMCUpndJJiIlCQ==
+"@chakra-ui/image@2.0.13":
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.0.13.tgz#adc8bc97a65ef15491d7abfa7e4aa31debb3e4c1"
+  integrity sha512-zcTN3DuhoLCkCgCwPGvy++F9jaCE2OQjoLKJSU2Rnc0c8WjCZZqXKuRdg3GhaYc80kaVSexMSc6h04Hki+JgVQ==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/input@2.0.4":
+"@chakra-ui/input@2.0.17":
+  version "2.0.17"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.0.17.tgz#3b6145365710e00ad5638518bcf50326c180b228"
+  integrity sha512-foGMxVG3PSd8B6eRVYJkmCsAYJ67eR/IfRgrqdfiurQSgXzuoKvpHnLvr16INyKK0VgFzty+inVfoLwI0RtP+g==
+  dependencies:
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/object-utils" "2.0.7"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/layout@2.1.13":
+  version "2.1.13"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.1.13.tgz#d9dfecf28fd73082a7560831caa5a189fd22eaaa"
+  integrity sha512-Lqo1UnvSJep6AXEjmuVApeT+dt/v0bdeNxT8KuA4M46i7lgrv8I91yAbdoyxlm42dM9AQjHVzYOJrlfO3krDtw==
+  dependencies:
+    "@chakra-ui/breakpoint-utils" "2.0.6"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/object-utils" "2.0.7"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/lazy-utils@2.0.4":
   version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.0.4.tgz#383bdbc6f2be59817ef9ce6888fdc7d0bf4e29c1"
-  integrity sha512-fzRFSt7ZFfZ71Tgq0xFHR32R4km8bpfV5kSlFZe/XnmLcCI7/oRRnHK/aa7GZyz2k5QpvvBe2TkqKjVAlv3jNA==
-  dependencies:
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/lazy-utils/-/lazy-utils-2.0.4.tgz#bd0e2f7118e3a8fe470db7666b08bb1f808205a9"
+  integrity sha512-HaVlEIlWNdk9vuubfc+EJkNkwP4pORXkPanP72KF8CxM4NN1hCSm+2gAvlCZCmWUIKIyhGMO1lXPY923o2Mnug==
 
-"@chakra-ui/layout@2.1.1":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.1.1.tgz#98866c34766478dffe555c4a1d0944dd804d171c"
-  integrity sha512-amiwbaWUkMpTh+K9QP7a24Je+C0u9x8nvf5ELyUhnZjL+J7yEe7MNRXiWIfqFNC3gszZv/7y7HiKBzKQUw0u/Q==
-  dependencies:
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+"@chakra-ui/live-region@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.0.12.tgz#932e94cf2c36eb3c004259d9a4cda5c2b6269887"
+  integrity sha512-hzCvqeYRtocLn0KmlEpVdYbt/7Tb5tBtsjMBfJb2lQkarQRwC9xzZ4arCcsDZAWiR3c3wvXdSob3vZ71biz46g==
 
-"@chakra-ui/live-region@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.0.4.tgz#85b7ae4106772266ef26493fd9d5bd58acef2da8"
-  integrity sha512-zOu+MzwRdgV+wMXMW+FOY7iL3vs/jdfAEJlNnfI1Lx4LFJ4FnjegvLjOOamOwtPJTh5ZkeUsyZctndrxH8agQQ==
+"@chakra-ui/media-query@3.2.9":
+  version "3.2.9"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.2.9.tgz#204002fe04e56a1abfa0bd5e3ad05bad8c34ae3e"
+  integrity sha512-4vaf8YqgIs5zhaQTLAif+aiiixo9gpk1xiTn4oTiDZQFuTVhKyv4iI93NbAKif/Bls+8XghbMo0rF93DjqRRzg==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/breakpoint-utils" "2.0.6"
+    "@chakra-ui/react-env" "2.0.12"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/media-query@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.2.0.tgz#185cbca4bd310142e0c24f9f347086bdb6af9070"
-  integrity sha512-rSqEmegTXojNtY4wJQyl7yceLK4oHMJBnTKLZOkdKnxgWTgcTgkH26MZaP/FeJJBMijRPEN5qoy2KN1lCIVEmg==
+"@chakra-ui/menu@2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.1.6.tgz#939a061bc0848528be8ddbcc03c33c35c2630de6"
+  integrity sha512-/ypgx+JmYgItoBq0bUMetnjDu3aS75lra4xVQeMEG8L7y8/q7B4uIIJeSVh7o8UQJCvV05doxnwsxV7zBW29bw==
   dependencies:
-    "@chakra-ui/react-env" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/clickable" "2.0.12"
+    "@chakra-ui/descendant" "3.0.12"
+    "@chakra-ui/lazy-utils" "2.0.4"
+    "@chakra-ui/popper" "3.0.11"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-animation-state" "2.0.7"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-disclosure" "2.0.7"
+    "@chakra-ui/react-use-focus-effect" "2.0.8"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-outside-click" "2.0.6"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/transition" "2.0.13"
 
-"@chakra-ui/menu@2.0.6":
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.0.6.tgz#a3c31ef138ca2883475b72f9c30843d5d3ac5ef2"
-  integrity sha512-VcucCiDwOZg5iCP+7sP22H4uPz3/qE22Jo2A48hPPneb9MPmYkZxIBRJyB0wvbWmkRHAkyiLYNwHM0qk0wpp+g==
+"@chakra-ui/modal@2.2.7":
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.2.7.tgz#f888c113d22fd3ea8002e0f0a540d697ae5e5c66"
+  integrity sha512-hkWATlyknkKJ3h6dT2J1f+Ec9afjoRsS3wR+AhygKXBgxSJdpPSV6rUfmWBVeBmRLQmDpUA+LSqodNTV1pgrYA==
   dependencies:
-    "@chakra-ui/clickable" "2.0.4"
-    "@chakra-ui/descendant" "3.0.3"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/popper" "3.0.2"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/transition" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/modal@2.1.2":
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.1.2.tgz#c78da1d60f1ae27a2ce7b7d918642aec559e672b"
-  integrity sha512-kstt5xM8rqmSkFU1CrY6qD1iv+5tXa0IsLGAN1lyDu4MSphPSMfcBHcKTXTgrsRLHVc8bVCWWAQuJQSKt0G0jw==
-  dependencies:
-    "@chakra-ui/close-button" "2.0.4"
-    "@chakra-ui/focus-lock" "2.0.5"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/portal" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/transition" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/close-button" "2.0.15"
+    "@chakra-ui/focus-lock" "2.0.14"
+    "@chakra-ui/portal" "2.0.13"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/transition" "2.0.13"
     aria-hidden "^1.1.1"
     react-remove-scroll "^2.5.4"
 
-"@chakra-ui/number-input@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.0.4.tgz#27f59e55e359fcb708183da774cba6a625126f7e"
-  integrity sha512-VYgUhqchKFpMGE05EogTIxOIKLUdgdm+X+ciNbn1mhfoP+4zoEZlTobGUm+9xel6ojsAVVlnXPDv1jWMBQ5SJg==
+"@chakra-ui/number-input@2.0.16":
+  version "2.0.16"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.0.16.tgz#ca6eedaef6fc6cde2dd38919efd755e80e60175e"
+  integrity sha512-6ocRWwCIBtMKBdmj/z3Y3vRlHPI09Ppj6f4j2cRECNTCTSAn8u+YnXjwRNDWZQ6I5pyOvuqRFyRkJXt0lmex8Q==
   dependencies:
-    "@chakra-ui/counter" "2.0.4"
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/counter" "2.0.12"
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+    "@chakra-ui/react-use-event-listener" "2.0.6"
+    "@chakra-ui/react-use-interval" "2.0.4"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/pin-input@2.0.6":
+"@chakra-ui/number-utils@2.0.6":
   version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.0.6.tgz#ccddc545cf94db74eaa956fe5797f752c4abd804"
-  integrity sha512-CVpgvTDqkBoVU860PHN1xHNpcj21tXaur5mjJkcMh2/HnMQ5Dq4Z+69crkQfGIG7NV5XtVasJo7+DWYRaDCZGw==
-  dependencies:
-    "@chakra-ui/descendant" "3.0.3"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/number-utils/-/number-utils-2.0.6.tgz#3db0e61dd542d5753b3db4702bf9fae6653ceb82"
+  integrity sha512-VLOyoiXGpZ+eCQSPqKdBCEpen9VAo6pc6FDFuf4BNdIVEfh6ee//Zl7XjyTAGr1G4HUANp8ZxVHHPvtQ10VP4w==
 
-"@chakra-ui/popover@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.0.4.tgz#f2a2e2f0cb8b56c5b52edc01e2df24c4f053fbde"
-  integrity sha512-sA4HHnaVBLUpgUoe/s82A+T2BRQ9Hb3+XsLvAbrqOwLc16Jh3FZfS9a02fNokbOWs6NDioslgbSoeTvv5yqOOQ==
-  dependencies:
-    "@chakra-ui/close-button" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/popper" "3.0.2"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+"@chakra-ui/object-utils@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/object-utils/-/object-utils-2.0.7.tgz#0d17b7a528d712428e482709c9df9fcd92db9f2b"
+  integrity sha512-dw5KXK9Vlr5ndf9/iSiEuvpfhZQasYdDdGXDtSBL2rF6Llg2OQ5MRSoLhTt9oL1L9crv9uPCJRm5S9VJZ3i5Vw==
 
-"@chakra-ui/popper@3.0.2":
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.0.2.tgz#63994c39c316b03f68597099113e0719ac70ac8f"
-  integrity sha512-oEUsaFR4EPY3CvhEVeZNoa+mA/w+TvLlG3xlicIwv/3Fcfl6LD2Jhr6utnqAvHFxE/qRcUcXLX20ovy0Zrgm/Q==
+"@chakra-ui/pin-input@2.0.17":
+  version "2.0.17"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.0.17.tgz#d1151c010e2b1600d0d5b17bfe79543b838c3a5d"
+  integrity sha512-uDL8HIjuvvcEO9YBiAOewFtlrjPDqF+xPIWBh4hetDVt6Pd9XavvuyRJjsogjAZt0FsweUg5sF8g/iVLAihCAQ==
   dependencies:
-    "@chakra-ui/react-utils" "2.0.1"
+    "@chakra-ui/descendant" "3.0.12"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/popover@2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.1.6.tgz#2a2bc80be5f595abe8dbd1cd3a88b61de2fca10e"
+  integrity sha512-KIdTXG65Ugl2Dvb7VGF65FqdkmpB1/LyVjLH8YIMyhnN0fo+d94M/WWVIrdMECQVjTXHMsLDVKYSEbm4x7RHWw==
+  dependencies:
+    "@chakra-ui/close-button" "2.0.15"
+    "@chakra-ui/lazy-utils" "2.0.4"
+    "@chakra-ui/popper" "3.0.11"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-animation-state" "2.0.7"
+    "@chakra-ui/react-use-disclosure" "2.0.7"
+    "@chakra-ui/react-use-focus-effect" "2.0.8"
+    "@chakra-ui/react-use-focus-on-pointer-down" "2.0.5"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/popper@3.0.11":
+  version "3.0.11"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.0.11.tgz#00d412d408d4628d55491bd5d3b58e1e23e6c972"
+  integrity sha512-fsKwgq3E0S6FqCzTCQ7HQEr2BOHfHZZMiqvFpGyrIPQ/Esv7aE3Ipw4y4RHTztzJ+vUKK3XTbJzX1cU4RR4a8Q==
+  dependencies:
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
     "@popperjs/core" "^2.9.3"
 
-"@chakra-ui/portal@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.0.4.tgz#212f3b24362fbc89a0b418598a3577674171651b"
-  integrity sha512-4h/brmPQBMK2ZtpqqSOGIMfg/oRmfmPeDI61n4cN5WgatarkxEzrIJUoNJHIYHl8Da0TmoFzyhgV6ESm1SHLJg==
+"@chakra-ui/portal@2.0.13":
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.0.13.tgz#ce556c1750bacf157f9f96755577dc9d59266ef6"
+  integrity sha512-EuzaYJuIXM5elqy0MmXe+nc2bHm72JpxkM/PX+LnRTlkA44Kj/iQP5gnx5KHLVG4RPbcG5p61W4KzIBPSRY0+g==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
 
-"@chakra-ui/progress@2.0.5":
+"@chakra-ui/progress@2.1.3":
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.1.3.tgz#742ab674323dd504ba67e69ae379cbdabdadd421"
+  integrity sha512-RnVFvdWXrj06oVG0R0m/OunXJ9oxMrcI/UHGgTw74FbjZDSSv7+8j9397iu2Mop7v6iJi0Rhm8Nyi/wEqlO9lw==
+  dependencies:
+    "@chakra-ui/react-context" "2.0.6"
+
+"@chakra-ui/provider@2.0.29":
+  version "2.0.29"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.0.29.tgz#eb11dfd372f16731daf2740b2e028d98eff1027c"
+  integrity sha512-usgyV7+UKkycsViRHhnnIg9k9U3Vmrnw9KG5mgxVcCOFIR4F/iGJ98zK/MR5HKxZORrQtJPCsBWh3I8BLv1vYQ==
+  dependencies:
+    "@chakra-ui/css-reset" "2.0.11"
+    "@chakra-ui/portal" "2.0.13"
+    "@chakra-ui/react-env" "2.0.12"
+    "@chakra-ui/system" "2.3.8"
+    "@chakra-ui/utils" "2.0.14"
+
+"@chakra-ui/radio@2.0.17":
+  version "2.0.17"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.0.17.tgz#dfac644d8bfdb4d1d2a13b2b2ddcb899952dc6d1"
+  integrity sha512-OkjnINkpqM6olJ8GOYjppSOyhvPBx1tT3fcVO6fe9BNHbAte1w/Yb6t5oxz9ad4tBzgeuvs5ntQ9z5MO762n8g==
+  dependencies:
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@zag-js/focus-visible" "0.2.1"
+
+"@chakra-ui/react-children-utils@2.0.5":
   version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.0.5.tgz#cd8f9e29bdc27643090759a352837518397b401f"
-  integrity sha512-GKeIxL6YEHrN6sX7rPce6TtYKtqkBDQ0r4b3WeOt3CaEhzSm1zMQMni0Zl5xdQp2BhaEQ3ZgEydxdsxDnr1PPQ==
-  dependencies:
-    "@chakra-ui/theme-tools" "2.0.5"
-    "@chakra-ui/utils" "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-children-utils/-/react-children-utils-2.0.5.tgz#300efb99130e8423333f7bddbbac23cdff624b5e"
+  integrity sha512-rP/1HFR9J6wohIzLe/gU+vpey27uey9pVa46VTZfApI6VdzDWiQT1pmrGQeMkba07KdU2MJS/60dhGM4NfvcQA==
 
-"@chakra-ui/provider@2.0.9":
-  version "2.0.9"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.0.9.tgz#bfa6f143af65de43a4a1929b1f167138ab873d09"
-  integrity sha512-RWa5lULY2yz/PbaipmYq9bjyMouyQjHBKpu/zpCsML5j13JI4QonW7D26Sm0sDE67RJVaopCzFv0I4B6X2TMCw==
-  dependencies:
-    "@chakra-ui/css-reset" "2.0.1"
-    "@chakra-ui/portal" "2.0.4"
-    "@chakra-ui/react-env" "2.0.4"
-    "@chakra-ui/system" "2.2.2"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/radio@2.0.5":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.0.5.tgz#5e72dbc9253d3e95406cb03151225686921877ae"
-  integrity sha512-IF3hITdx73tOX9+9E8I9FWPnIYOEjik2aobBlAxBbts9YvIGJLpquQOEfjlf10moZh7B8hGLQMdlqE56snzwpQ==
-  dependencies:
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
-    "@zag-js/focus-visible" "0.1.0"
-
-"@chakra-ui/react-env@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-2.0.4.tgz#3daa61b1e318b5133715eab1868b505806db2560"
-  integrity sha512-qiLQOr966BLX9zORn4UXpcfYD7zF8DphdfkzW1MPPRj9Iufsf96NliHSuz8XBmnLFdFP0cKHXs0hUOaGkkernw==
-  dependencies:
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/react-utils@2.0.1", "@chakra-ui/react-utils@^2.0.1":
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/react-utils/-/react-utils-2.0.1.tgz#aebf12ee9f71fb7a27183d556131177f9ce745c8"
-  integrity sha512-xLiTn7WeUo2e3zvo8zUGpICgIGsLCPpkVbjEKhr1jAV41urqEtwlLc6uGir595OYqAC8zFDqs4HXhHouqNEtiw==
-  dependencies:
-    "@chakra-ui/utils" "^2.0.2"
-
-"@chakra-ui/react@^2.2.4":
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-2.2.4.tgz#916451368d3f3334eca8ad963a142373001f2101"
-  integrity sha512-YlpDn2nNU3HT/Smtziya7R+WyENbzSzrKFibC49zxR9v1D7LBzXHiwKJCokvDQ/NsjEVHz0zwyZiVnJtUnNXsQ==
-  dependencies:
-    "@chakra-ui/accordion" "2.0.6"
-    "@chakra-ui/alert" "2.0.4"
-    "@chakra-ui/avatar" "2.0.5"
-    "@chakra-ui/breadcrumb" "2.0.4"
-    "@chakra-ui/button" "2.0.4"
-    "@chakra-ui/checkbox" "2.1.3"
-    "@chakra-ui/close-button" "2.0.4"
-    "@chakra-ui/control-box" "2.0.4"
-    "@chakra-ui/counter" "2.0.4"
-    "@chakra-ui/css-reset" "2.0.1"
-    "@chakra-ui/editable" "2.0.4"
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/image" "2.0.5"
-    "@chakra-ui/input" "2.0.4"
-    "@chakra-ui/layout" "2.1.1"
-    "@chakra-ui/live-region" "2.0.4"
-    "@chakra-ui/media-query" "3.2.0"
-    "@chakra-ui/menu" "2.0.6"
-    "@chakra-ui/modal" "2.1.2"
-    "@chakra-ui/number-input" "2.0.4"
-    "@chakra-ui/pin-input" "2.0.6"
-    "@chakra-ui/popover" "2.0.4"
-    "@chakra-ui/popper" "3.0.2"
-    "@chakra-ui/portal" "2.0.4"
-    "@chakra-ui/progress" "2.0.5"
-    "@chakra-ui/provider" "2.0.9"
-    "@chakra-ui/radio" "2.0.5"
-    "@chakra-ui/react-env" "2.0.4"
-    "@chakra-ui/select" "2.0.4"
-    "@chakra-ui/skeleton" "2.0.9"
-    "@chakra-ui/slider" "2.0.4"
-    "@chakra-ui/spinner" "2.0.4"
-    "@chakra-ui/stat" "2.0.4"
-    "@chakra-ui/switch" "2.0.6"
-    "@chakra-ui/system" "2.2.2"
-    "@chakra-ui/table" "2.0.4"
-    "@chakra-ui/tabs" "2.0.6"
-    "@chakra-ui/tag" "2.0.4"
-    "@chakra-ui/textarea" "2.0.5"
-    "@chakra-ui/theme" "2.1.3"
-    "@chakra-ui/toast" "3.0.2"
-    "@chakra-ui/tooltip" "2.0.5"
-    "@chakra-ui/transition" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
-
-"@chakra-ui/select@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.0.4.tgz#1887d022566a9546ae8d16102e5371149d163231"
-  integrity sha512-ta1yX8EffhdH3RcNOI9RxCdYZ2hHvEwJXBnr3pW6gf7asw/jNlTyBmmSUAddHp1j9YwKfT9F5jkKmtovNdrpdA==
-  dependencies:
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/skeleton@2.0.9":
-  version "2.0.9"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.0.9.tgz#c656b864f9d5f0ad45f5eb08befd2759a220dde1"
-  integrity sha512-bdblqZ/quq1GN0DBC1baj8DqpLkA3wfVnxvR6QVA9Qy/KgnvRiMWe/xiwXKAq8Tnkoxco94ACIk7M1m0tWjJZA==
-  dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/media-query" "3.2.0"
-    "@chakra-ui/system" "2.2.2"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/slider@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.0.4.tgz#1dabbb52697b0fdfe938b721d64e5073542c0409"
-  integrity sha512-bNhysW59KTpEl88Q/kNKCmfh2KZWJipFRIYxjE0IJQ+slesET3qgRWwqtdEVl4mutmDkzTyoSKRuBYCdS6HO0A==
-  dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-
-"@chakra-ui/spinner@2.0.4", "@chakra-ui/spinner@^2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.0.4.tgz#0384e7dad2038edbcb946d282012bc299844492c"
-  integrity sha512-BEUBgo6/6s+D9fo5vrkxLbPYNIPPZXVQNV+h1umnHNbZx9t6BDP/j4YAadboCEySidVGFZ+kfRq1mz4/XHgKZw==
-  dependencies:
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
-
-"@chakra-ui/stat@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.0.4.tgz#fc4d1cd787b397016b974c07bc646948308c72fb"
-  integrity sha512-zSBZcbdlBQtB8KVPr4jhrguvubuOUoR545PjRNnMTECDyg+Ff3sWzU4tB1RG7Cy/L7hObgYvQHfpAHZ+CdoAmA==
-  dependencies:
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
-
-"@chakra-ui/styled-system@2.2.3":
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.2.3.tgz#c9147c3588318935840ed39c1d140b12ddfe7ff0"
-  integrity sha512-zbXJ2ytVQC944tuDBgm+Ya+KBYFkcsK/EzKq61TBk/AAPt/BNwC9/CNF9fuEVf7+p45cZvKdCyu27UewlUiXuA==
-  dependencies:
-    "@chakra-ui/utils" "2.0.4"
-    csstype "^3.0.11"
-
-"@chakra-ui/switch@2.0.6":
+"@chakra-ui/react-context@2.0.6":
   version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.0.6.tgz#60553d99c39bc7e4e09a242a6870c486142713d7"
-  integrity sha512-agjRFu0Fy5u0D8MUdckpIen7jQFkYRg08xOWX57VXQEEJN7L8Pe5hF57aig65TXZMXQTcLB2ss6pQFYYDbt3cQ==
-  dependencies:
-    "@chakra-ui/checkbox" "2.1.3"
-    "@chakra-ui/utils" "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-context/-/react-context-2.0.6.tgz#77d61e4a2654e83a8cc5c6d6f0140ceedab87963"
+  integrity sha512-+Bk/lDBirj6KE3vbyyUVCqFGqAe+MOso+1NRHQ0m66/sXWFFnoL/lvuq4osdNp80DOVQ4EYYnHI0olSZZvuKEg==
 
-"@chakra-ui/system@2.2.2":
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.2.2.tgz#255ebfc81eaaea6c2a7249ad0889c03b8cc99a81"
-  integrity sha512-lo7QZSGNhw0HhvVYGRdP5cCllM6j5UL0S1syYu0gHhqNVu5qUrdpxpGsYqYK0MP7T16YReUoolPdz5UNVxVuLg==
+"@chakra-ui/react-env@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-2.0.12.tgz#f5f9fef0bd6fa9983457cb06413cf209acad48e8"
+  integrity sha512-BPTz2cxNKhNc1y5J9cCOYndbGiNulpMwihZLkybLRJ1qzZic4KuD3iGOkagJ81STKoPkKEZWfcjnrQTCJTq1fg==
+
+"@chakra-ui/react-types@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-types/-/react-types-2.0.6.tgz#96b4f8a082ab5244fe6b574e953b1b64ece9605a"
+  integrity sha512-aAq/nl//PneEfeaDb94zwfXor4OP/d5kc6dEXOZB2HJgCt3hu2+F/1u1QpPLPPTys5xexkQojuZQLnnD9lmQFw==
+
+"@chakra-ui/react-use-animation-state@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.0.7.tgz#5f7f6327130c7bc345477a46b31b30b81fa1e45a"
+  integrity sha512-v4p5jTopFvYah3vrRU7m6W+m1IEIqxfDco6ASeoEWEcKab4WBdQ1OQr1Oxgip+UIgmvLUnl+3BS+jPUuuKkdgg==
   dependencies:
-    "@chakra-ui/color-mode" "2.1.2"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/styled-system" "2.2.3"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/dom-utils" "2.0.5"
+    "@chakra-ui/react-use-event-listener" "2.0.6"
+
+"@chakra-ui/react-use-callback-ref@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.0.6.tgz#e382cfa198a376804946f57fa564f17ea6efdccc"
+  integrity sha512-JKh0GJQvLonjSVQJjsBs2gE+Zix/DXfAo8kzNE+DzNf49CNomX59TkcJNXDjtzSktn6GfqDF8IOObJlGlbtG7g==
+
+"@chakra-ui/react-use-controllable-state@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.0.7.tgz#1f61659a42cc73227770201e6c631dc9c606f15f"
+  integrity sha512-vKGgMtZb/06KnIF0XUFjWvwfKs3x35M6FEc4FU/wgM5FDU9T6Vd1TG7kDHFMoYdcvRf2/fgzkOxgTN052+sMkw==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-disclosure@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.0.7.tgz#217ea956a1c2455c9b2647d59d1bbbe0e577d190"
+  integrity sha512-vQG8AxYq+BkaurCHdMA9pxJAfQDmErMzn9hn2elP0dVfKe2a0O7aCFzX2Ff9PeeBKWOFlUfKf79gRBnhXRa5xw==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-event-listener@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.0.6.tgz#15faf5873f6ee6a973d74d174fe2905a81647ccf"
+  integrity sha512-lDtccra2B/1ap6Z7NESS4QfZajfOLd/jafmVdiO0xc4YSs6VDhenipMCv9O47U5EXapG6jfTXs2nbFkc3jRKiA==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-focus-effect@2.0.8":
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.0.8.tgz#fdf43e129148c82ebad66ef970dd3f8b2394f251"
+  integrity sha512-Et6/97A/6ndPygj6CF8+T7RQH0gsW5fkWNi64R7OjuQSjWxGq1kcmyBGm4E2u2Hbmtf4Hm1dcjzilnYbG7M7IA==
+  dependencies:
+    "@chakra-ui/dom-utils" "2.0.5"
+    "@chakra-ui/react-use-event-listener" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+
+"@chakra-ui/react-use-focus-on-pointer-down@2.0.5":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.0.5.tgz#81bf94ada866f3ddf3d72e50b6e4281a29e88196"
+  integrity sha512-xDQUp8s+a+0DgqOWdvKXgIZcyXH5RXKkC+qa0mbUJf54b9qLbrD6yw3o2jAvDEGa7vLBjaVY4jfOAdzt7+Na2g==
+  dependencies:
+    "@chakra-ui/react-use-event-listener" "2.0.6"
+
+"@chakra-ui/react-use-interval@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-interval/-/react-use-interval-2.0.4.tgz#c4358e5e631e18872bda061b8cde48b3385aa641"
+  integrity sha512-LCS0CijCBEJW1dz2WQThGn+wPSaA6YWPEWeS2WmobbQhkjLbzEy2z8CIG5MeUopX8v6kDDnCMmIpocmrIyGGbA==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-latest-ref@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.0.4.tgz#c35a3741f1ac2f9468bb3ea1333adce445e6068f"
+  integrity sha512-7xxQeu7PtFUEXbd+BZ+UMX9ASpJET02z9EgtqSfnMgB1ccgo/1i8CYI2/BcolwRf05EUD7kOUA+7eHyP4EI3Uw==
+
+"@chakra-ui/react-use-merge-refs@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.0.6.tgz#be0279ee6070480d5b2699c732a7cfa9690c589b"
+  integrity sha512-m4fQtm5cn3F39nLj5MhmKsAzdFaYMldR8a4VMtfC2Pnd+bqX8jx2q2yPCjpam9x/Wnh8ZRBMJ2KAjAiGnF3XXw==
+
+"@chakra-ui/react-use-outside-click@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.0.6.tgz#55f4d5dacc80c3c39fd7755fe7e142a841d99105"
+  integrity sha512-wbZI4zDwSiQ3jCZ++PKmv7uIU6oyEbaap8s6e3O9/JFAlPXxAG48DcSHmQZ8scyEu/wwd8A+/3go49T4VIvc7w==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-pan-event@2.0.8":
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.0.8.tgz#88bd69d55c71be7d261ad3a8abe15d31a6b11380"
+  integrity sha512-HUn7WR9IagtC3KdjmBlHibnFYisQ055IoWReIEWuDz/5KWSPeC2p2QcMc33vhN/ucS1XbWCt6uelHHBeCWWvfA==
+  dependencies:
+    "@chakra-ui/event-utils" "2.0.7"
+    "@chakra-ui/react-use-latest-ref" "2.0.4"
+    framesync "6.1.2"
+
+"@chakra-ui/react-use-previous@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-previous/-/react-use-previous-2.0.4.tgz#9b73efce8ab82060ca31c26bc6128f896ec3a9a8"
+  integrity sha512-ZzILmNAoRVPDRFhKUceksQGETQyne4ST7W7Y5NPkr/OAJuzc2njodY0GjGiJTF2YpOSelRn6KB8MDhwp4XR2mw==
+
+"@chakra-ui/react-use-safe-layout-effect@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.0.4.tgz#5924c94dbaa3765a5f80931a6cf2cf3af094cc39"
+  integrity sha512-GbQIdhiesXZ8DV+JxiERz3/zki6PELhYPz/7JxyFUk8xInJnUcuEz2L4bV7rXIm9/bd2kjf4gfV+lHOGfpJdLw==
+
+"@chakra-ui/react-use-size@2.0.7":
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-size/-/react-use-size-2.0.7.tgz#52929bd292ff6c55471872eb0f32186d7cfe31d8"
+  integrity sha512-ggj8W0rer9oJ03xXrH4CUBNe6RZ/qtuU/32pMougeVWwZ3COGTODBtFlooIiy3iCvxrpHIgIDXy/hyrBWyvQSw==
+  dependencies:
+    "@zag-js/element-size" "0.3.0"
+
+"@chakra-ui/react-use-timeout@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-timeout/-/react-use-timeout-2.0.4.tgz#65e6e07f42f9c1c4165e5e8d6784215117f6b73a"
+  integrity sha512-7EqjJVRv61DmWb9UE4R9LPf3l1SDfawQ2/ax/e0lYpDBjaeV013wUH1uurRq8jn/vR1DhNzfRB5VtimE2f2Vsw==
+  dependencies:
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+
+"@chakra-ui/react-use-update-effect@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.0.6.tgz#8aacaab25fd181a52569336ca5ef797e8ae1026a"
+  integrity sha512-P6+0hocnasjl8xOrFH9BklyCNNzCBu/XAl5y7kZ82uVnS99SaC6cppO9/qWRZI9cYYheWfJ4lyLGeLOcNmI8/Q==
+
+"@chakra-ui/react-utils@2.0.11":
+  version "2.0.11"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react-utils/-/react-utils-2.0.11.tgz#5e99b21759eadc9276709268cca94c502afeda56"
+  integrity sha512-LdE0Ay5Em2ew7fuux9MJAwaxoaU/QwVoH/t6uiUw/JCWpmiMGY6tw6t3eZTvZSRZNfyPWY0MmvOHR1UvIS9JIw==
+  dependencies:
+    "@chakra-ui/utils" "2.0.14"
+
+"@chakra-ui/react@^2.4.7":
+  version "2.4.7"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-2.4.7.tgz#d4c8289c8d8cd4e3ddc5af8824d35a71a88e3fe8"
+  integrity sha512-2+0fgC7BHpLy+Fhc6PBbNk30b2H8iNcb7A7SShupm5otT63ZvcGffPHOynNtL5A2kTHFZyh94lxYVM/7H02x+w==
+  dependencies:
+    "@chakra-ui/accordion" "2.1.6"
+    "@chakra-ui/alert" "2.0.15"
+    "@chakra-ui/avatar" "2.2.2"
+    "@chakra-ui/breadcrumb" "2.1.2"
+    "@chakra-ui/button" "2.0.14"
+    "@chakra-ui/card" "2.1.4"
+    "@chakra-ui/checkbox" "2.2.8"
+    "@chakra-ui/close-button" "2.0.15"
+    "@chakra-ui/control-box" "2.0.12"
+    "@chakra-ui/counter" "2.0.12"
+    "@chakra-ui/css-reset" "2.0.11"
+    "@chakra-ui/editable" "2.0.17"
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/hooks" "2.1.4"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/image" "2.0.13"
+    "@chakra-ui/input" "2.0.17"
+    "@chakra-ui/layout" "2.1.13"
+    "@chakra-ui/live-region" "2.0.12"
+    "@chakra-ui/media-query" "3.2.9"
+    "@chakra-ui/menu" "2.1.6"
+    "@chakra-ui/modal" "2.2.7"
+    "@chakra-ui/number-input" "2.0.16"
+    "@chakra-ui/pin-input" "2.0.17"
+    "@chakra-ui/popover" "2.1.6"
+    "@chakra-ui/popper" "3.0.11"
+    "@chakra-ui/portal" "2.0.13"
+    "@chakra-ui/progress" "2.1.3"
+    "@chakra-ui/provider" "2.0.29"
+    "@chakra-ui/radio" "2.0.17"
+    "@chakra-ui/react-env" "2.0.12"
+    "@chakra-ui/select" "2.0.16"
+    "@chakra-ui/skeleton" "2.0.21"
+    "@chakra-ui/slider" "2.0.18"
+    "@chakra-ui/spinner" "2.0.12"
+    "@chakra-ui/stat" "2.0.15"
+    "@chakra-ui/styled-system" "2.5.1"
+    "@chakra-ui/switch" "2.0.20"
+    "@chakra-ui/system" "2.3.8"
+    "@chakra-ui/table" "2.0.14"
+    "@chakra-ui/tabs" "2.1.6"
+    "@chakra-ui/tag" "2.0.15"
+    "@chakra-ui/textarea" "2.0.16"
+    "@chakra-ui/theme" "2.2.4"
+    "@chakra-ui/theme-utils" "2.0.8"
+    "@chakra-ui/toast" "4.0.9"
+    "@chakra-ui/tooltip" "2.2.4"
+    "@chakra-ui/transition" "2.0.13"
+    "@chakra-ui/utils" "2.0.14"
+    "@chakra-ui/visually-hidden" "2.0.14"
+
+"@chakra-ui/select@2.0.16":
+  version "2.0.16"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.0.16.tgz#45a51a3227806b48f1cc4900cb666890f3ec91cb"
+  integrity sha512-ByZn/N8D5PzWhZr/WQAonvjSxyIVyct7YYuQQfpgPDsNEFrBt9sHo57OySwXyXXopcECMr1FV4+5HBhvtKZRbg==
+  dependencies:
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/shared-utils@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/shared-utils/-/shared-utils-2.0.4.tgz#8661f2b48dd93d04151b10a894a4290c9d9a080c"
+  integrity sha512-JGWr+BBj3PXGZQ2gxbKSD1wYjESbYsZjkCeE2nevyVk4rN3amV1wQzCnBAhsuJktMaZD6KC/lteo9ou9QUDzpA==
+
+"@chakra-ui/skeleton@2.0.21":
+  version "2.0.21"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.0.21.tgz#697bb66b9e7362f9f252717babc50c916903cc7b"
+  integrity sha512-ztHfV/6Mwl1Wl8H8fkAszMHnyobNZ4SjVD/rImBlKfqSh2VW8jzSwzqN77Oi6iZ7fsqdPN7w2QWS5EAtsUxTVw==
+  dependencies:
+    "@chakra-ui/media-query" "3.2.9"
+    "@chakra-ui/react-use-previous" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/slider@2.0.18":
+  version "2.0.18"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.0.18.tgz#0f4847298698bb0c5888add7f1bacec1d831e486"
+  integrity sha512-wfkW9Xe3WVK1yUY0ELAPVLghknxqzPjqidQgbiMSNlKxTs70sFuACsbbwMV+LMcE+2aUYOGOaqTFI8nPfVdbOw==
+  dependencies:
+    "@chakra-ui/number-utils" "2.0.6"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-callback-ref" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-latest-ref" "2.0.4"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-pan-event" "2.0.8"
+    "@chakra-ui/react-use-size" "2.0.7"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+
+"@chakra-ui/spinner@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.0.12.tgz#275ba21dd2b4be29ecf31c64581167ac75f3b943"
+  integrity sha512-c9R0k7RUgff5g79Q5kX1mE4lsXqLKIskIbPksL7Qm3Zw/ZbDHyNILFFltPLt7350rC9mGzqzEZbizAFlksbdLw==
+  dependencies:
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/stat@2.0.15":
+  version "2.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.0.15.tgz#05728c586c2a31cb7b2306658cea9a074d83a239"
+  integrity sha512-qUbG+Nx4RHd/l95VeQ0MRKoVrMdyCp9LmFeg/klRCxKJ5Qw0Ngdn8zN695Xu2z6jspp2nGWBuQ2Dnla80BuMCQ==
+  dependencies:
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/styled-system@2.5.1":
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.5.1.tgz#d76f0898d5036353947bc83afb2e1c3cad3d374a"
+  integrity sha512-HhaXR/r5eGlC7vkoOWQ31yZEj+Aq+kFee7ZZb0fBRGKQichn06S9Ugr8CsFyzb+jNexHdtBlIcTBm0ufJ8HsFA==
+  dependencies:
+    "@chakra-ui/shared-utils" "2.0.4"
+    csstype "^3.0.11"
+    lodash.mergewith "4.6.2"
+
+"@chakra-ui/switch@2.0.20":
+  version "2.0.20"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.0.20.tgz#288815a3cae0159bd672cbf61198b9ba7a5fe699"
+  integrity sha512-RRSqI+WGDSNt4/loYPWjpymVnzVggZWKGoBFGd7UH9Ft3t/0O2O8VQrJFr6lhXMmw+fVCU7q4mR2KagrfXvQhg==
+  dependencies:
+    "@chakra-ui/checkbox" "2.2.8"
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/system@2.3.8":
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.3.8.tgz#7bf5b21e713ee0f62e5c65f337b702cc6beecbe1"
+  integrity sha512-ZCC54MahWIt5nCw9LQDFK4hZRefF6QTxVnPS9Sr3lRlYNzE15/YyzCq+Yb97/ApmQSUmIsnT3uxr1G+OwmuHAA==
+  dependencies:
+    "@chakra-ui/color-mode" "2.1.11"
+    "@chakra-ui/object-utils" "2.0.7"
+    "@chakra-ui/react-utils" "2.0.11"
+    "@chakra-ui/styled-system" "2.5.1"
+    "@chakra-ui/theme-utils" "2.0.8"
+    "@chakra-ui/utils" "2.0.14"
     react-fast-compare "3.2.0"
 
-"@chakra-ui/table@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.0.4.tgz#d388b48e68a8191ef21a46c70752baedff6a99e4"
-  integrity sha512-Y+YddfpCbmT5D/QMdqM30zWQzwIif63fOB82TSHL2/OMJ6w4Y3fbDtVOLj1MFnTjCOi774nv15/3vHELioOSwA==
+"@chakra-ui/table@2.0.14":
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.0.14.tgz#f2d6a4e66e1c07ffa850050bc7ff15e7ea114bbd"
+  integrity sha512-tiRr//5GfFnpCz4PyVgEIWBMsePAM1SWfvAJJYG2wBXNULYB/5nYmch+cJzPqZtdgL2/RuKIJINAmqVZQVddrw==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/tabs@2.0.6":
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-2.0.6.tgz#edcf2c9521fb30a26abbec5740e00b9cd042135e"
-  integrity sha512-N9vHRJ1fW27sa+SFgPVeiOoTpmbtEQEC4EHeoBzfw9ZaJl5E3YL4FBWCRVoIVY+/HgukmJGvHpCG7DDrzfBfEA==
+"@chakra-ui/tabs@2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-2.1.6.tgz#f812b4f25c1a3a193e73c51da822b501d0b6e32f"
+  integrity sha512-9y+ZBRSBFOvsMY8R+nmlWXqMNwokttA1cwcnjp9djsXuN+vabN8nzPcdKsoBbYUhZJp01k2Qgg3jZ46KiD9n7w==
   dependencies:
-    "@chakra-ui/clickable" "2.0.4"
-    "@chakra-ui/descendant" "3.0.3"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/clickable" "2.0.12"
+    "@chakra-ui/descendant" "3.0.12"
+    "@chakra-ui/lazy-utils" "2.0.4"
+    "@chakra-ui/react-children-utils" "2.0.5"
+    "@chakra-ui/react-context" "2.0.6"
+    "@chakra-ui/react-use-controllable-state" "2.0.7"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/react-use-safe-layout-effect" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/tag@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-2.0.4.tgz#6a43ad942d8c60fd930a786b3e35bb8c84059f5d"
-  integrity sha512-OF6jpaDDlgQqN58B3K+pIEbWLRWXDm3LuqzM6Z/YIYL9numMIpxO0mZgyFsJQWvC4ldpGTf3olAvI/3KEHxSvA==
+"@chakra-ui/tag@2.0.15":
+  version "2.0.15"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-2.0.15.tgz#f50861f33b6561117daa4ec8235fba77a196a9fc"
+  integrity sha512-CwL4jjFELk/7ijckxsaTTv3RKV+fQLvXPabLtr4oBktkz6tDfBLd+hhfPdCHdGAOLhyKY799EDd3ms0dvejTyQ==
   dependencies:
-    "@chakra-ui/icon" "3.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/icon" "3.0.15"
+    "@chakra-ui/react-context" "2.0.6"
 
-"@chakra-ui/textarea@2.0.5":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.0.5.tgz#0f8f0688e398f6c30b29e6ac36f0d8df907e0af6"
-  integrity sha512-Pwh6F0Ev1RjdyqN71VNv8LSDwaL68U27KNSCsPWry5NaRvseb0ncS5/wuvBVRCsBy2Kcc2BJxIBbNR4oxAQ1Fg==
+"@chakra-ui/textarea@2.0.16":
+  version "2.0.16"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.0.16.tgz#7b8c77b94e3f64bf4af4ca298dd2921bd9d4827b"
+  integrity sha512-2M1Zh2+hCppyDM3RCM4ZZ6YSGE1Xn1qwZ286EWB+RD5bpSfFFoewPVcEv2jjxxjdHWqkNVoo4Egf81ev+Oce+g==
   dependencies:
-    "@chakra-ui/form-control" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/form-control" "2.0.15"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/theme-tools@2.0.5", "@chakra-ui/theme-tools@^2.0.2":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.0.5.tgz#16a77da55f9933542d74fa0a5fc7bf7dd4f362f7"
-  integrity sha512-JuFKYWfVnZKnX95sM05a/0NpTzwciPTAZXfAJYwDOiy4EEqXUgEQpkHxOjC929wpzIVb3Q2Wa/HvS1v8C2f+mw==
+"@chakra-ui/theme-tools@2.0.16":
+  version "2.0.16"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.0.16.tgz#17caae14a61f93759f072b16c7346489eb8be643"
+  integrity sha512-B/LD+2LNDeHYd/LVCHIJqckVZfhrycTUpNbhRVAiDRaS0AAcsPxKas7liTFkkMkM076YjiHlcla3KpVX+E9tzg==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
-    "@ctrl/tinycolor" "^3.4.0"
+    "@chakra-ui/anatomy" "2.1.1"
+    "@chakra-ui/shared-utils" "2.0.4"
+    color2k "^2.0.0"
 
-"@chakra-ui/theme@2.1.3":
-  version "2.1.3"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-2.1.3.tgz#3542465761ffde5a3eba2cf2234f173b518f5dd1"
-  integrity sha512-YRuw6D1xR2r2d09PVC4o7iNhxekqTkwq0P38Vn9UyLURXKnguYwkPXcJF3+ZcIPypqaROPPaOGOdtpwO7A/CjQ==
+"@chakra-ui/theme-utils@2.0.8":
+  version "2.0.8"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/theme-utils/-/theme-utils-2.0.8.tgz#e0eb3f2fb888f11e060ad42a4b14f0ecea3f2f4d"
+  integrity sha512-E4GT1tT5JTwsxRCgopdkLWx6oxd1lrI7DBLiwW0WxvtPmHfy5I9CB4CVnYBNHQZNXiJZyUQpCwKyGg2npGxv5Q==
   dependencies:
-    "@chakra-ui/anatomy" "2.0.1"
-    "@chakra-ui/theme-tools" "2.0.5"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/styled-system" "2.5.1"
+    "@chakra-ui/theme" "2.2.4"
+    lodash.mergewith "4.6.2"
 
-"@chakra-ui/toast@3.0.2":
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-3.0.2.tgz#1d6883abdab9307d2b0ca34d34bd65453d623058"
-  integrity sha512-MGUwgNMDevys6EVoEJDMs7S+5pAefx8ikdtMzOXB21RPs6J46EaOcmtZDIgxglUPTEF1QX2NzBFA+ObS2oklWQ==
+"@chakra-ui/theme@2.2.4":
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-2.2.4.tgz#69948ebf19ae1387b9e5022aca1e58c881658b77"
+  integrity sha512-zo1FBfkJBsvpOGGByRB4aEvekdeT/9BB7Lz3rAluKkC+Wo8yce1tTSlvPMpf2f4lsEI8zVid5ATQ6u3+kIFg4w==
   dependencies:
-    "@chakra-ui/alert" "2.0.4"
-    "@chakra-ui/close-button" "2.0.4"
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/portal" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/theme" "2.1.3"
-    "@chakra-ui/transition" "2.0.4"
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/anatomy" "2.1.1"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/theme-tools" "2.0.16"
 
-"@chakra-ui/tooltip@2.0.5":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.0.5.tgz#8021a6b2323bb94f2a4f8ce1c1ba648f355645dc"
-  integrity sha512-I2+sT0+jAl98ggbUikKk/5mZsLeMjQYeGF7P5OwVzD8NWjtLwjJC75bmkw7c53V5FQKGB1z76T13asWfy5vmdg==
+"@chakra-ui/toast@4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-4.0.9.tgz#814f8d2591572fa14810fffbe161dcfa0bbdd300"
+  integrity sha512-a34dL37sgzJ5q7K4pxdIanvETk4wzGFGSS/DvnpcJz4lLUe2h6wPfaI2+0HBYiAs1P8BeXYu9wwOohrOI49rTA==
   dependencies:
-    "@chakra-ui/hooks" "2.0.4"
-    "@chakra-ui/popper" "3.0.2"
-    "@chakra-ui/portal" "2.0.4"
-    "@chakra-ui/react-utils" "2.0.1"
-    "@chakra-ui/utils" "2.0.4"
-    "@chakra-ui/visually-hidden" "2.0.4"
+    "@chakra-ui/alert" "2.0.15"
+    "@chakra-ui/close-button" "2.0.15"
+    "@chakra-ui/portal" "2.0.13"
+    "@chakra-ui/react-use-timeout" "2.0.4"
+    "@chakra-ui/react-use-update-effect" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
+    "@chakra-ui/styled-system" "2.5.1"
+    "@chakra-ui/theme" "2.2.4"
 
-"@chakra-ui/transition@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.0.4.tgz#03fcdf47760f1f58964d66adc78c8daeb6765ab1"
-  integrity sha512-k9/01frV/Z6iEt68lfz8PLYiPoWC9N99Uo6XYQjw17kcguVxJoliq35sUharVcQJneVi5bmKTp9974/3drFDBw==
+"@chakra-ui/tooltip@2.2.4":
+  version "2.2.4"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.2.4.tgz#41ac464d99da49c4a6217c02793f063c6d24152d"
+  integrity sha512-KUEsSjIwTyFvdixWg3jVUcpaiAfMddRxiuxnsKcFVv8H5dZF75tstaq8iAHY+pueh6CRmIvO2Oh7XWiAYA/LJA==
   dependencies:
-    "@chakra-ui/utils" "2.0.4"
+    "@chakra-ui/popper" "3.0.11"
+    "@chakra-ui/portal" "2.0.13"
+    "@chakra-ui/react-types" "2.0.6"
+    "@chakra-ui/react-use-disclosure" "2.0.7"
+    "@chakra-ui/react-use-event-listener" "2.0.6"
+    "@chakra-ui/react-use-merge-refs" "2.0.6"
+    "@chakra-ui/shared-utils" "2.0.4"
 
-"@chakra-ui/utils@2.0.4", "@chakra-ui/utils@^2.0.2":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-2.0.4.tgz#dbed9f173edda0eb54947d98754b834729ae22bc"
-  integrity sha512-pr5qFTrhCja1iQTajOr2WSvb+f4lpnLnnxWOSYOuIv7k8LBEtee4LpTs0jzBBB/vycuo6ppKdXyj7db9xTqZfA==
+"@chakra-ui/transition@2.0.13":
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.0.13.tgz#54da88debdd528c2d41f04809e3b9448106e274f"
+  integrity sha512-vpzK5HN91eDLkBEdaO6GTCJOYgJYHlmxCAym/tScBuWM2ALZ4mWu57qWgPptgGv+IpMfuvL1t+IVqPgyWwEQFw==
+  dependencies:
+    "@chakra-ui/shared-utils" "2.0.4"
+
+"@chakra-ui/utils@2.0.14":
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-2.0.14.tgz#b6776c7a020ea46ed88a8048dfa2b512a1fe95f7"
+  integrity sha512-vYxtAUPY09Ex2Ae2ZvQKA1d2+lMKq/wUaRiqpwmeLfutEQuPQZc3qzQcAIMRQx3wLgXr9BUFDtHgBoOz0XKtZw==
   dependencies:
     "@types/lodash.mergewith" "4.6.6"
     css-box-model "1.2.1"
-    framesync "5.3.0"
+    framesync "6.1.2"
     lodash.mergewith "4.6.2"
 
-"@chakra-ui/visually-hidden@2.0.4":
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.4.tgz#12ad71c54186048d6884a2a596dfc10fea43c229"
-  integrity sha512-7JVHdMnyvpUnC8EkWtI7tE/NZWoVVHR35KLG/tmCEC4ZzNN7oINTYgQ70ALYKMNM3A2PrXdpbVjeBe4afn8UQQ==
-  dependencies:
-    "@chakra-ui/utils" "2.0.4"
+"@chakra-ui/visually-hidden@2.0.14":
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.14.tgz#c54feca28e8110a1d92ba2c718272931d0e181e2"
+  integrity sha512-/evqTuCeN3laukL1BPZO8HTzgs+dzq0v6gu/MJFgiSAKGLfInn0/IStKGK2vIluuCtJIgaHVdKcJzr+7sJhd0Q==
 
 "@csstools/normalize.css@*":
   version "12.0.0"
@@ -1721,44 +1954,39 @@
   resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36"
   integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==
 
-"@ctrl/tinycolor@^3.4.0":
-  version "3.4.1"
-  resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
-  integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
-
-"@emotion/babel-plugin@^11.7.1":
-  version "11.9.2"
-  resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95"
-  integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==
+"@emotion/babel-plugin@^11.10.5":
+  version "11.10.5"
+  resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
+  integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==
   dependencies:
-    "@babel/helper-module-imports" "^7.12.13"
-    "@babel/plugin-syntax-jsx" "^7.12.13"
-    "@babel/runtime" "^7.13.10"
-    "@emotion/hash" "^0.8.0"
-    "@emotion/memoize" "^0.7.5"
-    "@emotion/serialize" "^1.0.2"
-    babel-plugin-macros "^2.6.1"
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/plugin-syntax-jsx" "^7.17.12"
+    "@babel/runtime" "^7.18.3"
+    "@emotion/hash" "^0.9.0"
+    "@emotion/memoize" "^0.8.0"
+    "@emotion/serialize" "^1.1.1"
+    babel-plugin-macros "^3.1.0"
     convert-source-map "^1.5.0"
     escape-string-regexp "^4.0.0"
     find-root "^1.1.0"
     source-map "^0.5.7"
-    stylis "4.0.13"
+    stylis "4.1.3"
 
-"@emotion/cache@^11.9.3":
-  version "11.9.3"
-  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.9.3.tgz#96638449f6929fd18062cfe04d79b29b44c0d6cb"
-  integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==
+"@emotion/cache@^11.10.5":
+  version "11.10.5"
+  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12"
+  integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==
   dependencies:
-    "@emotion/memoize" "^0.7.4"
-    "@emotion/sheet" "^1.1.1"
-    "@emotion/utils" "^1.0.0"
-    "@emotion/weak-memoize" "^0.2.5"
-    stylis "4.0.13"
+    "@emotion/memoize" "^0.8.0"
+    "@emotion/sheet" "^1.2.1"
+    "@emotion/utils" "^1.2.0"
+    "@emotion/weak-memoize" "^0.3.0"
+    stylis "4.1.3"
 
-"@emotion/hash@^0.8.0":
-  version "0.8.0"
-  resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
-  integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+"@emotion/hash@^0.9.0":
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7"
+  integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
 
 "@emotion/is-prop-valid@^0.8.2":
   version "0.8.8"
@@ -1767,77 +1995,84 @@
   dependencies:
     "@emotion/memoize" "0.7.4"
 
-"@emotion/is-prop-valid@^1.1.3":
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a"
-  integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==
+"@emotion/is-prop-valid@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83"
+  integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
   dependencies:
-    "@emotion/memoize" "^0.7.4"
+    "@emotion/memoize" "^0.8.0"
 
 "@emotion/memoize@0.7.4":
   version "0.7.4"
   resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
   integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
 
-"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
-  version "0.7.5"
-  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
-  integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+"@emotion/memoize@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
+  integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
 
-"@emotion/react@^11":
-  version "11.9.3"
-  resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.3.tgz#f4f4f34444f6654a2e550f5dab4f2d360c101df9"
-  integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==
+"@emotion/react@^11.10.5":
+  version "11.10.5"
+  resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d"
+  integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==
   dependencies:
-    "@babel/runtime" "^7.13.10"
-    "@emotion/babel-plugin" "^11.7.1"
-    "@emotion/cache" "^11.9.3"
-    "@emotion/serialize" "^1.0.4"
-    "@emotion/utils" "^1.1.0"
-    "@emotion/weak-memoize" "^0.2.5"
+    "@babel/runtime" "^7.18.3"
+    "@emotion/babel-plugin" "^11.10.5"
+    "@emotion/cache" "^11.10.5"
+    "@emotion/serialize" "^1.1.1"
+    "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
+    "@emotion/utils" "^1.2.0"
+    "@emotion/weak-memoize" "^0.3.0"
     hoist-non-react-statics "^3.3.1"
 
-"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.4":
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.4.tgz#ff31fd11bb07999611199c2229e152faadc21a3c"
-  integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==
+"@emotion/serialize@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
+  integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
   dependencies:
-    "@emotion/hash" "^0.8.0"
-    "@emotion/memoize" "^0.7.4"
-    "@emotion/unitless" "^0.7.5"
-    "@emotion/utils" "^1.0.0"
+    "@emotion/hash" "^0.9.0"
+    "@emotion/memoize" "^0.8.0"
+    "@emotion/unitless" "^0.8.0"
+    "@emotion/utils" "^1.2.0"
     csstype "^3.0.2"
 
-"@emotion/sheet@^1.1.1":
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.1.tgz#015756e2a9a3c7c5f11d8ec22966a8dbfbfac787"
-  integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA==
+"@emotion/sheet@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
+  integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
 
-"@emotion/styled@^11.9.3":
-  version "11.9.3"
-  resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.9.3.tgz#47f0c71137fec7c57035bf3659b52fb536792340"
-  integrity sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA==
+"@emotion/styled@^11.10.5":
+  version "11.10.5"
+  resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.5.tgz#1fe7bf941b0909802cb826457e362444e7e96a79"
+  integrity sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==
   dependencies:
-    "@babel/runtime" "^7.13.10"
-    "@emotion/babel-plugin" "^11.7.1"
-    "@emotion/is-prop-valid" "^1.1.3"
-    "@emotion/serialize" "^1.0.4"
-    "@emotion/utils" "^1.1.0"
+    "@babel/runtime" "^7.18.3"
+    "@emotion/babel-plugin" "^11.10.5"
+    "@emotion/is-prop-valid" "^1.2.0"
+    "@emotion/serialize" "^1.1.1"
+    "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
+    "@emotion/utils" "^1.2.0"
 
-"@emotion/unitless@^0.7.5":
-  version "0.7.5"
-  resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
-  integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+"@emotion/unitless@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
+  integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
 
-"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf"
-  integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df"
+  integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==
 
-"@emotion/weak-memoize@^0.2.5":
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
-  integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+"@emotion/utils@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561"
+  integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
+
+"@emotion/weak-memoize@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
+  integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
 
 "@eslint/eslintrc@^1.3.0":
   version "1.3.0"
@@ -2227,56 +2462,56 @@
   resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
   integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
 
-"@motionone/animation@^10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.12.0.tgz#bca8968d3d9c779f8a548678f24206bd36cc60b6"
-  integrity sha512-SCWkVjMChQwA4Cnt1pdmhCi0OC4cAR+rqsskNEqmbgfG59zmn50TfOP6vgqjkYbaSZXXLeEb03Mez362jIEHRg==
+"@motionone/animation@^10.15.1":
+  version "10.15.1"
+  resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807"
+  integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==
   dependencies:
-    "@motionone/easing" "^10.12.0"
-    "@motionone/types" "^10.12.0"
-    "@motionone/utils" "^10.12.0"
+    "@motionone/easing" "^10.15.1"
+    "@motionone/types" "^10.15.1"
+    "@motionone/utils" "^10.15.1"
     tslib "^2.3.1"
 
-"@motionone/dom@10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed"
-  integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==
+"@motionone/dom@^10.15.3":
+  version "10.15.5"
+  resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.15.5.tgz#4af18f8136d85c2fc997cac98121c969f6731802"
+  integrity sha512-Xc5avlgyh3xukU9tydh9+8mB8+2zAq+WlLsC3eEIp7Ax7DnXgY7Bj/iv0a4X2R9z9ZFZiaXK3BO0xMYHKbAAdA==
   dependencies:
-    "@motionone/animation" "^10.12.0"
-    "@motionone/generators" "^10.12.0"
-    "@motionone/types" "^10.12.0"
-    "@motionone/utils" "^10.12.0"
+    "@motionone/animation" "^10.15.1"
+    "@motionone/generators" "^10.15.1"
+    "@motionone/types" "^10.15.1"
+    "@motionone/utils" "^10.15.1"
     hey-listen "^1.0.8"
     tslib "^2.3.1"
 
-"@motionone/easing@^10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.12.0.tgz#cc10a00ed5ec9a7a05daf4ef985fcd14840b9a50"
-  integrity sha512-kdwcn1ja/0//BBHRElX3In1yfqMEhqUoL3G0njDan8R+gfPy3DanyuCtio4VruHQ1m3XN3LcrqavbClzcGo7IA==
+"@motionone/easing@^10.15.1":
+  version "10.15.1"
+  resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693"
+  integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==
   dependencies:
-    "@motionone/utils" "^10.12.0"
+    "@motionone/utils" "^10.15.1"
     tslib "^2.3.1"
 
-"@motionone/generators@^10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.12.0.tgz#2a175c47c741ed3864dd834e6c98efa68798a866"
-  integrity sha512-QM8/ndOve80HLXImChwW8ogrEM/8m9xzZEl2Ci2ep1uGLAQ+ADiwzKtl11inGESrxiFDrUdD12WXacCn+y172Q==
+"@motionone/generators@^10.15.1":
+  version "10.15.1"
+  resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c"
+  integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==
   dependencies:
-    "@motionone/types" "^10.12.0"
-    "@motionone/utils" "^10.12.0"
+    "@motionone/types" "^10.15.1"
+    "@motionone/utils" "^10.15.1"
     tslib "^2.3.1"
 
-"@motionone/types@^10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.12.0.tgz#06ede843d4c2990edbd22ecf8d5568d1fcd1f105"
-  integrity sha512-D9k7ijkAT6JJOCMUVn9IgJqWolp7N3oBbWRQTIRGGO41Bmr/JzLv4GzAb00PvkYAzZX+BpnSTKqXI19zrSjC5w==
+"@motionone/types@^10.15.1":
+  version "10.15.1"
+  resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb"
+  integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==
 
-"@motionone/utils@^10.12.0":
-  version "10.12.0"
-  resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.12.0.tgz#e8432a96bb7f91148987d0baaab6653ae727f9ee"
-  integrity sha512-2g3tCqYYwb/tgzCDRbILbD5edXJB45HV51NbnhwKVOOl0PhFraRDtehzLKo9wLHdaTnO/IjVn6cHQsw6RjdolA==
+"@motionone/utils@^10.15.1":
+  version "10.15.1"
+  resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438"
+  integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==
   dependencies:
-    "@motionone/types" "^10.12.0"
+    "@motionone/types" "^10.15.1"
     hey-listen "^1.0.8"
     tslib "^2.3.1"
 
@@ -3203,10 +3438,15 @@
   resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
   integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
 
-"@zag-js/focus-visible@0.1.0":
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-0.1.0.tgz#9777bbaff8316d0b3a14a9095631e1494f69dbc7"
-  integrity sha512-PeaBcTmdZWcFf7n1aM+oiOdZc+sy14qi0emPIeUuGMTjbP0xLGrZu43kdpHnWSXy7/r4Ubp/vlg50MCV8+9Isg==
+"@zag-js/element-size@0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/element-size/-/element-size-0.3.0.tgz#1c0ab23c9ada453f5778c4baf1eed46218dc9e85"
+  integrity sha512-5/hEI+0c6ZNCx6KHlOS5/WeHsd6+I7gk7Y/b/zATp4Rp3tHirs/tu1frq+iy5BmfaG9hbQtfHfUJTjOcI5jnoQ==
+
+"@zag-js/focus-visible@0.2.1":
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-0.2.1.tgz#bf4f1009f4fd35a9728dfaa9214d8cb318fe8b1e"
+  integrity sha512-19uTjoZGP4/Ax7kSNhhay9JA83BirKzpqLkeEAilrpdI1hE5xuq6q+tzJOsrMOOqJrm7LkmZp5lbsTQzvK2pYg==
 
 abab@^2.0.3, abab@^2.0.5:
   version "2.0.6"
@@ -3656,15 +3896,6 @@ babel-plugin-jest-hoist@^27.5.1:
     "@types/babel__core" "^7.0.0"
     "@types/babel__traverse" "^7.0.6"
 
-babel-plugin-macros@^2.6.1:
-  version "2.8.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
-  integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
-  dependencies:
-    "@babel/runtime" "^7.7.2"
-    cosmiconfig "^6.0.0"
-    resolve "^1.12.0"
-
 babel-plugin-macros@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
@@ -4167,6 +4398,11 @@ color-support@^1.1.2, color-support@^1.1.3:
   resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
   integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
 
+color2k@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.1.tgz#bea59670b323265cc13a745f239c6bd6a89d9a89"
+  integrity sha512-iCg+xrEqtYISsSJZN1z44fyhv4EfX8lSkcDhodt6VnMf1+iMwZxAtmGXchTCeMUnTbXunGvUVK6E3skkApPnZw==
+
 colord@^2.9.1:
   version "2.9.2"
   resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
@@ -5746,33 +5982,23 @@ fraction.js@^4.2.0:
   resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
   integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
 
-framer-motion@^6:
-  version "6.5.1"
-  resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7"
-  integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==
+framer-motion@^8.4.2:
+  version "8.4.2"
+  resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-8.4.2.tgz#06f4ad469d8a697cde2441c8b4009810420025db"
+  integrity sha512-AdYwbEZZ+6Z748A8JdNtwH7YR24HvXr/hJHL06ofipMyRchrf7Mzvk69zM24+rAm3SC3DCJK0WdbhpOLzroO+w==
   dependencies:
-    "@motionone/dom" "10.12.0"
-    framesync "6.0.1"
+    "@motionone/dom" "^10.15.3"
     hey-listen "^1.0.8"
-    popmotion "11.0.3"
-    style-value-types "5.0.0"
-    tslib "^2.1.0"
+    tslib "^2.4.0"
   optionalDependencies:
     "@emotion/is-prop-valid" "^0.8.2"
 
-framesync@5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/framesync/-/framesync-5.3.0.tgz#0ecfc955e8f5a6ddc8fdb0cc024070947e1a0d9b"
-  integrity sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA==
+framesync@6.1.2:
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.1.2.tgz#755eff2fb5b8f3b4d2b266dd18121b300aefea27"
+  integrity sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==
   dependencies:
-    tslib "^2.1.0"
-
-framesync@6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20"
-  integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==
-  dependencies:
-    tslib "^2.1.0"
+    tslib "2.4.0"
 
 fresh@0.5.2:
   version "0.5.2"
@@ -8729,16 +8955,6 @@ pkg-up@^3.1.0:
   dependencies:
     find-up "^3.0.0"
 
-popmotion@11.0.3:
-  version "11.0.3"
-  resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9"
-  integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==
-  dependencies:
-    framesync "6.0.1"
-    hey-listen "^1.0.8"
-    style-value-types "5.0.0"
-    tslib "^2.1.0"
-
 postcss-attribute-case-insensitive@^5.0.1:
   version "5.0.2"
   resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"
@@ -10698,14 +10914,6 @@ style-to-object@^0.3.0:
   dependencies:
     inline-style-parser "0.1.1"
 
-style-value-types@5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad"
-  integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==
-  dependencies:
-    hey-listen "^1.0.8"
-    tslib "^2.1.0"
-
 stylehacks@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520"
@@ -10714,10 +10922,10 @@ stylehacks@^5.1.0:
     browserslist "^4.16.6"
     postcss-selector-parser "^6.0.4"
 
-stylis@4.0.13:
-  version "4.0.13"
-  resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
-  integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
+stylis@4.1.3:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
+  integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
 
 supports-color@^5.3.0:
   version "5.5.0"
@@ -11045,6 +11253,11 @@ tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
+tslib@^2.4.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
+  integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+
 tsutils@^3.21.0:
   version "3.21.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -11128,10 +11341,10 @@ typedarray-to-buffer@^3.1.5:
   dependencies:
     is-typedarray "^1.0.0"
 
-typescript@^4.7.4:
-  version "4.7.4"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235"
-  integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
+typescript@^4.9.4:
+  version "4.9.4"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
+  integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
 
 unbox-primitive@^1.0.2:
   version "1.0.2"