diff --git a/.github/workflows/contrib.yaml b/.github/workflows/contrib.yaml index 156aaf8d861c8..8b3d189002b96 100644 --- a/.github/workflows/contrib.yaml +++ b/.github/workflows/contrib.yaml @@ -36,7 +36,7 @@ jobs: steps: - name: cla if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target' - uses: contributor-assistant/github-action@v2.6.0 + uses: contributor-assistant/github-action@v2.6.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret diff --git a/Makefile b/Makefile index c815d332bf8c6..dfa9779b9af11 100644 --- a/Makefile +++ b/Makefile @@ -488,6 +488,7 @@ gen: \ agent/proto/agent.pb.go \ provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ + vpn/vpn.pb.go \ coderd/database/dump.sql \ $(DB_GEN_FILES) \ site/src/api/typesGenerated.ts \ @@ -517,6 +518,7 @@ gen/mark-fresh: agent/proto/agent.pb.go \ provisionersdk/proto/provisioner.pb.go \ provisionerd/proto/provisionerd.pb.go \ + vpn/vpn.pb.go \ coderd/database/dump.sql \ $(DB_GEN_FILES) \ site/src/api/typesGenerated.ts \ @@ -600,6 +602,12 @@ provisionerd/proto/provisionerd.pb.go: provisionerd/proto/provisionerd.proto --go-drpc_opt=paths=source_relative \ ./provisionerd/proto/provisionerd.proto +vpn/vpn.pb.go: vpn/vpn.proto + protoc \ + --go_out=. \ + --go_opt=paths=source_relative \ + ./vpn/vpn.proto + site/src/api/typesGenerated.ts: $(wildcard scripts/apitypings/*) $(shell find ./codersdk $(FIND_EXCLUSIONS) -type f -name '*.go') go run ./scripts/apitypings/ > $@ ./scripts/pnpm_install.sh diff --git a/buildinfo/buildinfo.go b/buildinfo/buildinfo.go index e1fd90fe2fadb..b23c4890955bc 100644 --- a/buildinfo/buildinfo.go +++ b/buildinfo/buildinfo.go @@ -24,6 +24,9 @@ var ( // Updated by buildinfo_slim.go on start. slim bool + // Updated by buildinfo_site.go on start. + site bool + // Injected with ldflags at build, see scripts/build_go.sh tag string agpl string // either "true" or "false", ldflags does not support bools @@ -95,6 +98,11 @@ func IsSlim() bool { return slim } +// HasSite returns true if the frontend is embedded in the build. +func HasSite() bool { + return site +} + // IsAGPL returns true if this is an AGPL build. func IsAGPL() bool { return strings.Contains(agpl, "t") diff --git a/buildinfo/buildinfo_site.go b/buildinfo/buildinfo_site.go new file mode 100644 index 0000000000000..d4c4ea9497142 --- /dev/null +++ b/buildinfo/buildinfo_site.go @@ -0,0 +1,7 @@ +//go:build embed + +package buildinfo + +func init() { + site = true +} diff --git a/cli/notifications_test.go b/cli/notifications_test.go index 9d7ff8a37abc3..9d775c6f5842b 100644 --- a/cli/notifications_test.go +++ b/cli/notifications_test.go @@ -20,7 +20,6 @@ func createOpts(t *testing.T) *coderdtest.Options { t.Helper() dt := coderdtest.DeploymentValues(t) - dt.Experiments = []string{string(codersdk.ExperimentNotifications)} return &coderdtest.Options{ DeploymentValues: dt, } diff --git a/cli/root.go b/cli/root.go index 2b6cc2c19c8ec..5d9ed5590f3a3 100644 --- a/cli/root.go +++ b/cli/root.go @@ -411,7 +411,7 @@ func (r *RootCmd) Command(subcommands []*serpent.Command) (*serpent.Command, err { Flag: varNoOpen, Env: "CODER_NO_OPEN", - Description: "Suppress opening the browser after logging in.", + Description: "Suppress opening the browser when logging in, or starting the server.", Value: serpent.BoolOf(&r.noOpen), Hidden: true, Group: globalGroup, diff --git a/cli/server.go b/cli/server.go index 561c1bac16375..5adb44c3c0a7d 100644 --- a/cli/server.go +++ b/cli/server.go @@ -56,15 +56,16 @@ import ( "cdr.dev/slog" "cdr.dev/slog/sloggers/sloghuman" - "github.com/coder/coder/v2/coderd/entitlements" - "github.com/coder/coder/v2/coderd/notifications/reports" - "github.com/coder/coder/v2/coderd/runtimeconfig" "github.com/coder/pretty" "github.com/coder/quartz" "github.com/coder/retry" "github.com/coder/serpent" "github.com/coder/wgtunnel/tunnelsdk" + "github.com/coder/coder/v2/coderd/entitlements" + "github.com/coder/coder/v2/coderd/notifications/reports" + "github.com/coder/coder/v2/coderd/runtimeconfig" + "github.com/coder/coder/v2/buildinfo" "github.com/coder/coder/v2/cli/clilog" "github.com/coder/coder/v2/cli/cliui" @@ -492,7 +493,12 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. BorderForeground(lipgloss.Color("12")). Render(fmt.Sprintf("View the Web UI:\n%s", pretty.Sprint(cliui.DefaultStyles.Hyperlink, accessURL)))) - _ = openURL(inv, accessURL) + if buildinfo.HasSite() { + err = openURL(inv, accessURL) + if err == nil { + cliui.Infof(inv.Stdout, "Opening local browser... You can disable this by passing --no-open.\n") + } + } // Used for zero-trust instance identity with Google Cloud. googleTokenValidator, err := idtoken.NewValidator(ctx, option.WithoutAuthentication()) @@ -679,10 +685,6 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. options.OIDCConfig = oc } - experiments := coderd.ReadExperiments( - options.Logger, options.DeploymentValues.Experiments.Value(), - ) - // We'll read from this channel in the select below that tracks shutdown. If it remains // nil, that case of the select will just never fire, but it's important not to have a // "bare" read on this channel. @@ -946,6 +948,33 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. return xerrors.Errorf("write config url: %w", err) } + // Manage notifications. + cfg := options.DeploymentValues.Notifications + metrics := notifications.NewMetrics(options.PrometheusRegistry) + helpers := templateHelpers(options) + + // The enqueuer is responsible for enqueueing notifications to the given store. + enqueuer, err := notifications.NewStoreEnqueuer(cfg, options.Database, helpers, logger.Named("notifications.enqueuer"), quartz.NewReal()) + if err != nil { + return xerrors.Errorf("failed to instantiate notification store enqueuer: %w", err) + } + options.NotificationsEnqueuer = enqueuer + + // The notification manager is responsible for: + // - creating notifiers and managing their lifecycles (notifiers are responsible for dequeueing/sending notifications) + // - keeping the store updated with status updates + notificationsManager, err := notifications.NewManager(cfg, options.Database, helpers, metrics, logger.Named("notifications.manager")) + if err != nil { + return xerrors.Errorf("failed to instantiate notification manager: %w", err) + } + + // nolint:gocritic // TODO: create own role. + notificationsManager.Run(dbauthz.AsSystemRestricted(ctx)) + + // Run report generator to distribute periodic reports. + notificationReportGenerator := reports.NewReportGenerator(ctx, logger.Named("notifications.report_generator"), options.Database, options.NotificationsEnqueuer, quartz.NewReal()) + defer notificationReportGenerator.Close() + // Since errCh only has one buffered slot, all routines // sending on it must be wrapped in a select/default to // avoid leaving dangling goroutines waiting for the @@ -1002,38 +1031,6 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. options.WorkspaceUsageTracker = tracker defer tracker.Close() - // Manage notifications. - var ( - notificationsManager *notifications.Manager - ) - if experiments.Enabled(codersdk.ExperimentNotifications) { - cfg := options.DeploymentValues.Notifications - metrics := notifications.NewMetrics(options.PrometheusRegistry) - helpers := templateHelpers(options) - - // The enqueuer is responsible for enqueueing notifications to the given store. - enqueuer, err := notifications.NewStoreEnqueuer(cfg, options.Database, helpers, logger.Named("notifications.enqueuer"), quartz.NewReal()) - if err != nil { - return xerrors.Errorf("failed to instantiate notification store enqueuer: %w", err) - } - options.NotificationsEnqueuer = enqueuer - - // The notification manager is responsible for: - // - creating notifiers and managing their lifecycles (notifiers are responsible for dequeueing/sending notifications) - // - keeping the store updated with status updates - notificationsManager, err = notifications.NewManager(cfg, options.Database, helpers, metrics, logger.Named("notifications.manager")) - if err != nil { - return xerrors.Errorf("failed to instantiate notification manager: %w", err) - } - - // nolint:gocritic // TODO: create own role. - notificationsManager.Run(dbauthz.AsSystemRestricted(ctx)) - - // Run report generator to distribute periodic reports. - notificationReportGenerator := reports.NewReportGenerator(ctx, logger.Named("notifications.report_generator"), options.Database, options.NotificationsEnqueuer, quartz.NewReal()) - defer notificationReportGenerator.Close() - } - // Wrap the server in middleware that redirects to the access URL if // the request is not to a local IP. var handler http.Handler = coderAPI.RootHandler @@ -1153,19 +1150,17 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. // Cancel any remaining in-flight requests. shutdownConns() - if notificationsManager != nil { - // Stop the notification manager, which will cause any buffered updates to the store to be flushed. - // If the Stop() call times out, messages that were sent but not reflected as such in the store will have - // their leases expire after a period of time and will be re-queued for sending. - // See CODER_NOTIFICATIONS_LEASE_PERIOD. - cliui.Info(inv.Stdout, "Shutting down notifications manager..."+"\n") - err = shutdownWithTimeout(notificationsManager.Stop, 5*time.Second) - if err != nil { - cliui.Warnf(inv.Stderr, "Notifications manager shutdown took longer than 5s, "+ - "this may result in duplicate notifications being sent: %s\n", err) - } else { - cliui.Info(inv.Stdout, "Gracefully shut down notifications manager\n") - } + // Stop the notification manager, which will cause any buffered updates to the store to be flushed. + // If the Stop() call times out, messages that were sent but not reflected as such in the store will have + // their leases expire after a period of time and will be re-queued for sending. + // See CODER_NOTIFICATIONS_LEASE_PERIOD. + cliui.Info(inv.Stdout, "Shutting down notifications manager..."+"\n") + err = shutdownWithTimeout(notificationsManager.Stop, 5*time.Second) + if err != nil { + cliui.Warnf(inv.Stderr, "Notifications manager shutdown took longer than 5s, "+ + "this may result in duplicate notifications being sent: %s\n", err) + } else { + cliui.Info(inv.Stdout, "Gracefully shut down notifications manager\n") } // Shut down provisioners before waiting for WebSockets diff --git a/cli/testdata/coder_tokens_create_--help.golden b/cli/testdata/coder_tokens_create_--help.golden index f36d80f229783..f887c38acd00c 100644 --- a/cli/testdata/coder_tokens_create_--help.golden +++ b/cli/testdata/coder_tokens_create_--help.golden @@ -12,5 +12,9 @@ OPTIONS: -n, --name string, $CODER_TOKEN_NAME Specify a human-readable name. + -u, --user string, $CODER_TOKEN_USER + Specify the user to create the token for (Only works if logged in user + is admin). + ——— Run `coder --help` for a list of global options. diff --git a/cli/tokens.go b/cli/tokens.go index 4961ac7e3e9b5..30eda97e17623 100644 --- a/cli/tokens.go +++ b/cli/tokens.go @@ -48,6 +48,7 @@ func (r *RootCmd) createToken() *serpent.Command { var ( tokenLifetime time.Duration name string + user string ) client := new(codersdk.Client) cmd := &serpent.Command{ @@ -58,7 +59,11 @@ func (r *RootCmd) createToken() *serpent.Command { r.InitClient(client), ), Handler: func(inv *serpent.Invocation) error { - res, err := client.CreateToken(inv.Context(), codersdk.Me, codersdk.CreateTokenRequest{ + userID := codersdk.Me + if user != "" { + userID = user + } + res, err := client.CreateToken(inv.Context(), userID, codersdk.CreateTokenRequest{ Lifetime: tokenLifetime, TokenName: name, }) @@ -87,6 +92,13 @@ func (r *RootCmd) createToken() *serpent.Command { Description: "Specify a human-readable name.", Value: serpent.StringOf(&name), }, + { + Flag: "user", + FlagShorthand: "u", + Env: "CODER_TOKEN_USER", + Description: "Specify the user to create the token for (Only works if logged in user is admin).", + Value: serpent.StringOf(&user), + }, } return cmd diff --git a/cli/tokens_test.go b/cli/tokens_test.go index fdb062b959a3b..7c024f3ad1a6f 100644 --- a/cli/tokens_test.go +++ b/cli/tokens_test.go @@ -17,13 +17,17 @@ import ( func TestTokens(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil) - _ = coderdtest.CreateFirstUser(t, client) + adminUser := coderdtest.CreateFirstUser(t, client) + + secondUserClient, secondUser := coderdtest.CreateAnotherUser(t, client, adminUser.OrganizationID) + _, thirdUser := coderdtest.CreateAnotherUser(t, client, adminUser.OrganizationID) ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancelFunc() // helpful empty response inv, root := clitest.New(t, "tokens", "ls") + //nolint:gocritic // This should be run as the owner user. clitest.SetupConfig(t, client, root) buf := new(bytes.Buffer) inv.Stdout = buf @@ -42,6 +46,19 @@ func TestTokens(t *testing.T) { require.NotEmpty(t, res) id := res[:10] + // Test creating a token for second user from first user's (admin) session + inv, root = clitest.New(t, "tokens", "create", "--name", "token-two", "--user", secondUser.ID.String()) + clitest.SetupConfig(t, client, root) + buf = new(bytes.Buffer) + inv.Stdout = buf + err = inv.WithContext(ctx).Run() + // Test should succeed in creating token for second user + require.NoError(t, err) + res = buf.String() + require.NotEmpty(t, res) + secondTokenID := res[:10] + + // Test listing tokens from the first user's (admin) session inv, root = clitest.New(t, "tokens", "ls") clitest.SetupConfig(t, client, root) buf = new(bytes.Buffer) @@ -50,11 +67,39 @@ func TestTokens(t *testing.T) { require.NoError(t, err) res = buf.String() require.NotEmpty(t, res) + // Result should only contain the token created for the admin user require.Contains(t, res, "ID") require.Contains(t, res, "EXPIRES AT") require.Contains(t, res, "CREATED AT") require.Contains(t, res, "LAST USED") require.Contains(t, res, id) + // Result should not contain the token created for the second user + require.NotContains(t, res, secondTokenID) + + // Test listing tokens from the second user's session + inv, root = clitest.New(t, "tokens", "ls") + clitest.SetupConfig(t, secondUserClient, root) + buf = new(bytes.Buffer) + inv.Stdout = buf + err = inv.WithContext(ctx).Run() + require.NoError(t, err) + res = buf.String() + require.NotEmpty(t, res) + require.Contains(t, res, "ID") + require.Contains(t, res, "EXPIRES AT") + require.Contains(t, res, "CREATED AT") + require.Contains(t, res, "LAST USED") + // Result should contain the token created for the second user + require.Contains(t, res, secondTokenID) + + // Test creating a token for third user from second user's (non-admin) session + inv, root = clitest.New(t, "tokens", "create", "--name", "token-two", "--user", thirdUser.ID.String()) + clitest.SetupConfig(t, secondUserClient, root) + buf = new(bytes.Buffer) + inv.Stdout = buf + err = inv.WithContext(ctx).Run() + // User (non-admin) should not be able to create a token for another user + require.Error(t, err) inv, root = clitest.New(t, "tokens", "ls", "--output=json") clitest.SetupConfig(t, client, root) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index de2bb1e6b91a9..a185cc66e168c 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9848,6 +9848,41 @@ const docTemplate = `{ } } }, + "codersdk.CryptoKey": { + "type": "object", + "properties": { + "deletes_at": { + "type": "string", + "format": "date-time" + }, + "feature": { + "$ref": "#/definitions/codersdk.CryptoKeyFeature" + }, + "secret": { + "type": "string" + }, + "sequence": { + "type": "integer" + }, + "starts_at": { + "type": "string", + "format": "date-time" + } + } + }, + "codersdk.CryptoKeyFeature": { + "type": "string", + "enum": [ + "workspace_apps", + "oidc_convert", + "tailnet_resume" + ], + "x-enum-varnames": [ + "CryptoKeyFeatureWorkspaceApp", + "CryptoKeyFeatureOIDCConvert", + "CryptoKeyFeatureTailnetResume" + ] + }, "codersdk.CustomRoleRequest": { "type": "object", "properties": { @@ -15980,46 +16015,13 @@ const docTemplate = `{ } } }, - "wsproxysdk.CryptoKey": { - "type": "object", - "properties": { - "deletes_at": { - "type": "string" - }, - "feature": { - "$ref": "#/definitions/wsproxysdk.CryptoKeyFeature" - }, - "secret": { - "type": "string" - }, - "sequence": { - "type": "integer" - }, - "starts_at": { - "type": "string" - } - } - }, - "wsproxysdk.CryptoKeyFeature": { - "type": "string", - "enum": [ - "workspace_apps", - "oidc_convert", - "tailnet_resume" - ], - "x-enum-varnames": [ - "CryptoKeyFeatureWorkspaceApp", - "CryptoKeyFeatureOIDCConvert", - "CryptoKeyFeatureTailnetResume" - ] - }, "wsproxysdk.CryptoKeysResponse": { "type": "object", "properties": { "crypto_keys": { "type": "array", "items": { - "$ref": "#/definitions/wsproxysdk.CryptoKey" + "$ref": "#/definitions/codersdk.CryptoKey" } } } diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index ed640dd50262f..84d1b67760f88 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8768,6 +8768,37 @@ } } }, + "codersdk.CryptoKey": { + "type": "object", + "properties": { + "deletes_at": { + "type": "string", + "format": "date-time" + }, + "feature": { + "$ref": "#/definitions/codersdk.CryptoKeyFeature" + }, + "secret": { + "type": "string" + }, + "sequence": { + "type": "integer" + }, + "starts_at": { + "type": "string", + "format": "date-time" + } + } + }, + "codersdk.CryptoKeyFeature": { + "type": "string", + "enum": ["workspace_apps", "oidc_convert", "tailnet_resume"], + "x-enum-varnames": [ + "CryptoKeyFeatureWorkspaceApp", + "CryptoKeyFeatureOIDCConvert", + "CryptoKeyFeatureTailnetResume" + ] + }, "codersdk.CustomRoleRequest": { "type": "object", "properties": { @@ -14611,42 +14642,13 @@ } } }, - "wsproxysdk.CryptoKey": { - "type": "object", - "properties": { - "deletes_at": { - "type": "string" - }, - "feature": { - "$ref": "#/definitions/wsproxysdk.CryptoKeyFeature" - }, - "secret": { - "type": "string" - }, - "sequence": { - "type": "integer" - }, - "starts_at": { - "type": "string" - } - } - }, - "wsproxysdk.CryptoKeyFeature": { - "type": "string", - "enum": ["workspace_apps", "oidc_convert", "tailnet_resume"], - "x-enum-varnames": [ - "CryptoKeyFeatureWorkspaceApp", - "CryptoKeyFeatureOIDCConvert", - "CryptoKeyFeatureTailnetResume" - ] - }, "wsproxysdk.CryptoKeysResponse": { "type": "object", "properties": { "crypto_keys": { "type": "array", "items": { - "$ref": "#/definitions/wsproxysdk.CryptoKey" + "$ref": "#/definitions/codersdk.CryptoKey" } } } diff --git a/coderd/apikey_test.go b/coderd/apikey_test.go index 29e85d3d00f7d..43e3325339983 100644 --- a/coderd/apikey_test.go +++ b/coderd/apikey_test.go @@ -246,45 +246,6 @@ func TestAPIKey_Deleted(t *testing.T) { require.Equal(t, http.StatusBadRequest, apiErr.StatusCode()) } -func TestAPIKey_Refresh(t *testing.T) { - t.Parallel() - - db, pubsub := dbtestutil.NewDB(t) - client := coderdtest.New(t, &coderdtest.Options{ - Database: db, - Pubsub: pubsub, - }) - owner := coderdtest.CreateFirstUser(t, client) - - ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) - defer cancel() - - token, err := client.CreateAPIKey(ctx, owner.UserID.String()) - require.NoError(t, err) - split := strings.Split(token.Key, "-") - apiKey1, err := db.GetAPIKeyByID(ctx, split[0]) - require.NoError(t, err) - require.Equal(t, int64(604800), apiKey1.LifetimeSeconds, "default should be 7 days") - - err = db.UpdateAPIKeyByID(ctx, database.UpdateAPIKeyByIDParams{ - ID: apiKey1.ID, - LastUsed: apiKey1.LastUsed, - // Cross the no-refresh threshold - ExpiresAt: apiKey1.ExpiresAt.Add(time.Hour * -2), - IPAddress: apiKey1.IPAddress, - }) - require.NoError(t, err, "update login key") - - // Refresh the token - client.SetSessionToken(token.Key) - _, err = client.User(ctx, codersdk.Me) - require.NoError(t, err) - - apiKey2, err := client.APIKeyByID(ctx, owner.UserID.String(), split[0]) - require.NoError(t, err) - require.True(t, apiKey2.ExpiresAt.After(apiKey1.ExpiresAt), "token should have a later expiry") -} - func TestAPIKey_SetDefault(t *testing.T) { t.Parallel() diff --git a/coderd/coderd.go b/coderd/coderd.go index 83a780474825b..cbe008a726636 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -37,11 +37,12 @@ import ( "tailscale.com/util/singleflight" "cdr.dev/slog" + "github.com/coder/quartz" + "github.com/coder/serpent" + "github.com/coder/coder/v2/coderd/entitlements" "github.com/coder/coder/v2/coderd/idpsync" "github.com/coder/coder/v2/coderd/runtimeconfig" - "github.com/coder/quartz" - "github.com/coder/serpent" agentproto "github.com/coder/coder/v2/agent/proto" "github.com/coder/coder/v2/buildinfo" @@ -1257,10 +1258,7 @@ func New(options *Options) *API { }) }) r.Route("/notifications", func(r chi.Router) { - r.Use( - apiKeyMiddleware, - httpmw.RequireExperiment(api.Experiments, codersdk.ExperimentNotifications), - ) + r.Use(apiKeyMiddleware) r.Get("/settings", api.notificationsSettings) r.Put("/settings", api.putNotificationsSettings) r.Route("/templates", func(r chi.Router) { diff --git a/coderd/cryptokeys/dbkeycache.go b/coderd/cryptokeys/dbkeycache.go new file mode 100644 index 0000000000000..4986f1669c4e5 --- /dev/null +++ b/coderd/cryptokeys/dbkeycache.go @@ -0,0 +1,210 @@ +package cryptokeys + +import ( + "context" + "sync" + "time" + + "golang.org/x/xerrors" + + "cdr.dev/slog" + "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/db2sdk" + "github.com/coder/coder/v2/codersdk" + "github.com/coder/quartz" +) + +// never represents the maximum value for a time.Duration. +const never = 1<<63 - 1 + +// DBCache implements Keycache for callers with access to the database. +type DBCache struct { + db database.Store + feature database.CryptoKeyFeature + logger slog.Logger + clock quartz.Clock + + // The following are initialized by NewDBCache. + keysMu sync.RWMutex + keys map[int32]database.CryptoKey + latestKey database.CryptoKey + timer *quartz.Timer + // invalidateAt is the time at which the keys cache should be invalidated. + invalidateAt time.Time + closed bool +} + +type DBCacheOption func(*DBCache) + +func WithDBCacheClock(clock quartz.Clock) DBCacheOption { + return func(d *DBCache) { + d.clock = clock + } +} + +// NewDBCache creates a new DBCache. Close should be called to +// release resources associated with its internal timer. +func NewDBCache(logger slog.Logger, db database.Store, feature database.CryptoKeyFeature, opts ...func(*DBCache)) *DBCache { + d := &DBCache{ + db: db, + feature: feature, + clock: quartz.NewReal(), + logger: logger, + } + + for _, opt := range opts { + opt(d) + } + + d.timer = d.clock.AfterFunc(never, d.clear) + + return d +} + +// Verifying returns the CryptoKey with the given sequence number, provided that +// it is neither deleted nor has breached its deletion date. It should only be +// used for verifying or decrypting payloads. To sign/encrypt call Signing. +func (d *DBCache) Verifying(ctx context.Context, sequence int32) (codersdk.CryptoKey, error) { + d.keysMu.RLock() + if d.closed { + d.keysMu.RUnlock() + return codersdk.CryptoKey{}, ErrClosed + } + + now := d.clock.Now() + key, ok := d.keys[sequence] + d.keysMu.RUnlock() + if ok { + return checkKey(key, now) + } + + d.keysMu.Lock() + defer d.keysMu.Unlock() + + if d.closed { + return codersdk.CryptoKey{}, ErrClosed + } + + key, ok = d.keys[sequence] + if ok { + return checkKey(key, now) + } + + err := d.fetch(ctx) + if err != nil { + return codersdk.CryptoKey{}, xerrors.Errorf("fetch: %w", err) + } + + key, ok = d.keys[sequence] + if !ok { + return codersdk.CryptoKey{}, ErrKeyNotFound + } + + return checkKey(key, now) +} + +// Signing returns the latest valid key for signing. A valid key is one that is +// both past its start time and before its deletion time. +func (d *DBCache) Signing(ctx context.Context) (codersdk.CryptoKey, error) { + d.keysMu.RLock() + + if d.closed { + d.keysMu.RUnlock() + return codersdk.CryptoKey{}, ErrClosed + } + + latest := d.latestKey + d.keysMu.RUnlock() + + now := d.clock.Now() + if latest.CanSign(now) { + return db2sdk.CryptoKey(latest), nil + } + + d.keysMu.Lock() + defer d.keysMu.Unlock() + + if d.closed { + return codersdk.CryptoKey{}, ErrClosed + } + + if d.latestKey.CanSign(now) { + return db2sdk.CryptoKey(d.latestKey), nil + } + + // Refetch all keys for this feature so we can find the latest valid key. + err := d.fetch(ctx) + if err != nil { + return codersdk.CryptoKey{}, xerrors.Errorf("fetch: %w", err) + } + + return db2sdk.CryptoKey(d.latestKey), nil +} + +// clear invalidates the cache. This forces the subsequent call to fetch fresh keys. +func (d *DBCache) clear() { + now := d.clock.Now("DBCache", "clear") + d.keysMu.Lock() + defer d.keysMu.Unlock() + // Check if we raced with a fetch. It's possible that the timer fired and we + // lost the race to the mutex. We want to avoid invalidating + // a cache that was just refetched. + if now.Before(d.invalidateAt) { + return + } + d.keys = nil + d.latestKey = database.CryptoKey{} +} + +// fetch fetches all keys for the given feature and determines the latest key. +// It must be called while holding the keysMu lock. +func (d *DBCache) fetch(ctx context.Context) error { + keys, err := d.db.GetCryptoKeysByFeature(ctx, d.feature) + if err != nil { + return xerrors.Errorf("get crypto keys by feature: %w", err) + } + + now := d.clock.Now() + _ = d.timer.Reset(time.Minute * 10) + d.invalidateAt = now.Add(time.Minute * 10) + + cache := make(map[int32]database.CryptoKey) + var latest database.CryptoKey + for _, key := range keys { + cache[key.Sequence] = key + if key.CanSign(now) && key.Sequence > latest.Sequence { + latest = key + } + } + + if len(cache) == 0 { + return ErrKeyNotFound + } + + if !latest.CanSign(now) { + return ErrKeyInvalid + } + + d.keys, d.latestKey = cache, latest + return nil +} + +func checkKey(key database.CryptoKey, now time.Time) (codersdk.CryptoKey, error) { + if !key.CanVerify(now) { + return codersdk.CryptoKey{}, ErrKeyInvalid + } + + return db2sdk.CryptoKey(key), nil +} + +func (d *DBCache) Close() { + d.keysMu.Lock() + defer d.keysMu.Unlock() + + if d.closed { + return + } + + d.timer.Stop() + d.closed = true +} diff --git a/coderd/cryptokeys/dbkeycache_internal_test.go b/coderd/cryptokeys/dbkeycache_internal_test.go new file mode 100644 index 0000000000000..a3450f5f5e0d9 --- /dev/null +++ b/coderd/cryptokeys/dbkeycache_internal_test.go @@ -0,0 +1,467 @@ +package cryptokeys + +import ( + "database/sql" + "testing" + "time" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "cdr.dev/slog/sloggers/slogtest" + + "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/db2sdk" + "github.com/coder/coder/v2/coderd/database/dbmock" + "github.com/coder/coder/v2/testutil" + "github.com/coder/quartz" +) + +func Test_Verifying(t *testing.T) { + t.Parallel() + + t.Run("HitsCache", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + logger = slogtest.Make(t, nil) + ctx = testutil.Context(t, testutil.WaitShort) + ) + + expectedKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + } + + cache := map[int32]database.CryptoKey{ + 32: expectedKey, + } + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + k.keys = cache + + got, err := k.Verifying(ctx, 32) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(expectedKey), got) + }) + + t.Run("MissesCache", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + expectedKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 33, + StartsAt: clock.Now(), + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{expectedKey}, nil) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + got, err := k.Verifying(ctx, 33) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(expectedKey), got) + require.Equal(t, db2sdk.CryptoKey(expectedKey), db2sdk.CryptoKey(k.latestKey)) + }) + + t.Run("InvalidCachedKey", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + cache := map[int32]database.CryptoKey{ + 32: { + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + DeletesAt: sql.NullTime{ + Time: clock.Now(), + Valid: true, + }, + }, + } + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + k.keys = cache + + _, err := k.Verifying(ctx, 32) + require.ErrorIs(t, err, ErrKeyInvalid) + }) + + t.Run("InvalidDBKey", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + invalidKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + DeletesAt: sql.NullTime{ + Time: clock.Now(), + Valid: true, + }, + } + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{invalidKey}, nil) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + _, err := k.Verifying(ctx, 32) + require.ErrorIs(t, err, ErrKeyInvalid) + }) +} + +func Test_Signing(t *testing.T) { + t.Parallel() + + t.Run("HitsCache", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + latestKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + k.latestKey = latestKey + + got, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(latestKey), got) + }) + + t.Run("InvalidCachedKey", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + latestKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 33, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + + invalidKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now().Add(-time.Hour), + DeletesAt: sql.NullTime{ + Time: clock.Now(), + Valid: true, + }, + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{latestKey}, nil) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + k.latestKey = invalidKey + + got, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(latestKey), got) + }) + + t.Run("UsesActiveKey", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + inactiveKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now().Add(time.Hour), + } + + activeKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 33, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{inactiveKey, activeKey}, nil) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + got, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(activeKey), got) + }) + + t.Run("NoValidKeys", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + inactiveKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now().Add(time.Hour), + } + + invalidKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 33, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now().Add(-time.Hour), + DeletesAt: sql.NullTime{ + Time: clock.Now(), + Valid: true, + }, + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{inactiveKey, invalidKey}, nil) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + _, err := k.Signing(ctx) + require.ErrorIs(t, err, ErrKeyInvalid) + }) +} + +func Test_clear(t *testing.T) { + t.Parallel() + + t.Run("InvalidatesCache", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + activeKey := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 33, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{activeKey}, nil) + + _, err := k.Signing(ctx) + require.NoError(t, err) + + dur, wait := clock.AdvanceNext() + wait.MustWait(ctx) + require.Equal(t, time.Minute*10, dur) + require.Len(t, k.keys, 0) + require.Equal(t, database.CryptoKey{}, k.latestKey) + }) + + t.Run("ResetsTimer", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + key := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{key}, nil) + + // Advance it five minutes so that we can test that the + // timer is reset and doesn't fire after another five minute. + clock.Advance(time.Minute * 5) + + latest, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(key), latest) + + // Advancing the clock now should require 10 minutes + // before the timer fires again. + dur, wait := clock.AdvanceNext() + wait.MustWait(ctx) + require.Equal(t, time.Minute*10, dur) + require.Len(t, k.keys, 0) + require.Equal(t, database.CryptoKey{}, k.latestKey) + }) + + // InvalidateAt tests that we have accounted for the race condition where a + // timer fires to invalidate the cache at the same time we are fetching new + // keys. In such cases we want to skip invalidation. + t.Run("InvalidateAt", func(t *testing.T) { + t.Parallel() + + var ( + ctrl = gomock.NewController(t) + mockDB = dbmock.NewMockStore(ctrl) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + trap := clock.Trap().Now("clear") + + k := NewDBCache(logger, mockDB, database.CryptoKeyFeatureWorkspaceApps, WithDBCacheClock(clock)) + defer k.Close() + + key := database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 32, + Secret: sql.NullString{ + String: "secret", + Valid: true, + }, + StartsAt: clock.Now(), + } + + mockDB.EXPECT().GetCryptoKeysByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps).Return([]database.CryptoKey{key}, nil).Times(2) + + // Move us past the initial timer. + latest, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(key), latest) + // Null these out so that we refetch. + k.keys = nil + k.latestKey = database.CryptoKey{} + + // Initiate firing the timer. + dur, wait := clock.AdvanceNext() + require.Equal(t, time.Minute*10, dur) + // Trap the function just before acquiring the mutex. + call := trap.MustWait(ctx) + + // Refetch keys. + latest, err = k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(key), latest) + + // Let the rest of the timer function run. + // It should see that we have refetched keys and + // not invalidate. + call.Release() + wait.MustWait(ctx) + require.Len(t, k.keys, 1) + require.Equal(t, key, k.latestKey) + trap.Close() + + // Refetching the keys should've instantiated a new timer. This one should invalidate keys. + _, wait = clock.AdvanceNext() + wait.MustWait(ctx) + require.Len(t, k.keys, 0) + require.Equal(t, database.CryptoKey{}, k.latestKey) + }) +} diff --git a/coderd/cryptokeys/dbkeycache_test.go b/coderd/cryptokeys/dbkeycache_test.go new file mode 100644 index 0000000000000..8c92cf3a90aa6 --- /dev/null +++ b/coderd/cryptokeys/dbkeycache_test.go @@ -0,0 +1,143 @@ +package cryptokeys_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/goleak" + + "cdr.dev/slog/sloggers/slogtest" + + "github.com/coder/coder/v2/coderd/cryptokeys" + "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/db2sdk" + "github.com/coder/coder/v2/coderd/database/dbgen" + "github.com/coder/coder/v2/coderd/database/dbtestutil" + "github.com/coder/coder/v2/testutil" + "github.com/coder/quartz" +) + +func TestMain(m *testing.M) { + goleak.VerifyTestMain(m) +} + +func TestDBKeyCache(t *testing.T) { + t.Parallel() + + t.Run("Verifying", func(t *testing.T) { + t.Parallel() + + t.Run("HitsCache", func(t *testing.T) { + t.Parallel() + + var ( + db, _ = dbtestutil.NewDB(t) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + key := dbgen.CryptoKey(t, db, database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 1, + StartsAt: clock.Now().UTC(), + }) + + k := cryptokeys.NewDBCache(logger, db, database.CryptoKeyFeatureWorkspaceApps, cryptokeys.WithDBCacheClock(clock)) + defer k.Close() + + got, err := k.Verifying(ctx, key.Sequence) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(key), got) + }) + + t.Run("NotFound", func(t *testing.T) { + t.Parallel() + + var ( + db, _ = dbtestutil.NewDB(t) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + k := cryptokeys.NewDBCache(logger, db, database.CryptoKeyFeatureWorkspaceApps, cryptokeys.WithDBCacheClock(clock)) + defer k.Close() + + _, err := k.Verifying(ctx, 123) + require.ErrorIs(t, err, cryptokeys.ErrKeyNotFound) + }) + }) + + t.Run("Signing", func(t *testing.T) { + t.Parallel() + + var ( + db, _ = dbtestutil.NewDB(t) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + _ = dbgen.CryptoKey(t, db, database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 10, + StartsAt: clock.Now().UTC(), + }) + + expectedKey := dbgen.CryptoKey(t, db, database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 12, + StartsAt: clock.Now().UTC(), + }) + + _ = dbgen.CryptoKey(t, db, database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 2, + StartsAt: clock.Now().UTC(), + }) + + k := cryptokeys.NewDBCache(logger, db, database.CryptoKeyFeatureWorkspaceApps, cryptokeys.WithDBCacheClock(clock)) + defer k.Close() + + got, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(expectedKey), got) + }) + + t.Run("Closed", func(t *testing.T) { + t.Parallel() + + var ( + db, _ = dbtestutil.NewDB(t) + clock = quartz.NewMock(t) + ctx = testutil.Context(t, testutil.WaitShort) + logger = slogtest.Make(t, nil) + ) + + expectedKey := dbgen.CryptoKey(t, db, database.CryptoKey{ + Feature: database.CryptoKeyFeatureWorkspaceApps, + Sequence: 10, + StartsAt: clock.Now(), + }) + + k := cryptokeys.NewDBCache(logger, db, database.CryptoKeyFeatureWorkspaceApps, cryptokeys.WithDBCacheClock(clock)) + defer k.Close() + + got, err := k.Signing(ctx) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(expectedKey), got) + + got, err = k.Verifying(ctx, expectedKey.Sequence) + require.NoError(t, err) + require.Equal(t, db2sdk.CryptoKey(expectedKey), got) + + k.Close() + + _, err = k.Signing(ctx) + require.ErrorIs(t, err, cryptokeys.ErrClosed) + + _, err = k.Verifying(ctx, expectedKey.Sequence) + require.ErrorIs(t, err, cryptokeys.ErrClosed) + }) +} diff --git a/coderd/cryptokeys/keycache.go b/coderd/cryptokeys/keycache.go new file mode 100644 index 0000000000000..8c4ebfa13f64e --- /dev/null +++ b/coderd/cryptokeys/keycache.go @@ -0,0 +1,21 @@ +package cryptokeys + +import ( + "context" + + "golang.org/x/xerrors" + + "github.com/coder/coder/v2/codersdk" +) + +var ( + ErrKeyNotFound = xerrors.New("key not found") + ErrKeyInvalid = xerrors.New("key is invalid for use") + ErrClosed = xerrors.New("closed") +) + +// Keycache provides an abstraction for fetching signing keys. +type Keycache interface { + Signing(ctx context.Context) (codersdk.CryptoKey, error) + Verifying(ctx context.Context, sequence int32) (codersdk.CryptoKey, error) +} diff --git a/coderd/keyrotate/rotate.go b/coderd/cryptokeys/rotate.go similarity index 97% rename from coderd/keyrotate/rotate.go rename to coderd/cryptokeys/rotate.go index b3046161aa930..224b9100d5bf8 100644 --- a/coderd/keyrotate/rotate.go +++ b/coderd/cryptokeys/rotate.go @@ -1,4 +1,4 @@ -package keyrotate +package cryptokeys import ( "context" @@ -36,15 +36,15 @@ type rotator struct { features []database.CryptoKeyFeature } -type Option func(*rotator) +type RotatorOption func(*rotator) -func WithClock(clock quartz.Clock) Option { +func WithClock(clock quartz.Clock) RotatorOption { return func(r *rotator) { r.clock = clock } } -func WithKeyDuration(keyDuration time.Duration) Option { +func WithKeyDuration(keyDuration time.Duration) RotatorOption { return func(r *rotator) { r.keyDuration = keyDuration } @@ -53,7 +53,7 @@ func WithKeyDuration(keyDuration time.Duration) Option { // StartRotator starts a background process that rotates keys in the database. // It ensures there's at least one valid key per feature prior to returning. // Canceling the provided context will stop the background process. -func StartRotator(ctx context.Context, logger slog.Logger, db database.Store, opts ...Option) error { +func StartRotator(ctx context.Context, logger slog.Logger, db database.Store, opts ...RotatorOption) error { kr := &rotator{ db: db, logger: logger, diff --git a/coderd/keyrotate/rotate_internal_test.go b/coderd/cryptokeys/rotate_internal_test.go similarity index 99% rename from coderd/keyrotate/rotate_internal_test.go rename to coderd/cryptokeys/rotate_internal_test.go index 94160a947bf11..36ecf4fa9d76d 100644 --- a/coderd/keyrotate/rotate_internal_test.go +++ b/coderd/cryptokeys/rotate_internal_test.go @@ -1,4 +1,4 @@ -package keyrotate +package cryptokeys import ( "database/sql" diff --git a/coderd/keyrotate/rotate_test.go b/coderd/cryptokeys/rotate_test.go similarity index 85% rename from coderd/keyrotate/rotate_test.go rename to coderd/cryptokeys/rotate_test.go index 43a62ac451b62..190ad213b1153 100644 --- a/coderd/keyrotate/rotate_test.go +++ b/coderd/cryptokeys/rotate_test.go @@ -1,4 +1,4 @@ -package keyrotate_test +package cryptokeys_test import ( "testing" @@ -9,10 +9,10 @@ import ( "cdr.dev/slog" "cdr.dev/slog/sloggers/slogtest" + "github.com/coder/coder/v2/coderd/cryptokeys" "github.com/coder/coder/v2/coderd/database" "github.com/coder/coder/v2/coderd/database/dbgen" "github.com/coder/coder/v2/coderd/database/dbtestutil" - "github.com/coder/coder/v2/coderd/keyrotate" "github.com/coder/coder/v2/testutil" "github.com/coder/quartz" ) @@ -34,7 +34,7 @@ func TestRotator(t *testing.T) { require.NoError(t, err) require.Len(t, dbkeys, 0) - err = keyrotate.StartRotator(ctx, logger, db, keyrotate.WithClock(clock)) + err = cryptokeys.StartRotator(ctx, logger, db, cryptokeys.WithClock(clock)) require.NoError(t, err) // Fetch the keys from the database and ensure they @@ -59,14 +59,14 @@ func TestRotator(t *testing.T) { rotatingKey := dbgen.CryptoKey(t, db, database.CryptoKey{ Feature: database.CryptoKeyFeatureWorkspaceApps, - StartsAt: now.Add(-keyrotate.DefaultKeyDuration + time.Hour + time.Minute), + StartsAt: now.Add(-cryptokeys.DefaultKeyDuration + time.Hour + time.Minute), Sequence: 12345, }) trap := clock.Trap().TickerFunc() t.Cleanup(trap.Close) - err := keyrotate.StartRotator(ctx, logger, db, keyrotate.WithClock(clock)) + err := cryptokeys.StartRotator(ctx, logger, db, cryptokeys.WithClock(clock)) require.NoError(t, err) initialKeyLen := len(database.AllCryptoKeyFeatureValues()) @@ -88,14 +88,14 @@ func TestRotator(t *testing.T) { newKey, err := db.GetLatestCryptoKeyByFeature(ctx, database.CryptoKeyFeatureWorkspaceApps) require.NoError(t, err) require.Equal(t, rotatingKey.Sequence+1, newKey.Sequence) - require.Equal(t, rotatingKey.ExpiresAt(keyrotate.DefaultKeyDuration), newKey.StartsAt.UTC()) + require.Equal(t, rotatingKey.ExpiresAt(cryptokeys.DefaultKeyDuration), newKey.StartsAt.UTC()) require.False(t, newKey.DeletesAt.Valid) oldKey, err := db.GetCryptoKeyByFeatureAndSequence(ctx, database.GetCryptoKeyByFeatureAndSequenceParams{ Feature: rotatingKey.Feature, Sequence: rotatingKey.Sequence, }) - expectedDeletesAt := rotatingKey.StartsAt.Add(keyrotate.DefaultKeyDuration + time.Hour + keyrotate.WorkspaceAppsTokenDuration) + expectedDeletesAt := rotatingKey.StartsAt.Add(cryptokeys.DefaultKeyDuration + time.Hour + cryptokeys.WorkspaceAppsTokenDuration) require.NoError(t, err) require.Equal(t, rotatingKey.StartsAt, oldKey.StartsAt) require.True(t, oldKey.DeletesAt.Valid) diff --git a/coderd/database/db2sdk/db2sdk.go b/coderd/database/db2sdk/db2sdk.go index a8e2c6cb93fad..a0e8977ff8879 100644 --- a/coderd/database/db2sdk/db2sdk.go +++ b/coderd/database/db2sdk/db2sdk.go @@ -659,3 +659,17 @@ func Organization(organization database.Organization) codersdk.Organization { IsDefault: organization.IsDefault, } } + +func CryptoKeys(keys []database.CryptoKey) []codersdk.CryptoKey { + return List(keys, CryptoKey) +} + +func CryptoKey(key database.CryptoKey) codersdk.CryptoKey { + return codersdk.CryptoKey{ + Feature: codersdk.CryptoKeyFeature(key.Feature), + Sequence: key.Sequence, + StartsAt: key.StartsAt, + DeletesAt: key.DeletesAt.Time, + Secret: key.Secret.String, + } +} diff --git a/coderd/database/dbgen/dbgen.go b/coderd/database/dbgen/dbgen.go index d18da855be7b8..1a2f052a279b3 100644 --- a/coderd/database/dbgen/dbgen.go +++ b/coderd/database/dbgen/dbgen.go @@ -920,7 +920,7 @@ func CryptoKey(t testing.TB, db database.Store, seed database.CryptoKey) databas Secret: seed.Secret, SecretKeyID: takeFirst(seed.SecretKeyID, sql.NullString{}), Feature: seed.Feature, - StartsAt: takeFirst(seed.StartsAt, time.Now()), + StartsAt: takeFirst(seed.StartsAt, dbtime.Now()), }) require.NoError(t, err, "insert crypto key") diff --git a/coderd/database/migrations/000260_remove_dark_blue_theme.down.sql b/coderd/database/migrations/000260_remove_dark_blue_theme.down.sql new file mode 100644 index 0000000000000..8be3ce5999592 --- /dev/null +++ b/coderd/database/migrations/000260_remove_dark_blue_theme.down.sql @@ -0,0 +1 @@ +-- Nothing to restore diff --git a/coderd/database/migrations/000260_remove_dark_blue_theme.up.sql b/coderd/database/migrations/000260_remove_dark_blue_theme.up.sql new file mode 100644 index 0000000000000..9e6b509f99dd2 --- /dev/null +++ b/coderd/database/migrations/000260_remove_dark_blue_theme.up.sql @@ -0,0 +1 @@ +UPDATE users SET theme_preference = '' WHERE theme_preference = 'darkBlue'; diff --git a/coderd/database/modelmethods.go b/coderd/database/modelmethods.go index 82be5e710c058..846de6e36aa47 100644 --- a/coderd/database/modelmethods.go +++ b/coderd/database/modelmethods.go @@ -1,6 +1,7 @@ package database import ( + "encoding/hex" "sort" "strconv" "time" @@ -451,3 +452,18 @@ func (r GetAuthorizationUserRolesRow) RoleNames() ([]rbac.RoleIdentifier, error) func (k CryptoKey) ExpiresAt(keyDuration time.Duration) time.Time { return k.StartsAt.Add(keyDuration).UTC() } + +func (k CryptoKey) DecodeString() ([]byte, error) { + return hex.DecodeString(k.Secret.String) +} + +func (k CryptoKey) CanSign(now time.Time) bool { + isAfterStart := !k.StartsAt.IsZero() && !now.Before(k.StartsAt) + return isAfterStart && k.CanVerify(now) +} + +func (k CryptoKey) CanVerify(now time.Time) bool { + hasSecret := k.Secret.Valid + isBeforeDeletion := !k.DeletesAt.Valid || now.Before(k.DeletesAt.Time) + return hasSecret && isBeforeDeletion +} diff --git a/coderd/insights_test.go b/coderd/insights_test.go index 9bd3f66ddf9e6..9f10f2c2ea2b3 100644 --- a/coderd/insights_test.go +++ b/coderd/insights_test.go @@ -46,7 +46,7 @@ func TestDeploymentInsights(t *testing.T) { require.NoError(t, err) db, ps := dbtestutil.NewDB(t, dbtestutil.WithDumpOnFailure()) - logger := slogtest.Make(t, nil) + logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false}).Leveled(slog.LevelDebug) rollupEvents := make(chan dbrollup.Event) client := coderdtest.New(t, &coderdtest.Options{ Database: db, @@ -127,7 +127,7 @@ func TestUserActivityInsights_SanityCheck(t *testing.T) { t.Parallel() db, ps := dbtestutil.NewDB(t) - logger := slogtest.Make(t, nil) + logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false}).Leveled(slog.LevelDebug) client := coderdtest.New(t, &coderdtest.Options{ Database: db, Pubsub: ps, @@ -225,7 +225,7 @@ func TestUserLatencyInsights(t *testing.T) { t.Parallel() db, ps := dbtestutil.NewDB(t) - logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) + logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false}).Leveled(slog.LevelDebug) client := coderdtest.New(t, &coderdtest.Options{ Database: db, Pubsub: ps, diff --git a/coderd/notifications/dispatch/webhook.go b/coderd/notifications/dispatch/webhook.go index 4a548b40e4c2f..fcad3a7b0eae2 100644 --- a/coderd/notifications/dispatch/webhook.go +++ b/coderd/notifications/dispatch/webhook.go @@ -28,43 +28,47 @@ type WebhookHandler struct { // WebhookPayload describes the JSON payload to be delivered to the configured webhook endpoint. type WebhookPayload struct { - Version string `json:"_version"` - MsgID uuid.UUID `json:"msg_id"` - Payload types.MessagePayload `json:"payload"` - Title string `json:"title"` - Body string `json:"body"` + Version string `json:"_version"` + MsgID uuid.UUID `json:"msg_id"` + Payload types.MessagePayload `json:"payload"` + Title string `json:"title"` + TitleMarkdown string `json:"title_markdown"` + Body string `json:"body"` + BodyMarkdown string `json:"body_markdown"` } func NewWebhookHandler(cfg codersdk.NotificationsWebhookConfig, log slog.Logger) *WebhookHandler { return &WebhookHandler{cfg: cfg, log: log, cl: &http.Client{}} } -func (w *WebhookHandler) Dispatcher(payload types.MessagePayload, titleTmpl, bodyTmpl string) (DeliveryFunc, error) { +func (w *WebhookHandler) Dispatcher(payload types.MessagePayload, titleMarkdown, bodyMarkdown string) (DeliveryFunc, error) { if w.cfg.Endpoint.String() == "" { return nil, xerrors.New("webhook endpoint not defined") } - title, err := markdown.PlaintextFromMarkdown(titleTmpl) + titlePlaintext, err := markdown.PlaintextFromMarkdown(titleMarkdown) if err != nil { return nil, xerrors.Errorf("render title: %w", err) } - body, err := markdown.PlaintextFromMarkdown(bodyTmpl) + bodyPlaintext, err := markdown.PlaintextFromMarkdown(bodyMarkdown) if err != nil { return nil, xerrors.Errorf("render body: %w", err) } - return w.dispatch(payload, title, body, w.cfg.Endpoint.String()), nil + return w.dispatch(payload, titlePlaintext, titleMarkdown, bodyPlaintext, bodyMarkdown, w.cfg.Endpoint.String()), nil } -func (w *WebhookHandler) dispatch(msgPayload types.MessagePayload, title, body, endpoint string) DeliveryFunc { +func (w *WebhookHandler) dispatch(msgPayload types.MessagePayload, titlePlaintext, titleMarkdown, bodyPlaintext, bodyMarkdown, endpoint string) DeliveryFunc { return func(ctx context.Context, msgID uuid.UUID) (retryable bool, err error) { // Prepare payload. payload := WebhookPayload{ - Version: "1.0", - MsgID: msgID, - Title: title, - Body: body, - Payload: msgPayload, + Version: "1.1", + MsgID: msgID, + Title: titlePlaintext, + TitleMarkdown: titleMarkdown, + Body: bodyPlaintext, + BodyMarkdown: bodyMarkdown, + Payload: msgPayload, } m, err := json.Marshal(payload) if err != nil { diff --git a/coderd/notifications/dispatch/webhook_test.go b/coderd/notifications/dispatch/webhook_test.go index 3bfcfd8a2e621..26a78752cfd45 100644 --- a/coderd/notifications/dispatch/webhook_test.go +++ b/coderd/notifications/dispatch/webhook_test.go @@ -28,17 +28,15 @@ func TestWebhook(t *testing.T) { t.Parallel() const ( - titleTemplate = "this is the title ({{.Labels.foo}})" - bodyTemplate = "this is the body ({{.Labels.baz}})" + titlePlaintext = "this is the title" + titleMarkdown = "this *is* _the_ title" + bodyPlaintext = "this is the body" + bodyMarkdown = "~this~ is the `body`" ) msgPayload := types.MessagePayload{ Version: "1.0", NotificationName: "test", - Labels: map[string]string{ - "foo": "bar", - "baz": "quux", - }, } tests := []struct { @@ -61,6 +59,11 @@ func TestWebhook(t *testing.T) { assert.Equal(t, msgID, payload.MsgID) assert.Equal(t, msgID.String(), r.Header.Get("X-Message-Id")) + assert.Equal(t, titlePlaintext, payload.Title) + assert.Equal(t, titleMarkdown, payload.TitleMarkdown) + assert.Equal(t, bodyPlaintext, payload.Body) + assert.Equal(t, bodyMarkdown, payload.BodyMarkdown) + w.WriteHeader(http.StatusOK) _, err = w.Write([]byte(fmt.Sprintf("received %s", payload.MsgID))) assert.NoError(t, err) @@ -138,7 +141,7 @@ func TestWebhook(t *testing.T) { Endpoint: *serpent.URLOf(endpoint), } handler := dispatch.NewWebhookHandler(cfg, logger.With(slog.F("test", tc.name))) - deliveryFn, err := handler.Dispatcher(msgPayload, titleTemplate, bodyTemplate) + deliveryFn, err := handler.Dispatcher(msgPayload, titleMarkdown, bodyMarkdown) require.NoError(t, err) retryable, err := deliveryFn(ctx, msgID) diff --git a/coderd/notifications/manager.go b/coderd/notifications/manager.go index 3c983b2b3ee3d..8b765bbe88c33 100644 --- a/coderd/notifications/manager.go +++ b/coderd/notifications/manager.go @@ -54,6 +54,7 @@ type Manager struct { runOnce sync.Once stopOnce sync.Once + doneOnce sync.Once stop chan any done chan any @@ -153,7 +154,9 @@ func (m *Manager) Run(ctx context.Context) { // events, creating a notifier, and publishing bulk dispatch result updates to the store. func (m *Manager) loop(ctx context.Context) error { defer func() { - close(m.done) + m.doneOnce.Do(func() { + close(m.done) + }) m.log.Info(context.Background(), "notification manager stopped") }() @@ -364,7 +367,9 @@ func (m *Manager) Stop(ctx context.Context) error { // If the notifier hasn't been started, we don't need to wait for anything. // This is only really during testing when we want to enqueue messages only but not deliver them. if m.notifier == nil { - close(m.done) + m.doneOnce.Do(func() { + close(m.done) + }) } else { m.notifier.stop() } diff --git a/coderd/notifications/notifications_test.go b/coderd/notifications/notifications_test.go index 6cc9c9467e9fd..e52610c9c5823 100644 --- a/coderd/notifications/notifications_test.go +++ b/coderd/notifications/notifications_test.go @@ -249,7 +249,7 @@ func TestWebhookDispatch(t *testing.T) { // THEN: the webhook is received by the mock server and has the expected contents payload := testutil.RequireRecvCtx(testutil.Context(t, testutil.WaitShort), t, sent) - require.EqualValues(t, "1.0", payload.Version) + require.EqualValues(t, "1.1", payload.Version) require.Equal(t, *msgID, payload.MsgID) require.Equal(t, payload.Payload.Labels, input) require.Equal(t, payload.Payload.UserEmail, email) @@ -1187,7 +1187,6 @@ func createOpts(t *testing.T) *coderdtest.Options { t.Helper() dt := coderdtest.DeploymentValues(t) - dt.Experiments = []string{string(codersdk.ExperimentNotifications)} return &coderdtest.Options{ DeploymentValues: dt, } diff --git a/coderd/notifications/reports/generator.go b/coderd/notifications/reports/generator.go index 0e5372aa8a894..2424498146c60 100644 --- a/coderd/notifications/reports/generator.go +++ b/coderd/notifications/reports/generator.go @@ -49,7 +49,7 @@ func NewReportGenerator(ctx context.Context, logger slog.Logger, db database.Sto return nil } - err = reportFailedWorkspaceBuilds(ctx, logger, db, enqueuer, clk) + err = reportFailedWorkspaceBuilds(ctx, logger, tx, enqueuer, clk) if err != nil { return xerrors.Errorf("unable to generate reports with failed workspace builds: %w", err) } diff --git a/coderd/notifications_test.go b/coderd/notifications_test.go index 17598cd812f7f..c4f0a551d4914 100644 --- a/coderd/notifications_test.go +++ b/coderd/notifications_test.go @@ -20,7 +20,6 @@ func createOpts(t *testing.T) *coderdtest.Options { t.Helper() dt := coderdtest.DeploymentValues(t) - dt.Experiments = []string{string(codersdk.ExperimentNotifications)} return &coderdtest.Options{ DeploymentValues: dt, } diff --git a/codersdk/deployment.go b/codersdk/deployment.go index da4f3daabea06..05f31272a1807 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -2901,7 +2901,7 @@ const ( // users to opt-in to via --experimental='*'. // Experiments that are not ready for consumption by all users should // not be included here and will be essentially hidden. -var ExperimentsAll = Experiments{ExperimentNotifications} +var ExperimentsAll = Experiments{} // Experiments is a list of experiments. // Multiple experiments may be enabled at the same time. @@ -3101,3 +3101,32 @@ func (c *Client) SSHConfiguration(ctx context.Context) (SSHConfigResponse, error var sshConfig SSHConfigResponse return sshConfig, json.NewDecoder(res.Body).Decode(&sshConfig) } + +type CryptoKeyFeature string + +const ( + CryptoKeyFeatureWorkspaceApp CryptoKeyFeature = "workspace_apps" + CryptoKeyFeatureOIDCConvert CryptoKeyFeature = "oidc_convert" + CryptoKeyFeatureTailnetResume CryptoKeyFeature = "tailnet_resume" +) + +type CryptoKey struct { + Feature CryptoKeyFeature `json:"feature"` + Secret string `json:"secret"` + DeletesAt time.Time `json:"deletes_at" format:"date-time"` + Sequence int32 `json:"sequence"` + StartsAt time.Time `json:"starts_at" format:"date-time"` +} + +func (c CryptoKey) CanSign(now time.Time) bool { + now = now.UTC() + isAfterStartsAt := !c.StartsAt.IsZero() && !now.Before(c.StartsAt) + return isAfterStartsAt && c.CanVerify(now) +} + +func (c CryptoKey) CanVerify(now time.Time) bool { + now = now.UTC() + hasSecret := c.Secret != "" + beforeDelete := c.DeletesAt.IsZero() || now.Before(c.DeletesAt) + return hasSecret && beforeDelete +} diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 8fa314fd7849d..7ba10539b671c 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -12,6 +12,8 @@ import ( "github.com/google/uuid" "github.com/hashicorp/yamux" + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" "golang.org/x/xerrors" "nhooyr.io/websocket" @@ -278,9 +280,11 @@ func (c *Client) ServeProvisionerDaemon(ctx context.Context, req ServeProvisione type ProvisionerKeyTags map[string]string func (p ProvisionerKeyTags) String() string { + keys := maps.Keys(p) + slices.Sort(keys) tags := []string{} - for key, value := range p { - tags = append(tags, fmt.Sprintf("%s=%s", key, value)) + for _, key := range keys { + tags = append(tags, fmt.Sprintf("%s=%s", key, p[key])) } return strings.Join(tags, " ") } diff --git a/docs/admin/provisioners.md b/docs/admin/provisioners.md index 14d53d2ef72f7..511b7ce6d0376 100644 --- a/docs/admin/provisioners.md +++ b/docs/admin/provisioners.md @@ -267,7 +267,7 @@ will use in concert with the Helm chart for deploying the Coder server. 1. Modify your Coder `values.yaml` to include ```yaml - provisioneraemon: + provisionerDaemon: pskSecretName: "coder-provisioner-psk" ``` @@ -290,7 +290,7 @@ will use in concert with the Helm chart for deploying the Coder server. - name: CODER_URL value: "https://coder.example.com" replicaCount: 10 - provisioneraemon: + provisionerDaemon: pskSecretName: "coder-provisioner-psk" tags: location: auh diff --git a/docs/admin/security/0001_user_apikeys_invalidation.md b/docs/admin/security/0001_user_apikeys_invalidation.md new file mode 100644 index 0000000000000..c355888df39f6 --- /dev/null +++ b/docs/admin/security/0001_user_apikeys_invalidation.md @@ -0,0 +1,87 @@ +# API Tokens of deleted users not invalidated + +--- + +## Summary + +Coder identified an issue in +[https://github.com/coder/coder](https://github.com/coder/coder) where API +tokens belonging to a deleted user were not invalidated. A deleted user in +possession of a valid and non-expired API token is still able to use the above +token with their full suite of capabilities. + +## Impact: HIGH + +If exploited, an attacker could perform any action that the deleted user was +authorized to perform. + +## Exploitability: HIGH + +The CLI writes the API key to `~/.coderv2/session` by default, so any deleted +user who previously logged in via the Coder CLI has the potential to exploit +this. Note that there is a time window for exploitation; API tokens have a +maximum lifetime after which they are no longer valid. + +The issue only affects users who were active (not suspended) at the time they +were deleted. Users who were first suspended and later deleted cannot exploit +this issue. + +## Affected Versions + +All versions of Coder between v0.8.15 and v0.22.2 (inclusive) are affected. + +All customers are advised to upgrade to +[v0.23.0](https://github.com/coder/coder/releases/tag/v0.23.0) as soon as +possible. + +## Details + +Coder incorrectly failed to invalidate API keys belonging to a user when they +were deleted. When authenticating a user via their API key, Coder incorrectly +failed to check whether the API key corresponds to a deleted user. + +## Indications of Compromise + +> 💡 Automated remediation steps in the upgrade purge all affected API keys. +> Either perform the following query before upgrade or run it on a backup of +> your database from before the upgrade. + +Execute the following SQL query: + +```sql +SELECT + users.email, + users.updated_at, + api_keys.id, + api_keys.last_used +FROM + users +LEFT JOIN + api_keys +ON + api_keys.user_id = users.id +WHERE + users.deleted +AND + api_keys.last_used > users.updated_at +; +``` + +If the output is similar to the below, then you are not affected: + +```sql +----- +(0 rows) +``` + +Otherwise, the following information will be reported: + +- User email +- Time the user was last modified (i.e. deleted) +- User API key ID +- Time the affected API key was last used + +> 💡 If your license includes the +> [Audit Logs](https://coder.com/docs/admin/audit-logs#filtering-logs) feature, +> you can then query all actions performed by the above users by using the +> filter `email:$USER_EMAIL`. diff --git a/docs/admin/users/groups.md b/docs/admin/users/groups.md deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/docs/changelogs/v2.0.0.md b/docs/changelogs/v2.0.0.md index aa4af9691881f..39dbb1522bcb5 100644 --- a/docs/changelogs/v2.0.0.md +++ b/docs/changelogs/v2.0.0.md @@ -64,7 +64,7 @@ ben@coder.com! Stream Kubernetes event logs to the Coder agent logs to reveal Kuernetes-level issues such as ResourceQuota limitations, invalid images, etc. ![Kubernetes quota](https://raw.githubusercontent.com/coder/coder/main/docs/platforms/kubernetes/coder-logstream-kube-logs-quota-exceeded.png) -- [OIDC Role Sync](https://coder.com/docs/admin/users/oidc-auth.md#group-sync-enterprise) +- [OIDC Role Sync](https://coder.com/docs/admin/users/oidc-auth.md#group-sync-enterprise-premium) (Enterprise): Sync roles from your OIDC provider to Coder roles (e.g. `Template Admin`) (#8595) (@Emyrk) - Users can convert their accounts from username/password authentication to SSO @@ -82,7 +82,7 @@ ben@coder.com! - CLI: Added `--var` shorthand for `--variable` in `coder templates ` CLI (#8710) (@ammario) - Sever logs: Added fine-grained - [filtering](https://coder.com/docs/reference/cli/server.md#-l---log-filter) + [filtering](https://coder.com/docs/reference/cli/server#-l---log-filter) with Regex (#8748) (@ammario) - d3991fac2 feat(coderd): add parameter insights to template insights (#8656) (@mafredri) diff --git a/docs/changelogs/v2.1.5.md b/docs/changelogs/v2.1.5.md index 47fc7e8c74295..30a1fb8d6d4f8 100644 --- a/docs/changelogs/v2.1.5.md +++ b/docs/changelogs/v2.1.5.md @@ -52,7 +52,7 @@ ### Documentation - Add - [JetBrains Gateway Offline Mode](https://coder.com/docs/ides/gateway#JetBrains-gateway-in-an-offline-environment) + [JetBrains Gateway Offline Mode](https://coder.com/docs/user-guides/workspace-access/jetbrains.md#jetbrains-gateway-in-an-offline-environment) config steps (#9388) (@ericpaulsen) - Describe [dynamic options and locals for parameters](https://github.com/coder/coder/tree/main/examples/parameters-dynamic-options) diff --git a/docs/changelogs/v2.4.0.md b/docs/changelogs/v2.4.0.md index 15e65ddbe47fc..ccf94d714ade1 100644 --- a/docs/changelogs/v2.4.0.md +++ b/docs/changelogs/v2.4.0.md @@ -6,7 +6,7 @@ ![Dark](https://user-images.githubusercontent.com/22407953/283922030-f697fcbe-3113-4352-9aa7-f1124c76efc6.png) - > Light mode is TODO: Make this page! + > Light mode is coming soon! - Workspace activity is only bumped by 1 hour if the user is still active after the default autostop duration (#10704) (@Emyrk) diff --git a/docs/changelogs/v2.5.1.md b/docs/changelogs/v2.5.1.md index db47d0666c984..c488d6f2ab116 100644 --- a/docs/changelogs/v2.5.1.md +++ b/docs/changelogs/v2.5.1.md @@ -5,7 +5,7 @@ - Add metrics for workspace agent scripts (#11132) (@Emyrk) - Add a user-configurable theme picker (#11140) (@aslilac) ![Theme picker](https://i.imgur.com/rUAWz6B.png) - > A [light theme](https://github.com/coder/coder/issues/8396) is TODO: Make this page + > A [light theme](https://github.com/coder/coder/issues/8396) is coming soon - Various improvements to bulk delete flow (#11093) (@aslilac) ### Bug fixes diff --git a/docs/changelogs/v2.9.0.md b/docs/changelogs/v2.9.0.md index 3c6f27b841bcc..55bfb33cf1fcf 100644 --- a/docs/changelogs/v2.9.0.md +++ b/docs/changelogs/v2.9.0.md @@ -133,7 +133,7 @@ The following features are hidden or disabled by default as we don't guarantee s ### Documentation - Fix /audit & /insights params (#12043) (@ericpaulsen) -- Fix JetBrains reconnect faq (#12073) (@ericpaulsen) +- Fix JetBrains gateway reconnect faq (#12073) (@ericpaulsen) - Update modules documentation (#11911) (@matifali) - Add kubevirt coder template in list of community templates (#12113) (@sulo1337) - Describe resource ordering in UI (#12185) (@mtojek) diff --git a/docs/contributing/SECURITY.md b/docs/contributing/SECURITY.md new file mode 100644 index 0000000000000..35dc53efd6934 --- /dev/null +++ b/docs/contributing/SECURITY.md @@ -0,0 +1,4 @@ +# Security Policy + +If you find a vulnerability, **DO NOT FILE AN ISSUE**. Instead, send an email to +security@coder.com. diff --git a/docs/contributing/feature-stages.md b/docs/contributing/feature-stages.md index 26eaf3272b47b..d19c3de070dfa 100644 --- a/docs/contributing/feature-stages.md +++ b/docs/contributing/feature-stages.md @@ -32,8 +32,8 @@ coder server --experiments=feature1,feature2 -| Feature | Description | Available in | -| --------------- | ------------------------------------------------------------------- | ---------------- | -| `notifications` | Sends notifications via SMTP and webhooks following certain events. | mainline, stable | +| Feature | Description | Available in | +| --------------- | ------------------------------------------------------------------- | ------------ | +| `notifications` | Sends notifications via SMTP and webhooks following certain events. | stable | diff --git a/docs/enterprise.md b/docs/enterprise.md deleted file mode 100644 index 275fcddf60be3..0000000000000 --- a/docs/enterprise.md +++ /dev/null @@ -1,56 +0,0 @@ -# Enterprise Features - -Coder is free to use and includes some features that are only accessible with a -paid license. [Contact Sales](https://coder.com/contact) for pricing or -[get a free trial](https://coder.com/trial). - -| Category | Feature | Open Source | Enterprise | -| --------------- | --------------------------------------------------------------------------------------------------- | :---------: | :--------: | -| Support | Email, Prioritization | ❌ | ✅ | -| Scale | [High Availability](./admin/high-availability.md) | ❌ | ✅ | -| Scale | [Multiple External Auth Providers](./admin/external-auth.md#multiple-external-providers-enterprise) | ❌ | ✅ | -| Scale | [Isolated Terraform Runners](./admin/provisioners.md) | ❌ | ✅ | -| Scale | [Workspace Proxies](./admin/workspace-proxies.md) | ❌ | ✅ | -| Governance | [Audit Logging](./admin/audit-logs.md) | ❌ | ✅ | -| Governance | [Browser Only Connections](./networking/#browser-only-connections-enterprise) | ❌ | ✅ | -| Governance | [Groups & Template RBAC](./admin/rbac.md) | ❌ | ✅ | -| Cost Control | [Quotas](./admin/quotas.md) | ❌ | ✅ | -| Cost Control | [Max Workspace Lifetime](./workspaces.md#max-lifetime) | ❌ | ✅ | -| User Management | [Groups](./admin/groups.md) | ❌ | ✅ | -| User Management | [Group & role sync](./admin/auth.md#group-sync-enterprise) | ❌ | ✅ | -| User Management | [SCIM](./admin/auth.md#scim) | ❌ | ✅ | - -## Adding your license key - -There are two ways to add an enterprise license to a Coder deployment: In the -Coder UI or with the Coder CLI. - -### Coder UI - -Click Deployment, Licenses, Add a license then drag or select the license file -with the `jwt` extension. - -![Add License UI](./images/add-license-ui.png) - -### Coder CLI - -### Requirements - -- Your license key -- Coder CLI installed - -### Instructions - -1. Save your license key to disk and make note of the path -2. Open a terminal -3. Ensure you are logged into your Coder deployment - - `coder login ` - -4. Run - - `coder licenses add -f ` - -## Up Next - -- [Learn how to contribute to Coder](./CONTRIBUTING.md). diff --git a/docs/images/add-license-ui.png b/docs/images/add-license-ui.png index 03ff419d15a59..837698908e8f1 100644 Binary files a/docs/images/add-license-ui.png and b/docs/images/add-license-ui.png differ diff --git a/docs/images/admin/service-banner-config.png b/docs/images/admin/service-banner-config.png new file mode 100644 index 0000000000000..410fea472c35e Binary files /dev/null and b/docs/images/admin/service-banner-config.png differ diff --git a/docs/images/admin/service-banner-maintenance.png b/docs/images/admin/service-banner-maintenance.png new file mode 100644 index 0000000000000..94d879f084bf4 Binary files /dev/null and b/docs/images/admin/service-banner-maintenance.png differ diff --git a/docs/images/icons/licensing.svg b/docs/images/icons/licensing.svg new file mode 100644 index 0000000000000..6e876fd359583 --- /dev/null +++ b/docs/images/icons/licensing.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/images/icons/orgs.svg b/docs/images/icons/orgs.svg new file mode 100644 index 0000000000000..ff65ea99664b6 --- /dev/null +++ b/docs/images/icons/orgs.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 212204033b79f..286c9b890af1d 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -140,7 +140,7 @@ helm install coder coder-v2/coder \ helm install coder coder-v2/coder \ --namespace coder \ --values values.yaml \ - --version 2.14.2 + --version 2.15.1 ``` You can watch Coder start up by running `kubectl get pods -n coder`. Once Coder diff --git a/docs/install/releases.md b/docs/install/releases.md index 738218b04b0e3..dfd7798cec88b 100644 --- a/docs/install/releases.md +++ b/docs/install/releases.md @@ -51,10 +51,11 @@ pages. | 2.10.x | April 03, 2024 | Not Supported | | 2.11.x | May 07, 2024 | Not Supported | | 2.12.x | June 04, 2024 | Not Supported | -| 2.13.x | July 02, 2024 | Security Support | -| 2.14.x | August 06, 2024 | Stable | -| 2.15.x | September 03, 2024 | Mainline | -| 2.16.x | October 01, 2024 | Not Released | +| 2.13.x | July 02, 2024 | Not Supported | +| 2.14.x | August 06, 2024 | Security Support | +| 2.15.x | September 03, 2024 | Stable | +| 2.16.x | October 01, 2024 | Mainline | +| 2.17.x | November 05, 2024 | Not Released | > **Tip**: We publish a > [`preview`](https://github.com/coder/coder/pkgs/container/coder-preview) image diff --git a/docs/manifest.json b/docs/manifest.json index 69881f4968e86..61dda55e0e847 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -235,17 +235,18 @@ }, { "title": "Groups \u0026 Roles", - "path": "./admin/users/groups-roles.md" + "path": "./admin/users/groups-roles.md", + "state": ["enterprise", "premium"] }, { "title": "Organizations", "path": "./admin/users/organizations.md", - "state": "enterprise" + "state": ["premium"] }, { "title": "Quotas", "path": "./admin/users/quotas.md", - "state": "enterprise" + "state": ["enterprise", "premium"] }, { "title": "Sessions \u0026 API Tokens", @@ -365,7 +366,8 @@ "title": "Provisioners", "description": "Learn how to run external provisioners with Coder", "path": "./admin/provisioners.md", - "icon_path": "./images/icons/key.svg" + "icon_path": "./images/icons/key.svg", + "state": ["enterprise", "premium"] }, { "title": "External Auth", @@ -448,12 +450,14 @@ { "title": "Workspace Proxies", "description": "Run geo distributed workspace proxies", - "path": "./admin/networking/workspace-proxies.md" + "path": "./admin/networking/workspace-proxies.md", + "state": ["enterprise", "premium"] }, { "title": "High Availability", "description": "Learn how to configure Coder for High Availability", - "path": "./admin/high-availability.md" + "path": "./admin/networking/high-availability.md", + "state": ["enterprise", "premium"] }, { "title": "Troubleshooting", @@ -492,13 +496,13 @@ "title": "Slack Notifications", "description": "Learn how to setup Slack notifications", "path": "./admin/monitoring/notifications/slack.md", - "state": "beta" + "state": ["beta"] }, { "title": "Microsoft Teams Notifications", "description": "Learn how to setup Microsoft Teams notifications", "path": "./admin/monitoring/notifications/teams.md", - "state": "beta" + "state": ["beta"] } ] } @@ -513,7 +517,8 @@ { "title": "Audit Logs", "description": "Audit actions taken inside Coder", - "path": "./admin/security/audit-logs.md" + "path": "./admin/security/audit-logs.md", + "state": ["enterprise", "premium"] }, { "title": "Secrets", @@ -523,7 +528,8 @@ { "title": "Database Encryption", "description": "Encrypt the database to prevent unauthorized access", - "path": "./admin/security/database-encryption.md" + "path": "./admin/security/database-encryption.md", + "state": ["enterprise", "premium"] } ] } diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index 00004bb83e74b..bb756d1a7ea8f 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -1406,6 +1406,44 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o | `template_version_id` | string | false | | Template version ID can be used to specify a specific version of a template for creating the workspace. | | `ttl_ms` | integer | false | | | +## codersdk.CryptoKey + +```json +{ + "deletes_at": "2019-08-24T14:15:22Z", + "feature": "workspace_apps", + "secret": "string", + "sequence": 0, + "starts_at": "2019-08-24T14:15:22Z" +} +``` + +### Properties + +| Name | Type | Required | Restrictions | Description | +| ------------ | ------------------------------------------------------ | -------- | ------------ | ----------- | +| `deletes_at` | string | false | | | +| `feature` | [codersdk.CryptoKeyFeature](#codersdkcryptokeyfeature) | false | | | +| `secret` | string | false | | | +| `sequence` | integer | false | | | +| `starts_at` | string | false | | | + +## codersdk.CryptoKeyFeature + +```json +"workspace_apps" +``` + +### Properties + +#### Enumerated Values + +| Value | +| ---------------- | +| `workspace_apps` | +| `oidc_convert` | +| `tailnet_resume` | + ## codersdk.CustomRoleRequest ```json @@ -9780,55 +9818,17 @@ _None_ | `derp_map` | [tailcfg.DERPMap](#tailcfgderpmap) | false | | | | `disable_direct_connections` | boolean | false | | | -## wsproxysdk.CryptoKey - -```json -{ - "deletes_at": "string", - "feature": "workspace_apps", - "secret": "string", - "sequence": 0, - "starts_at": "string" -} -``` - -### Properties - -| Name | Type | Required | Restrictions | Description | -| ------------ | ---------------------------------------------------------- | -------- | ------------ | ----------- | -| `deletes_at` | string | false | | | -| `feature` | [wsproxysdk.CryptoKeyFeature](#wsproxysdkcryptokeyfeature) | false | | | -| `secret` | string | false | | | -| `sequence` | integer | false | | | -| `starts_at` | string | false | | | - -## wsproxysdk.CryptoKeyFeature - -```json -"workspace_apps" -``` - -### Properties - -#### Enumerated Values - -| Value | -| ---------------- | -| `workspace_apps` | -| `oidc_convert` | -| `tailnet_resume` | - ## wsproxysdk.CryptoKeysResponse ```json { "crypto_keys": [ { - "deletes_at": "string", + "deletes_at": "2019-08-24T14:15:22Z", "feature": "workspace_apps", "secret": "string", "sequence": 0, - "starts_at": "string" + "starts_at": "2019-08-24T14:15:22Z" } ] } @@ -9836,9 +9836,9 @@ _None_ ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------- | ----------------------------------------------------- | -------- | ------------ | ----------- | -| `crypto_keys` | array of [wsproxysdk.CryptoKey](#wsproxysdkcryptokey) | false | | | +| Name | Type | Required | Restrictions | Description | +| ------------- | ------------------------------------------------- | -------- | ------------ | ----------- | +| `crypto_keys` | array of [codersdk.CryptoKey](#codersdkcryptokey) | false | | | ## wsproxysdk.DeregisterWorkspaceProxyRequest diff --git a/docs/reference/cli/tokens_create.md b/docs/reference/cli/tokens_create.md index e6b613fa0090a..09a4a5d200ea5 100644 --- a/docs/reference/cli/tokens_create.md +++ b/docs/reference/cli/tokens_create.md @@ -30,3 +30,12 @@ Specify a duration for the lifetime of the token. | Environment | $CODER_TOKEN_NAME | Specify a human-readable name. + +### -u, --user + +| | | +| ----------- | ------------------------------ | +| Type | string | +| Environment | $CODER_TOKEN_USER | + +Specify the user to create the token for (Only works if logged in user is admin). diff --git a/dogfood/contents/main.tf b/dogfood/contents/main.tf index f73d75781bca4..5b026a46f934b 100644 --- a/dogfood/contents/main.tf +++ b/dogfood/contents/main.tf @@ -99,20 +99,20 @@ data "coder_workspace_owner" "me" {} module "slackme" { source = "registry.coder.com/modules/slackme/coder" - version = "1.0.2" + version = ">= 1.0.0" agent_id = coder_agent.dev.id auth_provider_id = "slack" } module "dotfiles" { source = "registry.coder.com/modules/dotfiles/coder" - version = "1.0.18" + version = ">= 1.0.0" agent_id = coder_agent.dev.id } module "git-clone" { source = "registry.coder.com/modules/git-clone/coder" - version = "1.0.12" + version = ">= 1.0.0" agent_id = coder_agent.dev.id url = "https://github.com/coder/coder" base_dir = local.repo_base_dir @@ -120,13 +120,13 @@ module "git-clone" { module "personalize" { source = "registry.coder.com/modules/personalize/coder" - version = "1.0.2" + version = ">= 1.0.0" agent_id = coder_agent.dev.id } module "code-server" { source = "registry.coder.com/modules/code-server/coder" - version = "1.0.18" + version = ">= 1.0.0" agent_id = coder_agent.dev.id folder = local.repo_dir auto_install_extensions = true @@ -134,7 +134,7 @@ module "code-server" { module "jetbrains_gateway" { source = "registry.coder.com/modules/jetbrains-gateway/coder" - version = "1.0.13" + version = ">= 1.0.0" agent_id = coder_agent.dev.id agent_name = "dev" folder = local.repo_dir @@ -145,20 +145,20 @@ module "jetbrains_gateway" { module "filebrowser" { source = "registry.coder.com/modules/filebrowser/coder" - version = "1.0.18" + version = ">= 1.0.0" agent_id = coder_agent.dev.id agent_name = "dev" } module "coder-login" { source = "registry.coder.com/modules/coder-login/coder" - version = "1.0.15" + version = ">= 1.0.0" agent_id = coder_agent.dev.id } module "cursor" { source = "registry.coder.com/modules/cursor/coder" - version = "1.0.18" + version = ">= 1.0.0" agent_id = coder_agent.dev.id folder = local.repo_dir } diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index 5127e6ec0887f..e0b8170c6ec2a 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -448,7 +448,6 @@ func New(ctx context.Context, options *Options) (_ *API, err error) { // with the below route, we need to register this route without any mounts or groups to make both work. r.With( apiKeyMiddleware, - httpmw.RequireExperiment(api.AGPL.Experiments, codersdk.ExperimentNotifications), httpmw.ExtractNotificationTemplateParam(options.Database), ).Put("/notifications/templates/{notification_template}/method", api.updateNotificationTemplateMethod) }) diff --git a/enterprise/coderd/notifications_test.go b/enterprise/coderd/notifications_test.go index 5546bec1dcb79..b71bde86a5736 100644 --- a/enterprise/coderd/notifications_test.go +++ b/enterprise/coderd/notifications_test.go @@ -23,7 +23,6 @@ func createOpts(t *testing.T) *coderdenttest.Options { t.Helper() dt := coderdtest.DeploymentValues(t) - dt.Experiments = []string{string(codersdk.ExperimentNotifications)} return &coderdenttest.Options{ Options: &coderdtest.Options{ DeploymentValues: dt, diff --git a/enterprise/coderd/provisionerkeys.go b/enterprise/coderd/provisionerkeys.go index ea89538965afa..08556e2eb24c2 100644 --- a/enterprise/coderd/provisionerkeys.go +++ b/enterprise/coderd/provisionerkeys.go @@ -147,9 +147,13 @@ func (api *API) provisionerKeyDaemons(rw http.ResponseWriter, r *http.Request) { pkDaemons := []codersdk.ProvisionerKeyDaemons{} for _, key := range sdkKeys { - // currently we exclude user-auth from this list + // The key.OrganizationID for the `user-auth` key is hardcoded to + // the default org in the database and we are overwriting it here + // to be the correct org we used to query the list. + // This will be changed when we update the `user-auth` keys to be + // directly tied to a user ID. if key.ID.String() == codersdk.ProvisionerKeyIDUserAuth { - continue + key.OrganizationID = organization.ID } daemons := []codersdk.ProvisionerDaemon{} for _, daemon := range recentDaemons { diff --git a/enterprise/coderd/workspaceproxy.go b/enterprise/coderd/workspaceproxy.go index eef12b1d1b13a..47bdf53493489 100644 --- a/enterprise/coderd/workspaceproxy.go +++ b/enterprise/coderd/workspaceproxy.go @@ -17,6 +17,7 @@ import ( agpl "github.com/coder/coder/v2/coderd" "github.com/coder/coder/v2/coderd/audit" "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/db2sdk" "github.com/coder/coder/v2/coderd/database/dbauthz" "github.com/coder/coder/v2/coderd/database/dbtime" "github.com/coder/coder/v2/coderd/httpapi" @@ -733,7 +734,7 @@ func (api *API) workspaceProxyCryptoKeys(rw http.ResponseWriter, r *http.Request } httpapi.Write(ctx, rw, http.StatusOK, wsproxysdk.CryptoKeysResponse{ - CryptoKeys: fromDBCryptoKeys(keys), + CryptoKeys: db2sdk.CryptoKeys(keys), }) } @@ -994,17 +995,3 @@ func (w *workspaceProxiesFetchUpdater) Fetch(ctx context.Context) (codersdk.Regi func (w *workspaceProxiesFetchUpdater) Update(ctx context.Context) error { return w.updateFunc(ctx) } - -func fromDBCryptoKeys(keys []database.CryptoKey) []wsproxysdk.CryptoKey { - wskeys := make([]wsproxysdk.CryptoKey, 0, len(keys)) - for _, key := range keys { - wskeys = append(wskeys, wsproxysdk.CryptoKey{ - Feature: wsproxysdk.CryptoKeyFeature(key.Feature), - Sequence: key.Sequence, - StartsAt: key.StartsAt.UTC(), - DeletesAt: key.DeletesAt.Time.UTC(), - Secret: key.Secret.String, - }) - } - return wskeys -} diff --git a/enterprise/coderd/workspaceproxy_test.go b/enterprise/coderd/workspaceproxy_test.go index e2a687517473a..5231a0b0c4241 100644 --- a/enterprise/coderd/workspaceproxy_test.go +++ b/enterprise/coderd/workspaceproxy_test.go @@ -18,6 +18,7 @@ import ( "github.com/coder/coder/v2/buildinfo" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/db2sdk" "github.com/coder/coder/v2/coderd/database/dbgen" "github.com/coder/coder/v2/coderd/database/dbtestutil" "github.com/coder/coder/v2/coderd/database/dbtime" @@ -911,21 +912,21 @@ func TestGetCryptoKeys(t *testing.T) { }, }) - now := time.Now().UTC() + now := time.Now() expectedKey1 := dbgen.CryptoKey(t, db, database.CryptoKey{ Feature: database.CryptoKeyFeatureWorkspaceApps, StartsAt: now.Add(-time.Hour), Sequence: 2, }) - key1 := fromDBCryptoKeys(expectedKey1) + key1 := db2sdk.CryptoKey(expectedKey1) expectedKey2 := dbgen.CryptoKey(t, db, database.CryptoKey{ Feature: database.CryptoKeyFeatureWorkspaceApps, StartsAt: now, Sequence: 3, }) - key2 := fromDBCryptoKeys(expectedKey2) + key2 := db2sdk.CryptoKey(expectedKey2) // Create a deleted key. _ = dbgen.CryptoKey(t, db, database.CryptoKey{ @@ -958,8 +959,7 @@ func TestGetCryptoKeys(t *testing.T) { require.NoError(t, err) require.NotEmpty(t, keys) require.Equal(t, 2, len(keys.CryptoKeys)) - require.Contains(t, keys.CryptoKeys, key1) - require.Contains(t, keys.CryptoKeys, key2) + requireContainsKeys(t, keys.CryptoKeys, key1, key2) }) t.Run("Unauthorized", func(t *testing.T) { @@ -995,12 +995,19 @@ func TestGetCryptoKeys(t *testing.T) { }) } -func fromDBCryptoKeys(key database.CryptoKey) wsproxysdk.CryptoKey { - return wsproxysdk.CryptoKey{ - Feature: wsproxysdk.CryptoKeyFeature(key.Feature), - Sequence: key.Sequence, - StartsAt: key.StartsAt.UTC(), - DeletesAt: key.DeletesAt.Time.UTC(), - Secret: key.Secret.String, +func requireContainsKeys(t *testing.T, keys []codersdk.CryptoKey, expected ...codersdk.CryptoKey) { + t.Helper() + + for _, expectedKey := range expected { + var found bool + for _, key := range keys { + if key.Feature == expectedKey.Feature && key.Sequence == expectedKey.Sequence { + require.True(t, expectedKey.StartsAt.Equal(key.StartsAt), "expected starts at %s, got %s", expectedKey.StartsAt, key.StartsAt) + require.Equal(t, expectedKey.Secret, key.Secret) + require.True(t, expectedKey.DeletesAt.Equal(key.DeletesAt), "expected deletes at %s, got %s", expectedKey.DeletesAt, key.DeletesAt) + found = true + } + } + require.True(t, found, "expected key %+v not found", expectedKey) } } diff --git a/enterprise/wsproxy/wsproxysdk/wsproxysdk.go b/enterprise/wsproxy/wsproxysdk/wsproxysdk.go index 891224216003a..77d36561c6de8 100644 --- a/enterprise/wsproxy/wsproxysdk/wsproxysdk.go +++ b/enterprise/wsproxy/wsproxysdk/wsproxysdk.go @@ -204,35 +204,6 @@ type RegisterWorkspaceProxyRequest struct { Version string `json:"version"` } -type CryptoKeyFeature string - -const ( - CryptoKeyFeatureWorkspaceApp CryptoKeyFeature = "workspace_apps" - CryptoKeyFeatureOIDCConvert CryptoKeyFeature = "oidc_convert" - CryptoKeyFeatureTailnetResume CryptoKeyFeature = "tailnet_resume" -) - -type CryptoKey struct { - Feature CryptoKeyFeature `json:"feature"` - Secret string `json:"secret"` - DeletesAt time.Time `json:"deletes_at"` - Sequence int32 `json:"sequence"` - StartsAt time.Time `json:"starts_at"` -} - -func (c CryptoKey) CanSign(now time.Time) bool { - now = now.UTC() - isAfterStartsAt := !c.StartsAt.IsZero() && !now.Before(c.StartsAt) - return isAfterStartsAt && c.CanVerify(now) -} - -func (c CryptoKey) CanVerify(now time.Time) bool { - now = now.UTC() - hasSecret := c.Secret != "" - beforeDelete := c.DeletesAt.IsZero() || now.Before(c.DeletesAt) - return hasSecret && beforeDelete -} - type RegisterWorkspaceProxyResponse struct { AppSecurityKey string `json:"app_security_key"` DERPMeshKey string `json:"derp_mesh_key"` @@ -612,7 +583,7 @@ func (c *Client) DialCoordinator(ctx context.Context) (agpl.MultiAgentConn, erro } type CryptoKeysResponse struct { - CryptoKeys []CryptoKey `json:"crypto_keys"` + CryptoKeys []codersdk.CryptoKey `json:"crypto_keys"` } func (c *Client) CryptoKeys(ctx context.Context) (CryptoKeysResponse, error) { diff --git a/examples/examples.gen.json b/examples/examples.gen.json index a6b5247a89e63..b59c5daa2b57e 100644 --- a/examples/examples.gen.json +++ b/examples/examples.gen.json @@ -155,7 +155,7 @@ "nomad", "container" ], - "markdown": "\n# Remote Development on Nomad\n\nProvision Nomad Jobs as [Coder workspaces](https://coder.com/docs/workspaces) with this example template. This example shows how to use Nomad service tasks to be used as a development environment using docker and host csi volumes.\n\n\u003c!-- TODO: Add screenshot --\u003e\n\n\u003e **Note**\n\u003e This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.\n\n## Prerequisites\n\n- [Nomad](https://www.nomadproject.io/downloads)\n- [Docker](https://docs.docker.com/get-docker/)\n\n## Setup\n\n### 1. Start the CSI Host Volume Plugin\n\nThe CSI Host Volume plugin is used to mount host volumes into Nomad tasks. This is useful for development environments where you want to mount persistent volumes into your container workspace.\n\n1. Login to the Nomad server using SSH.\n\n2. Append the following stanza to your Nomad server configuration file and restart the nomad service.\n\n ```hcl\n plugin \"docker\" {\n config {\n allow_privileged = true\n }\n }\n ```\n\n ```shell\n sudo systemctl restart nomad\n ```\n\n3. Create a file `hostpath.nomad` with following content:\n\n ```hcl\n job \"hostpath-csi-plugin\" {\n datacenters = [\"dc1\"]\n type = \"system\"\n\n group \"csi\" {\n task \"plugin\" {\n driver = \"docker\"\n\n config {\n image = \"registry.k8s.io/sig-storage/hostpathplugin:v1.10.0\"\n\n args = [\n \"--drivername=csi-hostpath\",\n \"--v=5\",\n \"--endpoint=${CSI_ENDPOINT}\",\n \"--nodeid=node-${NOMAD_ALLOC_INDEX}\",\n ]\n\n privileged = true\n }\n\n csi_plugin {\n id = \"hostpath\"\n type = \"monolith\"\n mount_dir = \"/csi\"\n }\n\n resources {\n cpu = 256\n memory = 128\n }\n }\n }\n }\n ```\n\n4. Run the job:\n\n ```shell\n nomad job run hostpath.nomad\n ```\n\n### 2. Setup the Nomad Template\n\n1. Create the template by running the following command:\n\n ```shell\n coder template init nomad-docker\n cd nomad-docker\n coder template push\n ```\n\n2. Set up Nomad server address and optional authentication:\n\n3. Create a new workspace and start developing.\n" + "markdown": "\n# Remote Development on Nomad\n\nProvision Nomad Jobs as [Coder workspaces](https://coder.com/docs/workspaces) with this example template. This example shows how to use Nomad service tasks to be used as a development environment using docker and host csi volumes.\n\n\u003c!-- TODO: Add screenshot --\u003e\n\n\u003e **Note**\n\u003e This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.\n\n## Prerequisites\n\n- [Nomad](https://www.nomadproject.io/downloads)\n- [Docker](https://docs.docker.com/get-docker/)\n\n## Setup\n\n### 1. Start the CSI Host Volume Plugin\n\nThe CSI Host Volume plugin is used to mount host volumes into Nomad tasks. This is useful for development environments where you want to mount persistent volumes into your container workspace.\n\n1. Login to the Nomad server using SSH.\n\n2. Append the following stanza to your Nomad server configuration file and restart the nomad service.\n\n ```tf\n plugin \"docker\" {\n config {\n allow_privileged = true\n }\n }\n ```\n\n ```shell\n sudo systemctl restart nomad\n ```\n\n3. Create a file `hostpath.nomad` with following content:\n\n ```tf\n job \"hostpath-csi-plugin\" {\n datacenters = [\"dc1\"]\n type = \"system\"\n\n group \"csi\" {\n task \"plugin\" {\n driver = \"docker\"\n\n config {\n image = \"registry.k8s.io/sig-storage/hostpathplugin:v1.10.0\"\n\n args = [\n \"--drivername=csi-hostpath\",\n \"--v=5\",\n \"--endpoint=${CSI_ENDPOINT}\",\n \"--nodeid=node-${NOMAD_ALLOC_INDEX}\",\n ]\n\n privileged = true\n }\n\n csi_plugin {\n id = \"hostpath\"\n type = \"monolith\"\n mount_dir = \"/csi\"\n }\n\n resources {\n cpu = 256\n memory = 128\n }\n }\n }\n }\n ```\n\n4. Run the job:\n\n ```shell\n nomad job run hostpath.nomad\n ```\n\n### 2. Setup the Nomad Template\n\n1. Create the template by running the following command:\n\n ```shell\n coder template init nomad-docker\n cd nomad-docker\n coder template push\n ```\n\n2. Set up Nomad server address and optional authentication:\n\n3. Create a new workspace and start developing.\n" }, { "id": "scratch", diff --git a/go.mod b/go.mod index 0c4826282f3a6..90aa2466bb46e 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ replace github.com/lib/pq => github.com/coder/pq v1.10.5-0.20240813183442-0c420c require ( cdr.dev/slog v1.6.2-0.20240126064726-20367d4aede6 - cloud.google.com/go/compute/metadata v0.5.0 + cloud.google.com/go/compute/metadata v0.5.2 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d github.com/adrg/xdg v0.5.0 github.com/ammario/tlru v0.4.0 @@ -161,8 +161,8 @@ require ( github.com/swaggo/swag v1.16.2 github.com/tidwall/gjson v1.17.0 github.com/u-root/u-root v0.14.0 - github.com/unrolled/secure v1.14.0 - github.com/valyala/fasthttp v1.55.0 + github.com/unrolled/secure v1.16.0 + github.com/valyala/fasthttp v1.56.0 github.com/wagslane/go-password-validator v0.3.0 go.mozilla.org/pkcs7 v0.9.0 go.nhat.io/otelsql v0.14.0 @@ -185,10 +185,10 @@ require ( golang.org/x/text v0.18.0 golang.org/x/tools v0.25.0 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da - google.golang.org/api v0.197.0 + google.golang.org/api v0.199.0 google.golang.org/grpc v1.67.0 google.golang.org/protobuf v1.34.2 - gopkg.in/DataDog/dd-trace-go.v1 v1.67.0 + gopkg.in/DataDog/dd-trace-go.v1 v1.68.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 gvisor.dev/gvisor v0.0.0-20240509041132-65b30f7869dc @@ -214,7 +214,7 @@ require ( ) require ( - cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth v0.9.5 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect dario.cat/mergo v1.0.0 // indirect github.com/DataDog/go-libddwaf/v3 v3.3.0 // indirect diff --git a/go.sum b/go.sum index e9bdf99728aea..328b36165e87b 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,12 @@ cdr.dev/slog v1.6.2-0.20240126064726-20367d4aede6 h1:KHblWIE/KHOwQ6lEbMZt6YpcGve2FEZ1sDtrW1Am5UI= cdr.dev/slog v1.6.2-0.20240126064726-20367d4aede6/go.mod h1:NaoTA7KwopCrnaSb0JXTC0PTp/O/Y83Lndnq0OEV3ZQ= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= -cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth v0.9.5 h1:4CTn43Eynw40aFVr3GpPqsQponx2jv0BQpjvajsbbzw= +cloud.google.com/go/auth v0.9.5/go.mod h1:Xo0n7n66eHyOWWCnitop6870Ilwo3PiZyodVkkH1xWM= cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= -cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= -cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs= cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= @@ -348,8 +348,6 @@ github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/github/fakeca v0.1.0/go.mod h1:+bormgoGMMuamOscx7N91aOuUST7wdaJ2rNjeohylyo= -github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= -github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= @@ -945,12 +943,12 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/unrolled/secure v1.14.0 h1:u9vJTU/pR4Bny0ntLUMxdfLtmIRGvQf2sEFuA0TG9AE= -github.com/unrolled/secure v1.14.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= +github.com/unrolled/secure v1.16.0 h1:XgdAsS/Zl50ZfZPRJK6WpicFttfrsFYFd0+ONDBJubU= +github.com/unrolled/secure v1.16.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.55.0 h1:Zkefzgt6a7+bVKHnu/YaYSOPfNYNisSVBo/unVCf8k8= -github.com/valyala/fasthttp v1.55.0/go.mod h1:NkY9JtkrpPKmgwV3HTaS2HWaJss9RSIsRVfcxxoHiOM= +github.com/valyala/fasthttp v1.56.0 h1:bEZdJev/6LCBlpdORfrLu/WOZXXxvrUQSiyniuaoW8U= +github.com/valyala/fasthttp v1.56.0/go.mod h1:sReBt3XZVnudxuLOx4J/fMrJVorWRiWY2koQKgABiVI= github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs= github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= @@ -1205,8 +1203,8 @@ golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 h1:CawjfCvY golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6/go.mod h1:3rxYc4HtVcSG9gVaTs2GEBdehh+sYPOwKtyUWEOTb80= golang.zx2c4.com/wireguard/windows v0.5.3 h1:On6j2Rpn3OEMXqBq00QEDC7bWSZrPIHKIus8eIuExIE= golang.zx2c4.com/wireguard/windows v0.5.3/go.mod h1:9TEe8TJmtwyQebdFwAkEWOPr3prrtqm+REGFifP60hI= -google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ= -google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw= +google.golang.org/api v0.199.0 h1:aWUXClp+VFJmqE0JPvpZOK3LDQMyFKYIow4etYd9qxs= +google.golang.org/api v0.199.0/go.mod h1:ohG4qSztDJmZdjK/Ar6MhbAmb/Rpi4JHOqagsh90K28= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -1241,8 +1239,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= -gopkg.in/DataDog/dd-trace-go.v1 v1.67.0 h1:3Cb46zyKIlEWac21tvDF2O4KyMlOHQxrQkyiaUpdwM0= -gopkg.in/DataDog/dd-trace-go.v1 v1.67.0/go.mod h1:6DdiJPKOeJfZyd/IUGCAd5elY8qPGkztK6wbYYsMjag= +gopkg.in/DataDog/dd-trace-go.v1 v1.68.0 h1:8WPoOHJcMAtcxTVKM0DYnFweBjxxfNit3Sjo/rf+Hkw= +gopkg.in/DataDog/dd-trace-go.v1 v1.68.0/go.mod h1:mkZpWVLO/ERW5NqlW+w5d8waQKNvMSTUQLJfoI0vlvw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1272,14 +1270,26 @@ howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= inet.af/peercred v0.0.0-20210906144145-0893ea02156a h1:qdkS8Q5/i10xU2ArJMKYhVa1DORzBfYS/qA2UK2jheg= inet.af/peercred v0.0.0-20210906144145-0893ea02156a/go.mod h1:FjawnflS/udxX+SvpsMgZfdqx2aykOlkISeAsADi5IU= +lukechampine.com/uint128 v1.3.0 h1:cDdUVfRwDUDovz610ABgFD17nXD4/uDgVHl2sC3+sbo= +lukechampine.com/uint128 v1.3.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.41.0 h1:QoR1Sn3YWlmA1T4vLaKZfawdVtSiGx8H+cEojbC7v1Q= +modernc.org/cc/v3 v3.41.0/go.mod h1:Ni4zjJYJ04CDOhG7dn640WGfwBzfE0ecX8TyMB0Fv0Y= +modernc.org/ccgo/v3 v3.16.15 h1:KbDR3ZAVU+wiLyMESPtbtE/Add4elztFyfsWoNTgxS0= +modernc.org/ccgo/v3 v3.16.15/go.mod h1:yT7B+/E2m43tmMOT51GMoM98/MtHIcQQSleGnddkUNI= modernc.org/libc v1.37.6 h1:orZH3c5wmhIQFTXF+Nt+eeauyd+ZIt2BX6ARe+kD+aw= modernc.org/libc v1.37.6/go.mod h1:YAXkAZ8ktnkCKaN9sw/UDeUVkGYJ/YquGO4FTi5nmHE= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E= modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sqlite v1.28.0 h1:Zx+LyDDmXczNnEQdvPuEfcFVA2ZPyaD7UCZDjef3BHQ= modernc.org/sqlite v1.28.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/offlinedocs/package.json b/offlinedocs/package.json index 2975c0c7847f8..d217203369cbd 100644 --- a/offlinedocs/package.json +++ b/offlinedocs/package.json @@ -20,7 +20,7 @@ "framer-motion": "^10.18.0", "front-matter": "4.0.2", "lodash": "4.17.21", - "next": "14.2.10", + "next": "14.2.14", "react": "18.3.1", "react-dom": "18.3.1", "react-icons": "4.12.0", @@ -30,13 +30,13 @@ }, "devDependencies": { "@types/lodash": "4.14.196", - "@types/node": "20.14.8", - "@types/react": "18.3.3", + "@types/node": "20.16.10", + "@types/react": "18.3.10", "@types/react-dom": "18.3.0", - "eslint": "8.57.0", - "eslint-config-next": "14.2.7", + "eslint": "8.57.1", + "eslint-config-next": "14.2.13", "prettier": "3.3.3", - "typescript": "5.5.4" + "typescript": "5.6.2" }, "engines": { "npm": ">=9.0.0 <10.0.0", diff --git a/offlinedocs/pnpm-lock.yaml b/offlinedocs/pnpm-lock.yaml index d7b2fff07c583..4279ba7c85d0c 100644 --- a/offlinedocs/pnpm-lock.yaml +++ b/offlinedocs/pnpm-lock.yaml @@ -10,13 +10,13 @@ importers: dependencies: '@chakra-ui/react': specifier: 2.8.2 - version: 2.8.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.8.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@emotion/react': specifier: 11.13.3 - version: 11.13.3(@types/react@18.3.3)(react@18.3.1) + version: 11.13.3(@types/react@18.3.10)(react@18.3.1) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) archiver: specifier: 6.0.2 version: 6.0.2 @@ -30,8 +30,8 @@ importers: specifier: 4.17.21 version: 4.17.21 next: - specifier: 14.2.10 - version: 14.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.14 + version: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -43,7 +43,7 @@ importers: version: 4.12.0(react@18.3.1) react-markdown: specifier: 9.0.1 - version: 9.0.1(@types/react@18.3.3)(react@18.3.1) + version: 9.0.1(@types/react@18.3.10)(react@18.3.1) rehype-raw: specifier: 7.0.0 version: 7.0.0 @@ -55,26 +55,26 @@ importers: specifier: 4.14.196 version: 4.14.196 '@types/node': - specifier: 20.14.8 - version: 20.14.8 + specifier: 20.16.10 + version: 20.16.10 '@types/react': - specifier: 18.3.3 - version: 18.3.3 + specifier: 18.3.10 + version: 18.3.10 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 8.57.1 + version: 8.57.1 eslint-config-next: - specifier: 14.2.7 - version: 14.2.7(eslint@8.57.0)(typescript@5.5.4) + specifier: 14.2.13 + version: 14.2.13(eslint@8.57.1)(typescript@5.6.2) prettier: specifier: 3.3.3 version: 3.3.3 typescript: - specifier: 5.5.4 - version: 5.5.4 + specifier: 5.6.2 + version: 5.6.2 packages: @@ -674,12 +674,12 @@ packages: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -713,62 +713,62 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@next/env@14.2.10': - resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==} + '@next/env@14.2.14': + resolution: {integrity: sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==} - '@next/eslint-plugin-next@14.2.7': - resolution: {integrity: sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==} + '@next/eslint-plugin-next@14.2.13': + resolution: {integrity: sha512-z8Mk0VljxhIzsSiZUSdt3wp+t2lKd+jk5a9Jsvh3zDGkItgDMfjv/ZbET6HsxEl/fSihVoHGsXV6VLyDH0lfTQ==} - '@next/swc-darwin-arm64@14.2.10': - resolution: {integrity: sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==} + '@next/swc-darwin-arm64@14.2.14': + resolution: {integrity: sha512-bsxbSAUodM1cjYeA4o6y7sp9wslvwjSkWw57t8DtC8Zig8aG8V6r+Yc05/9mDzLKcybb6EN85k1rJDnMKBd9Gw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.10': - resolution: {integrity: sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==} + '@next/swc-darwin-x64@14.2.14': + resolution: {integrity: sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.10': - resolution: {integrity: sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==} + '@next/swc-linux-arm64-gnu@14.2.14': + resolution: {integrity: sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.10': - resolution: {integrity: sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==} + '@next/swc-linux-arm64-musl@14.2.14': + resolution: {integrity: sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.10': - resolution: {integrity: sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==} + '@next/swc-linux-x64-gnu@14.2.14': + resolution: {integrity: sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.10': - resolution: {integrity: sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==} + '@next/swc-linux-x64-musl@14.2.14': + resolution: {integrity: sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.10': - resolution: {integrity: sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==} + '@next/swc-win32-arm64-msvc@14.2.14': + resolution: {integrity: sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.10': - resolution: {integrity: sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==} + '@next/swc-win32-ia32-msvc@14.2.14': + resolution: {integrity: sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.10': - resolution: {integrity: sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==} + '@next/swc-win32-x64-msvc@14.2.14': + resolution: {integrity: sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -832,20 +832,20 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.14.8': - resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} + '@types/node@20.16.10': + resolution: {integrity: sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@18.3.10': + resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -853,6 +853,17 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@5.62.0': resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -867,10 +878,27 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -880,10 +908,29 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1139,9 +1186,6 @@ packages: css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1156,15 +1200,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -1272,8 +1307,8 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-next@14.2.7: - resolution: {integrity: sha512-ppmy+QdQ7qkuCHGDlPjWaoSbJvjGpWSBD4zEW8f1eWlxYXYpZK7QzBOer1EcHKT3uKhlY1JjUus9g7Kvv712rw==} + eslint-config-next@14.2.13: + resolution: {integrity: sha512-aro1EKAoyYchnO/3Tlo91hnNBO7QO7qnv/79MAFC+4Jq8TdUVKQlht5d2F+YjrePjdpOvfL+mV9JPfyYNwkk1g==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -1348,8 +1383,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -1402,6 +1437,10 @@ packages: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1464,9 +1503,6 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1618,8 +1654,8 @@ packages: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} - ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -1674,9 +1710,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -2073,8 +2106,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@14.2.10: - resolution: {integrity: sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==} + next@14.2.14: + resolution: {integrity: sha512-Q1coZG17MW0Ly5x76shJ4dkC23woLAhhnDnw+DfTc7EpZSGuWrlsZ3bZaO8t6u1Yu8FVfhkqJE+U8GC7E0GLPQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -2356,10 +2389,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2409,6 +2438,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} @@ -2586,6 +2620,12 @@ packages: trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -2627,16 +2667,16 @@ packages: typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} @@ -2815,69 +2855,69 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/descendant': 3.1.0(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/anatomy@2.2.2': {} - '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/breakpoint-utils@2.0.8': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) @@ -2886,8 +2926,8 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@zag-js/focus-visible': 0.16.0 react: 18.3.1 @@ -2897,10 +2937,10 @@ snapshots: '@chakra-ui/shared-utils': 2.0.5 react: 18.3.1 - '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/color-mode@2.2.0(react@18.3.1)': @@ -2908,9 +2948,9 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) react: 18.3.1 - '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/counter@2.1.0(react@18.3.1)': @@ -2920,9 +2960,9 @@ snapshots: '@chakra-ui/shared-utils': 2.0.5 react: 18.3.1 - '@chakra-ui/css-reset@2.3.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)': + '@chakra-ui/css-reset@2.3.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(react@18.3.1)': dependencies: - '@emotion/react': 11.13.3(@types/react@18.3.3)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 '@chakra-ui/descendant@3.1.0(react@18.3.1)': @@ -2933,7 +2973,7 @@ snapshots: '@chakra-ui/dom-utils@2.1.0': {} - '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) @@ -2944,27 +2984,27 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/event-utils@2.0.8': {} - '@chakra-ui/focus-lock@2.1.0(@types/react@18.3.3)(react@18.3.1)': + '@chakra-ui/focus-lock@2.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: '@chakra-ui/dom-utils': 2.1.0 react: 18.3.1 - react-focus-lock: 2.9.5(@types/react@18.3.3)(react@18.3.1) + react-focus-lock: 2.9.5(@types/react@18.3.10)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/hooks@2.2.1(react@18.3.1)': @@ -2975,38 +3015,38 @@ snapshots: copy-to-clipboard: 3.3.3 react: 18.3.1 - '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/breakpoint-utils': 2.0.8 - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/lazy-utils@2.0.5': {} @@ -3015,15 +3055,15 @@ snapshots: dependencies: react: 18.3.1 - '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/breakpoint-utils': 2.0.8 '@chakra-ui/react-env': 3.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1) @@ -3039,35 +3079,35 @@ snapshots: '@chakra-ui/react-use-outside-click': 2.2.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.10)(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.3 framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.6(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.5.6(@types/react@18.3.10)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/counter': 2.1.0(react@18.3.1) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) @@ -3077,14 +3117,14 @@ snapshots: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/number-utils@2.0.7': {} '@chakra-ui/object-utils@2.1.0': {} - '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/descendant': 3.1.0(react@18.3.1) '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) @@ -3092,12 +3132,12 @@ snapshots: '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/lazy-utils': 2.0.5 '@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) @@ -3108,7 +3148,7 @@ snapshots: '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 @@ -3126,32 +3166,32 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/provider@2.4.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/provider@2.4.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.13.3(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-types': 2.0.7(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@zag-js/focus-visible': 0.16.0 react: 18.3.1 @@ -3262,92 +3302,92 @@ snapshots: '@chakra-ui/utils': 2.0.15 react: 18.3.1 - '@chakra-ui/react@2.8.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react@2.8.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/counter': 2.1.0(react@18.3.1) - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) - '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.3)(react@18.3.1) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) + '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.10)(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/hooks': 2.2.1(react@18.3.1) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/live-region': 2.1.0(react@18.3.1) - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/popper': 3.1.0(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/provider': 2.4.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/provider': 2.4.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-env': 3.1.0(react@18.3.1) - '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) - '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) + '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) '@chakra-ui/theme-utils': 2.0.21 - '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/transition': 2.1.0(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/utils': 2.0.15 - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@emotion/react': 11.13.3(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/shared-utils@2.0.5': {} - '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-use-previous': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/number-utils': 2.0.7 '@chakra-ui/react-context': 2.1.0(react@18.3.1) @@ -3359,29 +3399,29 @@ snapshots: '@chakra-ui/react-use-pan-event': 2.1.0(react@18.3.1) '@chakra-ui/react-use-size': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/styled-system@2.9.2': @@ -3390,15 +3430,15 @@ snapshots: csstype: 3.1.3 lodash.mergewith: 4.6.2 - '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)': + '@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/color-mode': 2.2.0(react@18.3.1) '@chakra-ui/object-utils': 2.1.0 @@ -3406,19 +3446,19 @@ snapshots: '@chakra-ui/styled-system': 2.9.2 '@chakra-ui/theme-utils': 2.0.21 '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.13.3(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-fast-compare: 3.2.2 - '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/clickable': 2.1.0(react@18.3.1) '@chakra-ui/descendant': 3.1.0(react@18.3.1) @@ -3429,21 +3469,21 @@ snapshots: '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2)': @@ -3467,23 +3507,23 @@ snapshots: '@chakra-ui/styled-system': 2.9.2 '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) - '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1) '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react-context': 2.1.0(react@18.3.1) '@chakra-ui/react-use-timeout': 2.1.0(react@18.3.1) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@chakra-ui/dom-utils': 2.1.0 '@chakra-ui/popper': 3.1.0(react@18.3.1) @@ -3493,7 +3533,7 @@ snapshots: '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -3511,9 +3551,9 @@ snapshots: framesync: 6.1.2 lodash.mergewith: 4.6.2 - '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) react: 18.3.1 '@emotion/babel-plugin@11.12.0': @@ -3556,7 +3596,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1)': + '@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 @@ -3568,7 +3608,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 transitivePeerDependencies: - supports-color @@ -3582,18 +3622,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(@types/react@18.3.3)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) '@emotion/serialize': 1.3.1 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) '@emotion/utils': 1.4.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 transitivePeerDependencies: - supports-color @@ -3607,9 +3647,9 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.10.0': {} @@ -3617,10 +3657,10 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.6 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -3628,12 +3668,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3668,37 +3708,37 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@next/env@14.2.10': {} + '@next/env@14.2.14': {} - '@next/eslint-plugin-next@14.2.7': + '@next/eslint-plugin-next@14.2.13': dependencies: glob: 10.3.10 - '@next/swc-darwin-arm64@14.2.10': + '@next/swc-darwin-arm64@14.2.14': optional: true - '@next/swc-darwin-x64@14.2.10': + '@next/swc-darwin-x64@14.2.14': optional: true - '@next/swc-linux-arm64-gnu@14.2.10': + '@next/swc-linux-arm64-gnu@14.2.14': optional: true - '@next/swc-linux-arm64-musl@14.2.10': + '@next/swc-linux-arm64-musl@14.2.14': optional: true - '@next/swc-linux-x64-gnu@14.2.10': + '@next/swc-linux-x64-gnu@14.2.14': optional: true - '@next/swc-linux-x64-musl@14.2.10': + '@next/swc-linux-x64-musl@14.2.14': optional: true - '@next/swc-win32-arm64-msvc@14.2.10': + '@next/swc-win32-arm64-msvc@14.2.14': optional: true - '@next/swc-win32-ia32-msvc@14.2.10': + '@next/swc-win32-ia32-msvc@14.2.14': optional: true - '@next/swc-win32-x64-msvc@14.2.10': + '@next/swc-win32-x64-msvc@14.2.14': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3764,36 +3804,54 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.14.8': + '@types/node@20.16.10': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.5': {} + '@types/prop-types@15.7.13': {} '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 - '@types/react@18.3.3': + '@types/react@18.3.10': dependencies: - '@types/prop-types': 15.7.5 - csstype: 3.1.2 + '@types/prop-types': 15.7.13 + csstype: 3.1.3 '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} - '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - debug: 4.3.4 - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + debug: 4.3.6 + eslint: 8.57.1 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -3802,27 +3860,77 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/scope-manager@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + + '@typescript-eslint/type-utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.6 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)': + '@typescript-eslint/types@8.8.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.5.4) + tsutils: 3.21.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.6 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.0': {} '@zag-js/dom-query@0.16.0': {} @@ -4009,7 +4117,7 @@ snapshots: call-bind@1.0.2: dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.1 callsites@3.1.0: {} @@ -4099,8 +4207,6 @@ snapshots: dependencies: tiny-invariant: 1.3.1 - csstype@3.1.2: {} - csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} @@ -4109,10 +4215,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.3.6: dependencies: ms: 2.1.2 @@ -4235,7 +4337,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.1 es-set-tostringtag: 2.0.1 - function-bind: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.1 globalthis: 1.0.3 has-property-descriptors: 1.0.0 @@ -4267,20 +4369,21 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@14.2.7(eslint@8.57.0)(typescript@5.5.4): + eslint-config-next@14.2.13(eslint@8.57.1)(typescript@5.6.2): dependencies: - '@next/eslint-plugin-next': 14.2.7 + '@next/eslint-plugin-next': 14.2.13 '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.1) + eslint-plugin-react: 7.33.2(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.1) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -4288,21 +4391,21 @@ snapshots: eslint-import-resolver-node@0.3.7: dependencies: debug: 3.2.7 - is-core-module: 2.13.0 - resolve: 1.22.2 + is-core-module: 2.15.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0): + eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1): dependencies: - debug: 4.3.4 + debug: 4.3.6 enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) + eslint: 8.57.1 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.1) get-tsconfig: 4.6.2 globby: 13.2.2 - is-core-module: 2.13.0 + is-core-module: 2.15.1 is-glob: 4.0.3 synckit: 0.8.5 transitivePeerDependencies: @@ -4311,18 +4414,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0): + eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.1): dependencies: array-includes: 3.1.6 array.prototype.findlastindex: 1.2.3 @@ -4330,11 +4433,11 @@ snapshots: array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.1)(eslint@8.57.1))(eslint@8.57.1) has: 1.0.3 - is-core-module: 2.13.0 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.6 @@ -4343,13 +4446,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.14.2 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.7.1(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.7.1(eslint@8.57.1): dependencies: '@babel/runtime': 7.25.6 aria-query: 5.3.0 @@ -4360,7 +4463,7 @@ snapshots: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.0 + eslint: 8.57.1 has: 1.0.3 jsx-ast-utils: 3.3.4 language-tags: 1.0.5 @@ -4369,18 +4472,18 @@ snapshots: object.fromentries: 2.0.6 semver: 6.3.1 - eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + eslint-plugin-react-hooks@4.6.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 - eslint-plugin-react@7.33.2(eslint@8.57.0): + eslint-plugin-react@7.33.2(eslint@8.57.1): dependencies: array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.57.0 + eslint: 8.57.1 estraverse: 5.3.0 jsx-ast-utils: 3.3.4 minimatch: 3.1.2 @@ -4400,20 +4503,20 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4427,7 +4530,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4503,6 +4606,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.5 + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -4565,8 +4676,6 @@ snapshots: fs.realpath@1.0.0: {} - function-bind@1.1.1: {} - function-bind@1.1.2: {} function.prototype.name@1.1.5: @@ -4580,7 +4689,7 @@ snapshots: get-intrinsic@1.2.1: dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -4646,7 +4755,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.1 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -4654,7 +4763,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.1 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -4686,7 +4795,7 @@ snapshots: has@1.0.3: dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 hasown@2.0.2: dependencies: @@ -4777,7 +4886,7 @@ snapshots: human-signals@4.3.1: {} - ignore@5.3.0: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -4835,10 +4944,6 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.0: - dependencies: - has: 1.0.3 - is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -5356,7 +5461,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.6 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -5408,9 +5513,9 @@ snapshots: natural-compare@1.4.0: {} - next@14.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.10 + '@next/env': 14.2.14 '@swc/helpers': 0.5.5 busboy: 1.6.0 caniuse-lite: 1.0.30001639 @@ -5420,15 +5525,15 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.10 - '@next/swc-darwin-x64': 14.2.10 - '@next/swc-linux-arm64-gnu': 14.2.10 - '@next/swc-linux-arm64-musl': 14.2.10 - '@next/swc-linux-x64-gnu': 14.2.10 - '@next/swc-linux-x64-musl': 14.2.10 - '@next/swc-win32-arm64-msvc': 14.2.10 - '@next/swc-win32-ia32-msvc': 14.2.10 - '@next/swc-win32-x64-msvc': 14.2.10 + '@next/swc-darwin-arm64': 14.2.14 + '@next/swc-darwin-x64': 14.2.14 + '@next/swc-linux-arm64-gnu': 14.2.14 + '@next/swc-linux-arm64-musl': 14.2.14 + '@next/swc-linux-x64-gnu': 14.2.14 + '@next/swc-linux-x64-musl': 14.2.14 + '@next/swc-win32-arm64-msvc': 14.2.14 + '@next/swc-win32-ia32-msvc': 14.2.14 + '@next/swc-win32-x64-msvc': 14.2.14 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -5608,17 +5713,17 @@ snapshots: react-fast-compare@3.2.2: {} - react-focus-lock@2.9.5(@types/react@18.3.3)(react@18.3.1): + react-focus-lock@2.9.5(@types/react@18.3.10)(react@18.3.1): dependencies: '@babel/runtime': 7.25.6 focus-lock: 0.11.6 prop-types: 15.8.1 react: 18.3.1 react-clientside-effect: 1.2.6(react@18.3.1) - use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + use-callback-ref: 1.3.0(@types/react@18.3.10)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.10)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 react-icons@4.12.0(react@18.3.1): dependencies: @@ -5626,10 +5731,10 @@ snapshots: react-is@16.13.1: {} - react-markdown@9.0.1(@types/react@18.3.3)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.10)(react@18.3.1): dependencies: '@types/hast': 3.0.3 - '@types/react': 18.3.3 + '@types/react': 18.3.10 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 @@ -5643,33 +5748,33 @@ snapshots: transitivePeerDependencies: - supports-color - react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll-bar@2.3.4(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.10)(react@18.3.1) tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 - react-remove-scroll@2.5.6(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll@2.5.6(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll-bar: 2.3.4(@types/react@18.3.10)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.10)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + use-callback-ref: 1.3.0(@types/react@18.3.10)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.10)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 - react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.10)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 react@18.3.1: dependencies: @@ -5756,12 +5861,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.2: - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: is-core-module: 2.15.1 @@ -5770,7 +5869,7 @@ snapshots: resolve@2.0.0-next.4: dependencies: - is-core-module: 2.13.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5815,6 +5914,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.0 @@ -5985,6 +6086,10 @@ snapshots: trough@2.1.0: {} + ts-api-utils@1.3.0(typescript@5.6.2): + dependencies: + typescript: 5.6.2 + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 @@ -5998,10 +6103,10 @@ snapshots: tslib@2.6.2: {} - tsutils@3.21.0(typescript@5.5.4): + tsutils@3.21.0(typescript@5.6.2): dependencies: tslib: 1.14.1 - typescript: 5.5.4 + typescript: 5.6.2 type-check@0.4.0: dependencies: @@ -6036,7 +6141,7 @@ snapshots: for-each: 0.3.3 is-typed-array: 1.1.12 - typescript@5.5.4: {} + typescript@5.6.2: {} unbox-primitive@1.0.2: dependencies: @@ -6045,7 +6150,7 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@5.26.5: {} + undici-types@6.19.8: {} unified@11.0.4: dependencies: @@ -6091,20 +6196,20 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.0(@types/react@18.3.3)(react@18.3.1): + use-callback-ref@1.3.0(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 - use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.10)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.10 util-deprecate@1.0.2: {} diff --git a/scripts/apidocgen/postprocess/main.go b/scripts/apidocgen/postprocess/main.go index eee0a1cfe2feb..e7645b2264657 100644 --- a/scripts/apidocgen/postprocess/main.go +++ b/scripts/apidocgen/postprocess/main.go @@ -169,12 +169,12 @@ func writeDocs(sections [][]byte) error { // Update manifest.json type route struct { - Title string `json:"title,omitempty"` - Description string `json:"description,omitempty"` - Path string `json:"path,omitempty"` - IconPath string `json:"icon_path,omitempty"` - State string `json:"state,omitempty"` - Children []route `json:"children,omitempty"` + Title string `json:"title,omitempty"` + Description string `json:"description,omitempty"` + Path string `json:"path,omitempty"` + IconPath string `json:"icon_path,omitempty"` + State []string `json:"state,omitempty"` + Children []route `json:"children,omitempty"` } type manifest struct { diff --git a/scripts/clidocgen/main.go b/scripts/clidocgen/main.go index a5a48a9311df2..68b97b7f19a3c 100644 --- a/scripts/clidocgen/main.go +++ b/scripts/clidocgen/main.go @@ -14,12 +14,12 @@ import ( // route is an individual page object in the docs manifest.json. type route struct { - Title string `json:"title,omitempty"` - Description string `json:"description,omitempty"` - Path string `json:"path,omitempty"` - IconPath string `json:"icon_path,omitempty"` - State string `json:"state,omitempty"` - Children []route `json:"children,omitempty"` + Title string `json:"title,omitempty"` + Description string `json:"description,omitempty"` + Path string `json:"path,omitempty"` + IconPath string `json:"icon_path,omitempty"` + State []string `json:"state,omitempty"` + Children []route `json:"children,omitempty"` } // manifest describes the entire documentation index. diff --git a/scripts/examplegen/main.go b/scripts/examplegen/main.go index 742d27b05ae2e..97ff02db82c93 100644 --- a/scripts/examplegen/main.go +++ b/scripts/examplegen/main.go @@ -98,7 +98,7 @@ func run(lint bool) error { } enc := json.NewEncoder(w) - enc.SetIndent("", " ") + enc.SetIndent("", "\t") return enc.Encode(examples) } diff --git a/scripts/remote_playwright.sh b/scripts/remote_playwright.sh index 92cce9b69d331..ddc9df6acea15 100755 --- a/scripts/remote_playwright.sh +++ b/scripts/remote_playwright.sh @@ -17,7 +17,14 @@ main() { # between the server and client, and the protocol changes between versions. echo "Checking Playwright version from \"${workspace}\"..." # shellcheck disable=SC2029 # This is intended to expand client-side. - playwright_version="$(ssh "coder.${workspace}" "cat '${coder_repo}'/site/pnpm-lock.yaml | grep '^ /@playwright/test@' | cut -d '@' -f 3 | tr -d ':'")" + playwright_version=$( + ssh "coder.${workspace}" \ + "cat '${coder_repo}'/site/pnpm-lock.yaml | grep \"^ '@playwright/test@\"" | + cut -d '@' -f 3 | + tr -d ":'" | + sort -V | + tail -n 1 + ) echo "Found Playwright version ${playwright_version}..." diff --git a/site/biome.json b/site/biome.json index 9a71b3a3b8308..76d68260d1028 100644 --- a/site/biome.json +++ b/site/biome.json @@ -6,7 +6,8 @@ "rules": { "a11y": { "noSvgWithoutTitle": { "level": "off" }, - "useButtonType": { "level": "off" } + "useButtonType": { "level": "off" }, + "useSemanticElements": { "level": "off" } }, "style": { "noNonNullAssertion": { "level": "off" }, diff --git a/site/package.json b/site/package.json index e38d6503ea2d1..dc2d5f7788b71 100644 --- a/site/package.json +++ b/site/package.json @@ -36,7 +36,7 @@ "@alwaysmeticulous/recorder-loader": "2.137.0", "@emoji-mart/data": "1.2.1", "@emoji-mart/react": "1.1.1", - "@emotion/css": "11.13.0", + "@emotion/css": "11.13.4", "@emotion/react": "11.13.3", "@emotion/styled": "11.13.0", "@fastly/performance-observer-polyfill": "2.0.0", @@ -48,7 +48,7 @@ "@mui/material": "5.16.7", "@mui/system": "5.16.7", "@mui/utils": "5.16.6", - "@mui/x-tree-view": "7.13.0", + "@mui/x-tree-view": "7.18.0", "@tanstack/react-query-devtools": "4.35.3", "@xterm/addon-canvas": "0.7.0", "@xterm/addon-fit": "0.10.0", @@ -85,7 +85,7 @@ "react-helmet-async": "2.0.5", "react-markdown": "9.0.1", "react-query": "npm:@tanstack/react-query@4.35.3", - "react-router-dom": "6.24.0", + "react-router-dom": "6.26.2", "react-syntax-highlighter": "15.5.0", "react-virtualized-auto-sizer": "1.0.24", "react-window": "1.8.10", @@ -101,10 +101,10 @@ "yup": "1.4.0" }, "devDependencies": { - "@biomejs/biome": "1.8.3", - "@chromatic-com/storybook": "1.6.0", + "@biomejs/biome": "1.9.3", + "@chromatic-com/storybook": "1.9.0", "@octokit/types": "12.3.0", - "@playwright/test": "1.40.1", + "@playwright/test": "1.47.2", "@storybook/addon-actions": "8.1.11", "@storybook/addon-essentials": "8.1.11", "@storybook/addon-interactions": "8.1.11", @@ -125,13 +125,13 @@ "@types/color-convert": "2.0.0", "@types/express": "4.17.17", "@types/file-saver": "2.0.7", - "@types/jest": "29.5.12", - "@types/lodash": "4.17.6", - "@types/node": "20.14.8", - "@types/react": "18.2.6", + "@types/jest": "29.5.13", + "@types/lodash": "4.17.9", + "@types/node": "20.16.10", + "@types/react": "18.3.10", "@types/react-color": "3.0.6", "@types/react-date-range": "1.4.4", - "@types/react-dom": "18.2.4", + "@types/react-dom": "18.3.0", "@types/react-syntax-highlighter": "15.5.13", "@types/react-virtualized-auto-sizer": "1.0.4", "@types/react-window": "1.8.8", @@ -155,17 +155,21 @@ "rxjs": "7.8.1", "ssh2": "1.15.0", "storybook": "8.1.11", - "storybook-addon-remix-react-router": "3.0.0", + "storybook-addon-remix-react-router": "3.0.1", "storybook-react-context": "0.6.0", "ts-node": "10.9.1", "ts-proto": "1.164.0", "ts-prune": "0.10.3", - "typescript": "5.5.4", + "typescript": "5.6.2", "vite": "5.4.6", "vite-plugin-checker": "0.7.2", "vite-plugin-turbosnap": "1.0.3" }, - "browserslist": ["chrome 110", "firefox 111", "safari 16.0"], + "browserslist": [ + "chrome 110", + "firefox 111", + "safari 16.0" + ], "resolutions": { "optionator": "0.9.3", "semver": "7.6.2" diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index 796530c3b1d63..4c9ab8465db27 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -22,14 +22,14 @@ importers: specifier: 1.1.1 version: 1.1.1(emoji-mart@5.6.0)(react@18.3.1) '@emotion/css': - specifier: 11.13.0 - version: 11.13.0 + specifier: 11.13.4 + version: 11.13.4 '@emotion/react': specifier: 11.13.3 - version: 11.13.3(@types/react@18.2.6)(react@18.3.1) + version: 11.13.3(@types/react@18.3.10)(react@18.3.1) '@emotion/styled': specifier: 11.13.0 - version: 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) '@fastly/performance-observer-polyfill': specifier: 2.0.0 version: 2.0.0 @@ -44,22 +44,22 @@ importers: version: 4.6.0(monaco-editor@0.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/icons-material': specifier: 5.16.7 - version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) '@mui/lab': specifier: 5.0.0-alpha.173 - version: 5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/material': specifier: 5.16.7 - version: 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/system': specifier: 5.16.7 - version: 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) + version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) '@mui/utils': specifier: 5.16.6 - version: 5.16.6(@types/react@18.2.6)(react@18.3.1) + version: 5.16.6(@types/react@18.3.10)(react@18.3.1) '@mui/x-tree-view': - specifier: 7.13.0 - version: 7.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 7.18.0 + version: 7.18.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query-devtools': specifier: 4.35.3 version: 4.35.3(@tanstack/react-query@4.35.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -164,13 +164,13 @@ importers: version: 2.0.5(react@18.3.1) react-markdown: specifier: 9.0.1 - version: 9.0.1(@types/react@18.2.6)(react@18.3.1) + version: 9.0.1(@types/react@18.3.10)(react@18.3.1) react-query: specifier: npm:@tanstack/react-query@4.35.3 version: '@tanstack/react-query@4.35.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' react-router-dom: - specifier: 6.24.0 - version: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 6.26.2 + version: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: specifier: 15.5.0 version: 15.5.0(react@18.3.1) @@ -212,26 +212,26 @@ importers: version: 1.4.0 devDependencies: '@biomejs/biome': - specifier: 1.8.3 - version: 1.8.3 + specifier: 1.9.3 + version: 1.9.3 '@chromatic-com/storybook': - specifier: 1.6.0 - version: 1.6.0(react@18.3.1) + specifier: 1.9.0 + version: 1.9.0(react@18.3.1) '@octokit/types': specifier: 12.3.0 version: 12.3.0 '@playwright/test': - specifier: 1.40.1 - version: 1.40.1 + specifier: 1.47.2 + version: 1.47.2 '@storybook/addon-actions': specifier: 8.1.11 version: 8.1.11 '@storybook/addon-essentials': specifier: 8.1.11 - version: 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: 8.1.11 - version: 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))) + version: 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))) '@storybook/addon-links': specifier: 8.1.11 version: 8.1.11(react@18.3.1) @@ -246,13 +246,13 @@ importers: version: 8.1.11 '@storybook/react': specifier: 8.1.11 - version: 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@storybook/react-vite': specifier: 8.1.11 - version: 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.20.0)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8)) + version: 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.20.0)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10)) '@storybook/test': specifier: 8.1.11 - version: 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))) + version: 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))) '@swc/core': specifier: 1.3.38 version: 1.3.38 @@ -261,13 +261,13 @@ importers: version: 0.2.24(@swc/core@1.3.38) '@testing-library/jest-dom': specifier: 6.4.6 - version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))) + version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))) '@testing-library/react': specifier: 14.1.0 version: 14.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/react-hooks': specifier: 8.0.1 - version: 8.0.1(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.0.1(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: 14.5.1 version: 14.5.1(@testing-library/dom@10.1.0) @@ -284,17 +284,17 @@ importers: specifier: 2.0.7 version: 2.0.7 '@types/jest': - specifier: 29.5.12 - version: 29.5.12 + specifier: 29.5.13 + version: 29.5.13 '@types/lodash': - specifier: 4.17.6 - version: 4.17.6 + specifier: 4.17.9 + version: 4.17.9 '@types/node': - specifier: 20.14.8 - version: 20.14.8 + specifier: 20.16.10 + version: 20.16.10 '@types/react': - specifier: 18.2.6 - version: 18.2.6 + specifier: 18.3.10 + version: 18.3.10 '@types/react-color': specifier: 3.0.6 version: 3.0.6 @@ -302,8 +302,8 @@ importers: specifier: 1.4.4 version: 1.4.4 '@types/react-dom': - specifier: 18.2.4 - version: 18.2.4 + specifier: 18.3.0 + version: 18.3.0 '@types/react-syntax-highlighter': specifier: 15.5.13 version: 15.5.13 @@ -327,7 +327,7 @@ importers: version: 9.0.2 '@vitejs/plugin-react': specifier: 4.3.1 - version: 4.3.1(vite@5.4.6(@types/node@20.14.8)) + version: 4.3.1(vite@5.4.6(@types/node@20.16.10)) chromatic: specifier: 11.3.0 version: 11.3.0 @@ -339,7 +339,7 @@ importers: version: 4.20.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + version: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) jest-canvas-mock: specifier: 2.5.2 version: 2.5.2 @@ -357,7 +357,7 @@ importers: version: 0.1.14(@swc/core@1.3.38)(@swc/jest@0.2.24(@swc/core@1.3.38)) msw: specifier: 2.3.5 - version: 2.3.5(typescript@5.5.4) + version: 2.3.5(typescript@5.6.2) prettier: specifier: 3.3.3 version: 3.3.3 @@ -374,14 +374,14 @@ importers: specifier: 8.1.11 version: 8.1.11(@babel/preset-env@7.24.7(@babel/core@7.24.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook-addon-remix-react-router: - specifier: 3.0.0 - version: 3.0.0(@storybook/blocks@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/channels@8.1.11)(@storybook/components@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/core-events@8.1.11)(@storybook/manager-api@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/preview-api@8.1.11)(@storybook/theming@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: 3.0.1 + version: 3.0.1(@storybook/blocks@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/channels@8.1.11)(@storybook/components@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/core-events@8.1.11)(@storybook/manager-api@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/preview-api@8.1.11)(@storybook/theming@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) storybook-react-context: specifier: 0.6.0 version: 0.6.0(react-dom@18.3.1(react@18.3.1)) ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4) + version: 10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2) ts-proto: specifier: 1.164.0 version: 1.164.0 @@ -389,14 +389,14 @@ importers: specifier: 0.10.3 version: 0.10.3 typescript: - specifier: 5.5.4 - version: 5.5.4 + specifier: 5.6.2 + version: 5.6.2 vite: specifier: 5.4.6 - version: 5.4.6(@types/node@20.14.8) + version: 5.4.6(@types/node@20.16.10) vite-plugin-checker: specifier: 0.7.2 - version: 0.7.2(@biomejs/biome@1.8.3)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8)) + version: 0.7.2(@biomejs/biome@1.9.3)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10)) vite-plugin-turbosnap: specifier: 1.0.3 version: 1.0.3 @@ -452,8 +452,8 @@ packages: resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.4': - resolution: {integrity: sha512-NFtZmZsyzDPJnk9Zg3BbTfKKc9UlHYzD0E//p2Z3B9nCwwtJW9T0gVbCz8+fBngnn4zf1Dr3IK8PHQQHq0lDQw==} + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.22.5': @@ -637,8 +637,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.25.4': - resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -1181,6 +1181,10 @@ packages: resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + '@babel/template@7.24.7': resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} @@ -1193,8 +1197,8 @@ packages: resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.4': - resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} '@babel/types@7.24.7': @@ -1205,8 +1209,8 @@ packages: resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.4': - resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@base2/pretty-print-object@1.0.1': @@ -1215,55 +1219,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@1.8.3': - resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==} + '@biomejs/biome@1.9.3': + resolution: {integrity: sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.8.3': - resolution: {integrity: sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==} + '@biomejs/cli-darwin-arm64@1.9.3': + resolution: {integrity: sha512-QZzD2XrjJDUyIZK+aR2i5DDxCJfdwiYbUKu9GzkCUJpL78uSelAHAPy7m0GuPMVtF/Uo+OKv97W3P9nuWZangQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.8.3': - resolution: {integrity: sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==} + '@biomejs/cli-darwin-x64@1.9.3': + resolution: {integrity: sha512-vSCoIBJE0BN3SWDFuAY/tRavpUtNoqiceJ5PrU3xDfsLcm/U6N93JSM0M9OAiC/X7mPPfejtr6Yc9vSgWlEgVw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.8.3': - resolution: {integrity: sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==} + '@biomejs/cli-linux-arm64-musl@1.9.3': + resolution: {integrity: sha512-VBzyhaqqqwP3bAkkBrhVq50i3Uj9+RWuj+pYmXrMDgjS5+SKYGE56BwNw4l8hR3SmYbLSbEo15GcV043CDSk+Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.8.3': - resolution: {integrity: sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==} + '@biomejs/cli-linux-arm64@1.9.3': + resolution: {integrity: sha512-vJkAimD2+sVviNTbaWOGqEBy31cW0ZB52KtpVIbkuma7PlfII3tsLhFa+cwbRAcRBkobBBhqZ06hXoZAN8NODQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.8.3': - resolution: {integrity: sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==} + '@biomejs/cli-linux-x64-musl@1.9.3': + resolution: {integrity: sha512-TJmnOG2+NOGM72mlczEsNki9UT+XAsMFAOo8J0me/N47EJ/vkLXxf481evfHLlxMejTY6IN8SdRSiPVLv6AHlA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.8.3': - resolution: {integrity: sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==} + '@biomejs/cli-linux-x64@1.9.3': + resolution: {integrity: sha512-x220V4c+romd26Mu1ptU+EudMXVS4xmzKxPVb9mgnfYlN4Yx9vD5NZraSx/onJnd3Gh/y8iPUdU5CDZJKg9COA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.8.3': - resolution: {integrity: sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==} + '@biomejs/cli-win32-arm64@1.9.3': + resolution: {integrity: sha512-lg/yZis2HdQGsycUvHWSzo9kOvnGgvtrYRgoCEwPBwwAL8/6crOp3+f47tPwI/LI1dZrhSji7PNsGKGHbwyAhw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.8.3': - resolution: {integrity: sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==} + '@biomejs/cli-win32-x64@1.9.3': + resolution: {integrity: sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1277,8 +1281,8 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@chromatic-com/storybook@1.6.0': - resolution: {integrity: sha512-6sHj0l194KMBIZ0D5SeJ+Ys+zslehKHcC2d6Hd/YEn4cCl7p9mLuxrZjvf8xharGKy8vf9Q1tKrU2YdldzUBoQ==} + '@chromatic-com/storybook@1.9.0': + resolution: {integrity: sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} '@colors/colors@1.5.0': @@ -1308,8 +1312,8 @@ packages: '@emotion/cache@11.13.1': resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} - '@emotion/css@11.13.0': - resolution: {integrity: sha512-BUk99ylT+YHl+W/HN7nv1RCTkDYmKKqa1qbvM/qLSQEg61gipuBF5Hptk/2/ERmX2DCv0ccuFGhz9i0KSZOqPg==} + '@emotion/css@11.13.4': + resolution: {integrity: sha512-CthbOD5EBw+iN0rfM96Tuv5kaZN4nxPyYDvGUs0bc7wZBBiU/0mse+l+0O9RshW2d+v5HH1cme+BAbLJ/3Folw==} '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -1332,6 +1336,9 @@ packages: '@emotion/serialize@1.3.1': resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} + '@emotion/serialize@1.3.2': + resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} + '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} @@ -1356,6 +1363,9 @@ packages: '@emotion/utils@1.4.0': resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + '@emotion/utils@1.4.1': + resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} + '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} @@ -1641,8 +1651,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': @@ -1989,19 +1999,20 @@ packages: '@types/react': optional: true - '@mui/x-internals@7.13.0': - resolution: {integrity: sha512-eUK7iykkDWU+wBfTzE/S0qh4awgVgsORfrpvuPbUp+E6qUj1Xhu9M/WKzbwz0CPFnTJZwBQ9KYrxpGXnPBEpRQ==} + '@mui/x-internals@7.18.0': + resolution: {integrity: sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 - '@mui/x-tree-view@7.13.0': - resolution: {integrity: sha512-ADixvp85a0iZ7AOzBuCPQ+yl+gMq0BlIWhg3GfbX+57sMhjcdOEUUxcGIcIt6pw1V05bVXE2/QP+5qzDamiGPw==} + '@mui/x-tree-view@7.18.0': + resolution: {integrity: sha512-3UJAYtBquc0SzKxEEdM68XlKOuuCl70ktZPqqI3z4wTZ0HK445XXc32t/s0VPIL94kRxWQcGPpgWFauScDwhug==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 '@emotion/styled': ^11.8.1 - '@mui/material': ^5.15.14 + '@mui/material': ^5.15.14 || ^6.0.0 + '@mui/system': ^5.15.14 || ^6.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 peerDependenciesMeta: @@ -2044,10 +2055,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.40.1': - resolution: {integrity: sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==} - engines: {node: '>=16'} - deprecated: Please update to the latest version of Playwright to test up-to-date browsers. + '@playwright/test@1.47.2': + resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} + engines: {node: '>=18'} hasBin: true '@popperjs/core@2.11.8': @@ -2263,8 +2273,8 @@ packages: '@types/react': optional: true - '@remix-run/router@1.17.0': - resolution: {integrity: sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==} + '@remix-run/router@1.19.2': + resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} '@rollup/pluginutils@5.0.5': @@ -2933,14 +2943,14 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.13': + resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - '@types/lodash@4.17.6': - resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} + '@types/lodash@4.17.9': + resolution: {integrity: sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==} '@types/mdast@4.0.3': resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} @@ -2966,8 +2976,8 @@ packages: '@types/node@18.19.0': resolution: {integrity: sha512-667KNhaD7U29mT5wf+TZUnrzPrlL2GNQ5N0BMjO2oNULhBxX0/FKCkm6JMu0Jh7Z+1LwUlR21ekd7KhIboNFNw==} - '@types/node@20.14.8': - resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} + '@types/node@20.16.10': + resolution: {integrity: sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==} '@types/normalize-package-data@2.4.3': resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} @@ -2981,8 +2991,8 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/qs@6.9.10': resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} @@ -2999,8 +3009,8 @@ packages: '@types/react-date-range@1.4.4': resolution: {integrity: sha512-9Y9NyNgaCsEVN/+O4HKuxzPbVjRVBGdOKRxMDcsTRWVG62lpYgnxefNckTXDWup8FvczoqPW0+ESZR6R1yymDg==} - '@types/react-dom@18.2.4': - resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==} + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} '@types/react-syntax-highlighter@15.5.13': resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} @@ -3014,8 +3024,8 @@ packages: '@types/react-window@1.8.8': resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} - '@types/react@18.2.6': - resolution: {integrity: sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==} + '@types/react@18.3.10': + resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} '@types/reactcss@1.2.6': resolution: {integrity: sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg==} @@ -3023,9 +3033,6 @@ packages: '@types/resolve@1.20.4': resolution: {integrity: sha512-BKGK0T1VgB1zD+PwQR4RRf0ais3NyvH1qjLUrHI5SEiccYaJrhLstLuoXFWJ+2Op9whGizSPUMGPJY/Qtb/A2w==} - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -3750,9 +3757,6 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -3784,6 +3788,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -5307,6 +5320,10 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -5657,14 +5674,14 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - playwright-core@1.40.1: - resolution: {integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==} - engines: {node: '>=16'} + playwright-core@1.47.2: + resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} + engines: {node: '>=18'} hasBin: true - playwright@1.40.1: - resolution: {integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==} - engines: {node: '>=16'} + playwright@1.47.2: + resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} + engines: {node: '>=18'} hasBin: true polished@4.2.2: @@ -5917,15 +5934,15 @@ packages: '@types/react': optional: true - react-router-dom@6.24.0: - resolution: {integrity: sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==} + react-router-dom@6.26.2: + resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.24.0: - resolution: {integrity: sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==} + react-router@6.26.2: + resolution: {integrity: sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -6297,8 +6314,8 @@ packages: store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} - storybook-addon-remix-react-router@3.0.0: - resolution: {integrity: sha512-0D7VDVf6uX6vgegpCb3v1/TIADxRWomycyj0ZNuVjrCO6w6FwfZ9CHlCK7k9v6CB2uqKjPiaBwmT7odHyy1qYA==} + storybook-addon-remix-react-router@3.0.1: + resolution: {integrity: sha512-3tXvjDXFEZCfhGcoX6zdx6jRGH+QciDtSjmc0M8M4DlgEpwhflHwbS4J2NqaFmFTlsRXuh2+qjLfVzp4bkCixg==} peerDependencies: '@storybook/blocks': ^8.0.0 '@storybook/channels': ^8.0.0 @@ -6610,8 +6627,8 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true @@ -6629,6 +6646,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@6.19.7: resolution: {integrity: sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==} engines: {node: '>=18.17'} @@ -6683,10 +6703,6 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7066,8 +7082,8 @@ snapshots: '@babel/helpers': 7.25.0 '@babel/parser': 7.25.3 '@babel/template': 7.25.0 - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 debug: 4.3.6 gensync: 1.0.0-beta.2 @@ -7090,9 +7106,9 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/generator@7.25.4': + '@babel/generator@7.25.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -7107,7 +7123,7 @@ snapshots: '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color @@ -7175,7 +7191,7 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-compilation-targets': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.6 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -7200,15 +7216,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.24.7': dependencies: - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -7229,7 +7245,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 transitivePeerDependencies: - supports-color @@ -7239,7 +7255,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 transitivePeerDependencies: - supports-color @@ -7293,7 +7309,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color @@ -7316,7 +7332,7 @@ snapshots: dependencies: '@babel/helper-function-name': 7.24.7 '@babel/template': 7.25.0 - '@babel/traverse': 7.25.4 + '@babel/traverse': 7.25.6 '@babel/types': 7.24.7 transitivePeerDependencies: - supports-color @@ -7329,7 +7345,7 @@ snapshots: '@babel/helpers@7.25.0': dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/highlight@7.24.7': dependencies: @@ -7344,11 +7360,11 @@ snapshots: '@babel/parser@7.25.3': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 - '@babel/parser@7.25.4': + '@babel/parser@7.25.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': dependencies: @@ -8091,6 +8107,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 @@ -8100,8 +8120,8 @@ snapshots: '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 '@babel/traverse@7.24.7': dependencies: @@ -8118,14 +8138,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.25.4': + '@babel/traverse@7.25.6': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.4 - '@babel/parser': 7.25.4 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 '@babel/template': 7.25.0 - '@babel/types': 7.25.4 - debug: 4.3.6 + '@babel/types': 7.25.6 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8142,7 +8162,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@babel/types@7.25.4': + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -8152,39 +8172,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@1.8.3': + '@biomejs/biome@1.9.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.8.3 - '@biomejs/cli-darwin-x64': 1.8.3 - '@biomejs/cli-linux-arm64': 1.8.3 - '@biomejs/cli-linux-arm64-musl': 1.8.3 - '@biomejs/cli-linux-x64': 1.8.3 - '@biomejs/cli-linux-x64-musl': 1.8.3 - '@biomejs/cli-win32-arm64': 1.8.3 - '@biomejs/cli-win32-x64': 1.8.3 + '@biomejs/cli-darwin-arm64': 1.9.3 + '@biomejs/cli-darwin-x64': 1.9.3 + '@biomejs/cli-linux-arm64': 1.9.3 + '@biomejs/cli-linux-arm64-musl': 1.9.3 + '@biomejs/cli-linux-x64': 1.9.3 + '@biomejs/cli-linux-x64-musl': 1.9.3 + '@biomejs/cli-win32-arm64': 1.9.3 + '@biomejs/cli-win32-x64': 1.9.3 - '@biomejs/cli-darwin-arm64@1.8.3': + '@biomejs/cli-darwin-arm64@1.9.3': optional: true - '@biomejs/cli-darwin-x64@1.8.3': + '@biomejs/cli-darwin-x64@1.9.3': optional: true - '@biomejs/cli-linux-arm64-musl@1.8.3': + '@biomejs/cli-linux-arm64-musl@1.9.3': optional: true - '@biomejs/cli-linux-arm64@1.8.3': + '@biomejs/cli-linux-arm64@1.9.3': optional: true - '@biomejs/cli-linux-x64-musl@1.8.3': + '@biomejs/cli-linux-x64-musl@1.9.3': optional: true - '@biomejs/cli-linux-x64@1.8.3': + '@biomejs/cli-linux-x64@1.9.3': optional: true - '@biomejs/cli-win32-arm64@1.8.3': + '@biomejs/cli-win32-arm64@1.9.3': optional: true - '@biomejs/cli-win32-x64@1.8.3': + '@biomejs/cli-win32-x64@1.9.3': optional: true '@bundled-es-modules/cookie@2.0.0': @@ -8200,7 +8220,7 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@chromatic-com/storybook@1.6.0(react@18.3.1)': + '@chromatic-com/storybook@1.9.0(react@18.3.1)': dependencies: chromatic: 11.5.4 filesize: 10.1.2 @@ -8231,10 +8251,10 @@ snapshots: '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.1 + '@emotion/serialize': 1.3.2 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -8248,17 +8268,17 @@ snapshots: dependencies: '@emotion/memoize': 0.9.0 '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - '@emotion/css@11.13.0': + '@emotion/css@11.13.4': dependencies: '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 - '@emotion/serialize': 1.3.1 + '@emotion/serialize': 1.3.2 '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 transitivePeerDependencies: - supports-color @@ -8270,7 +8290,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1)': + '@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@emotion/babel-plugin': 11.12.0 @@ -8282,7 +8302,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 transitivePeerDependencies: - supports-color @@ -8294,20 +8314,28 @@ snapshots: '@emotion/utils': 1.4.0 csstype: 3.1.3 + '@emotion/serialize@1.3.2': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.1 + csstype: 3.1.3 + '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@emotion/babel-plugin': 11.12.0 '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) '@emotion/serialize': 1.3.1 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) '@emotion/utils': 1.4.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 transitivePeerDependencies: - supports-color @@ -8319,6 +8347,8 @@ snapshots: '@emotion/utils@1.4.0': {} + '@emotion/utils@1.4.1': {} + '@emotion/weak-memoize@0.4.0': {} '@esbuild/aix-ppc64@0.20.2': @@ -8465,13 +8495,13 @@ snapshots: eslint-visitor-keys: 3.4.3 optional: true - '@eslint-community/regexpp@4.11.0': + '@eslint-community/regexpp@4.11.1': optional: true '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.6 + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -8516,7 +8546,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8541,7 +8571,7 @@ snapshots: dependencies: '@inquirer/type': 1.2.0 '@types/mute-stream': 0.0.4 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -8580,27 +8610,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8629,14 +8659,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-mock: 29.6.2 '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8654,7 +8684,7 @@ snapshots: dependencies: '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-message-util: 29.6.2 jest-mock: 29.6.2 jest-util: 29.6.2 @@ -8663,7 +8693,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8685,7 +8715,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8754,7 +8784,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -8763,7 +8793,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.5 '@types/istanbul-reports': 3.0.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/yargs': 17.0.29 chalk: 4.1.2 @@ -8772,19 +8802,19 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.5.4) - vite: 5.4.6(@types/node@20.14.8) + react-docgen-typescript: 2.2.2(typescript@5.6.2) + vite: 5.4.6(@types/node@20.16.10) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -8814,10 +8844,10 @@ snapshots: '@leeoniya/ufuzzy@1.0.10': {} - '@mdx-js/react@3.0.1(@types/react@18.2.6)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.10)(react@18.3.1)': dependencies: '@types/mdx': 2.0.9 - '@types/react': 18.2.6 + '@types/react': 18.3.10 react: 18.3.1 '@monaco-editor/loader@1.4.0(monaco-editor@0.50.0)': @@ -8841,54 +8871,54 @@ snapshots: outvariant: 1.4.2 strict-event-emitter: 0.5.1 - '@mui/base@5.0.0-beta.40(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/base@5.0.0-beta.40(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.2.6) - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@mui/types': 7.2.15(@types/react@18.3.10) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@mui/core-downloads-tracker@5.16.7': {} - '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react@18.3.1)': + '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 - '@mui/base': 5.0.0-beta.40(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.2.6) - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@mui/base': 5.0.0-beta.40(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@mui/types': 7.2.15(@types/react@18.3.10) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@types/react': 18.2.6 + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@types/react': 18.3.10 - '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@mui/core-downloads-tracker': 5.16.7 - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.2.6) - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@mui/types': 7.2.15(@types/react@18.3.10) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 @@ -8899,20 +8929,20 @@ snapshots: react-is: 18.3.1 react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@types/react': 18.2.6 + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@types/react': 18.3.10 - '@mui/private-theming@5.16.6(@types/react@18.2.6)(react@18.3.1)': + '@mui/private-theming@5.16.6(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(react@18.3.1)': + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 '@emotion/cache': 11.13.1 @@ -8920,56 +8950,56 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) - '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1)': + '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 - '@mui/private-theming': 5.16.6(@types/react@18.2.6)(react@18.3.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.15(@types/react@18.2.6) - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@mui/private-theming': 5.16.6(@types/react@18.3.10)(react@18.3.1) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(react@18.3.1) + '@mui/types': 7.2.15(@types/react@18.3.10) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@types/react': 18.2.6 + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@types/react': 18.3.10 - '@mui/types@7.2.15(@types/react@18.2.6)': + '@mui/types@7.2.15(@types/react@18.3.10)': optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@mui/utils@5.16.6(@types/react@18.2.6)(react@18.3.1)': + '@mui/utils@5.16.6(@types/react@18.3.10)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.4 - '@mui/types': 7.2.15(@types/react@18.2.6) + '@mui/types': 7.2.15(@types/react@18.3.10) '@types/prop-types': 15.7.12 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-is: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@mui/x-internals@7.13.0(@types/react@18.2.6)(react@18.3.1)': + '@mui/x-internals@7.18.0(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.4 - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) + '@babel/runtime': 7.25.6 + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 transitivePeerDependencies: - '@types/react' - '@mui/x-tree-view@7.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/x-tree-view@7.18.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.4 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) - '@mui/utils': 5.16.6(@types/react@18.2.6)(react@18.3.1) - '@mui/x-internals': 7.13.0(@types/react@18.2.6)(react@18.3.1) + '@babel/runtime': 7.25.6 + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) + '@mui/utils': 5.16.6(@types/react@18.3.10)(react@18.3.1) + '@mui/x-internals': 7.18.0(@types/react@18.3.10)(react@18.3.1) '@types/react-transition-group': 4.4.11 clsx: 2.1.1 prop-types: 15.8.1 @@ -8977,8 +9007,8 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.2.6)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.2.6)(react@18.3.1))(@types/react@18.2.6)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.10)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.10)(react@18.3.1))(@types/react@18.3.10)(react@18.3.1) transitivePeerDependencies: - '@types/react' @@ -9018,9 +9048,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.40.1': + '@playwright/test@1.47.2': dependencies: - playwright: 1.40.1 + playwright: 1.47.2 '@popperjs/core@2.11.8': {} @@ -9049,155 +9079,155 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-context@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-context@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.10)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.2.6)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.10)(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-focus-guards@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-id@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-portal@1.1.1(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.1.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.6)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.10)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 - '@types/react-dom': 18.2.4 + '@types/react': 18.3.10 + '@types/react-dom': 18.3.0 - '@radix-ui/react-slot@1.0.2(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-slot@1.0.2(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.6)(react@18.3.1) + '@babel/runtime': 7.25.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-slot@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-slot@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.10)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.6)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.10)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@remix-run/router@1.17.0': {} + '@remix-run/router@1.19.2': {} '@rollup/pluginutils@5.0.5(rollup@4.20.0)': dependencies: @@ -9282,9 +9312,9 @@ snapshots: memoizerific: 1.11.3 ts-dedent: 2.2.0 - '@storybook/addon-controls@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-controls@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/blocks': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dequal: 2.0.3 lodash: 4.17.21 ts-dedent: 2.2.0 @@ -9297,13 +9327,13 @@ snapshots: - react-dom - supports-color - '@storybook/addon-docs@8.1.11(@types/react-dom@18.2.4)(prettier@3.3.3)': + '@storybook/addon-docs@8.1.11(@types/react-dom@18.3.0)(prettier@3.3.3)': dependencies: '@babel/core': 7.24.7 - '@mdx-js/react': 3.0.1(@types/react@18.2.6)(react@18.3.1) - '@storybook/blocks': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.10)(react@18.3.1) + '@storybook/blocks': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/client-logger': 8.1.11 - '@storybook/components': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/csf-plugin': 8.1.11 '@storybook/csf-tools': 8.1.11 '@storybook/global': 5.0.0 @@ -9312,7 +9342,7 @@ snapshots: '@storybook/react-dom-shim': 8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/theming': 8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.11 - '@types/react': 18.2.6 + '@types/react': 18.3.10 fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9325,12 +9355,12 @@ snapshots: - prettier - supports-color - '@storybook/addon-essentials@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-essentials@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/addon-actions': 8.1.11 '@storybook/addon-backgrounds': 8.1.11 - '@storybook/addon-controls': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-docs': 8.1.11(@types/react-dom@18.2.4)(prettier@3.3.3) + '@storybook/addon-controls': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-docs': 8.1.11(@types/react-dom@18.3.0)(prettier@3.3.3) '@storybook/addon-highlight': 8.1.11 '@storybook/addon-measure': 8.1.11 '@storybook/addon-outline': 8.1.11 @@ -9354,11 +9384,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)))': + '@storybook/addon-interactions@8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.1.11 - '@storybook/test': 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))) + '@storybook/test': 8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))) '@storybook/types': 8.1.11 polished: 4.2.2 ts-dedent: 2.2.0 @@ -9443,11 +9473,11 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/blocks@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/blocks@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.11 '@storybook/client-logger': 8.1.11 - '@storybook/components': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/core-events': 8.1.11 '@storybook/csf': 0.1.9 '@storybook/docs-tools': 8.1.11(prettier@3.3.3) @@ -9457,7 +9487,7 @@ snapshots: '@storybook/preview-api': 8.1.11 '@storybook/theming': 8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/types': 8.1.11 - '@types/lodash': 4.17.6 + '@types/lodash': 4.17.9 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -9500,7 +9530,7 @@ snapshots: - prettier - supports-color - '@storybook/builder-vite@8.1.11(prettier@3.3.3)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8))': + '@storybook/builder-vite@8.1.11(prettier@3.3.3)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10))': dependencies: '@storybook/channels': 8.1.11 '@storybook/client-logger': 8.1.11 @@ -9519,9 +9549,9 @@ snapshots: fs-extra: 11.2.0 magic-string: 0.30.5 ts-dedent: 2.2.0 - vite: 5.4.6(@types/node@20.14.8) + vite: 5.4.6(@types/node@20.16.10) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - encoding - prettier @@ -9617,10 +9647,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/components@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/components@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.6)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.10)(react@18.3.1) '@storybook/client-logger': 8.1.11 '@storybook/csf': 0.1.9 '@storybook/global': 5.0.0 @@ -9849,13 +9879,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.20.0)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8))': + '@storybook/react-vite@8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.20.0)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10)) '@rollup/pluginutils': 5.0.5(rollup@4.20.0) - '@storybook/builder-vite': 8.1.11(prettier@3.3.3)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8)) + '@storybook/builder-vite': 8.1.11(prettier@3.3.3)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10)) '@storybook/node-logger': 8.1.11 - '@storybook/react': 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@storybook/react': 8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@storybook/types': 8.1.11 find-up: 5.0.0 magic-string: 0.30.5 @@ -9864,7 +9894,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 tsconfig-paths: 4.2.0 - vite: 5.4.6(@types/node@20.14.8) + vite: 5.4.6(@types/node@20.16.10) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9874,7 +9904,7 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@storybook/react@8.1.11(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: '@storybook/client-logger': 8.1.11 '@storybook/docs-tools': 8.1.11(prettier@3.3.3) @@ -9900,7 +9930,7 @@ snapshots: type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - encoding - prettier @@ -9942,14 +9972,14 @@ snapshots: - prettier - supports-color - '@storybook/test@8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)))': + '@storybook/test@8.1.11(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)))': dependencies: '@storybook/client-logger': 8.1.11 '@storybook/core-events': 8.1.11 '@storybook/instrumenter': 8.1.11 '@storybook/preview-api': 8.1.11 '@testing-library/dom': 10.1.0 - '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4))) + '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2))) '@testing-library/user-event': 14.5.2(@testing-library/dom@10.1.0) '@vitest/expect': 1.6.0 '@vitest/spy': 1.6.0 @@ -10061,7 +10091,7 @@ snapshots: '@testing-library/dom@10.1.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 '@types/aria-query': 5.0.3 aria-query: 5.3.0 chalk: 4.1.2 @@ -10080,10 +10110,10 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)))': + '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)))': dependencies: '@adobe/css-tools': 4.3.2 - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 @@ -10092,10 +10122,10 @@ snapshots: redent: 3.0.0 optionalDependencies: '@jest/globals': 29.7.0 - '@types/jest': 29.5.12 - jest: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + '@types/jest': 29.5.13 + jest: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) - '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)))': + '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.24.7 @@ -10107,23 +10137,23 @@ snapshots: redent: 3.0.0 optionalDependencies: '@jest/globals': 29.7.0 - '@types/jest': 29.5.12 - jest: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + '@types/jest': 29.5.13 + jest: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) - '@testing-library/react-hooks@8.0.1(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react-hooks@8.0.1(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.22.6 react: 18.3.1 react-error-boundary: 3.1.4(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 react-dom: 18.3.1(react@18.3.1) '@testing-library/react@14.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.23.2 '@testing-library/dom': 9.3.3 - '@types/react-dom': 18.2.4 + '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10182,7 +10212,7 @@ snapshots: '@types/body-parser@1.19.2': dependencies: '@types/connect': 3.4.35 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/chroma-js@2.4.0': {} @@ -10194,13 +10224,13 @@ snapshots: '@types/connect@3.4.35': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.4': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/debug@4.1.12': dependencies: @@ -10228,7 +10258,7 @@ snapshots: '@types/express-serve-static-core@4.17.35': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -10247,11 +10277,11 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/hast@2.3.8': dependencies: @@ -10263,7 +10293,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.5': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 hoist-non-react-statics: 3.3.2 '@types/http-errors@2.0.1': {} @@ -10290,18 +10320,18 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.12': + '@types/jest@29.5.13': dependencies: expect: 29.7.0 pretty-format: 29.7.0 '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 - '@types/lodash@4.17.6': {} + '@types/lodash@4.17.9': {} '@types/mdast@4.0.3': dependencies: @@ -10319,15 +10349,15 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/node@18.19.0': dependencies: undici-types: 5.26.5 - '@types/node@20.14.8': + '@types/node@20.16.10': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/normalize-package-data@2.4.3': {} @@ -10337,7 +10367,7 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/prop-types@15.7.5': {} + '@types/prop-types@15.7.13': {} '@types/qs@6.9.10': {} @@ -10347,60 +10377,57 @@ snapshots: '@types/react-color@3.0.6': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/reactcss': 1.2.6 '@types/react-date-range@1.4.4': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 date-fns: 2.30.0 - '@types/react-dom@18.2.4': + '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/react-syntax-highlighter@15.5.13': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/react-virtualized-auto-sizer@1.0.4': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/react-window@1.8.8': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - '@types/react@18.2.6': + '@types/react@18.3.10': dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 + '@types/prop-types': 15.7.13 + csstype: 3.1.3 '@types/reactcss@1.2.6': dependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 '@types/resolve@1.20.4': {} - '@types/scheduler@0.16.3': {} - '@types/semver@7.5.8': {} '@types/send@0.17.1': dependencies: '@types/mime': 1.3.2 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/serve-static@1.15.2': dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 20.14.8 + '@types/node': 20.16.10 '@types/ssh2@1.15.0': dependencies: @@ -10446,14 +10473,14 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.1(vite@5.4.6(@types/node@20.14.8))': + '@vitejs/plugin-react@4.3.1(vite@5.4.6(@types/node@20.16.10))': dependencies: '@babel/core': 7.24.7 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.6(@types/node@20.14.8) + vite: 5.4.6(@types/node@20.16.10) transitivePeerDependencies: - supports-color @@ -10697,13 +10724,13 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -11097,13 +11124,13 @@ snapshots: nan: 2.20.0 optional: true - create-jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)): + create-jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11142,8 +11169,6 @@ snapshots: dependencies: cssom: 0.3.8 - csstype@3.1.2: {} - csstype@3.1.3: {} data-urls@3.0.2: @@ -11166,6 +11191,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decimal.js@10.4.3: {} decode-named-character-reference@1.0.2: @@ -11298,7 +11327,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 csstype: 3.1.3 dom-walk@0.1.2: {} @@ -11473,7 +11502,7 @@ snapshots: eslint@8.52.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.52.0 '@humanwhocodes/config-array': 0.11.14 @@ -11483,7 +11512,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -12241,7 +12270,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.25.2 - '@babel/parser': 7.25.4 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.2 @@ -12307,7 +12336,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -12327,16 +12356,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)): + jest-cli@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + create-jest: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -12346,7 +12375,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)): + jest-config@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -12371,8 +12400,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.8 - ts-node: 10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4) + '@types/node': 20.16.10 + ts-node: 10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12409,7 +12438,7 @@ snapshots: '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 '@types/jsdom': 20.0.1 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-mock: 29.6.2 jest-util: 29.6.2 jsdom: 20.0.3(canvas@3.0.0-rc2) @@ -12425,7 +12454,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12437,7 +12466,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.8 + '@types/node': 20.16.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12485,7 +12514,7 @@ snapshots: '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.7 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -12493,13 +12522,13 @@ snapshots: jest-mock@29.6.2: dependencies: '@jest/types': 29.6.1 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-util: 29.6.2 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12534,7 +12563,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12562,7 +12591,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -12608,7 +12637,7 @@ snapshots: jest-util@29.6.2: dependencies: '@jest/types': 29.6.1 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12617,7 +12646,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12636,7 +12665,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.8 + '@types/node': 20.16.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12650,17 +12679,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)): + jest@29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.14.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4)) + jest-cli: 29.7.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12767,7 +12796,7 @@ snapshots: jsonfile@6.1.0: dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 @@ -13222,6 +13251,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -13289,7 +13323,7 @@ snapshots: ms@2.1.3: {} - msw@2.3.5(typescript@5.5.4): + msw@2.3.5(typescript@5.6.2): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 @@ -13309,7 +13343,7 @@ snapshots: type-fest: 4.11.1 yargs: 17.7.2 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 mute-stream@1.0.0: {} @@ -13534,17 +13568,17 @@ snapshots: dependencies: find-up: 5.0.0 - playwright-core@1.40.1: {} + playwright-core@1.47.2: {} - playwright@1.40.1: + playwright@1.47.2: dependencies: - playwright-core: 1.40.1 + playwright-core: 1.47.2 optionalDependencies: fsevents: 2.3.2 polished@4.2.2: dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 postcss@8.4.47: dependencies: @@ -13627,7 +13661,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.14.8 + '@types/node': 20.16.10 long: 5.2.3 proxy-addr@2.0.7: @@ -13728,9 +13762,9 @@ snapshots: react-list: 0.8.17(react@18.3.1) shallow-equal: 1.2.1 - react-docgen-typescript@2.2.2(typescript@5.5.4): + react-docgen-typescript@2.2.2(typescript@5.6.2): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 react-docgen@7.0.3: dependencies: @@ -13794,10 +13828,10 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 - react-markdown@9.0.1(@types/react@18.2.6)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.10)(react@18.3.1): dependencies: '@types/hast': 3.0.3 - '@types/react': 18.2.6 + '@types/react': 18.3.10 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.2.0 html-url-attributes: 3.0.0 @@ -13813,45 +13847,45 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.6(@types/react@18.2.6)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.2.6)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.10)(react@18.3.1) tslib: 2.6.2 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - react-remove-scroll@2.5.7(@types/react@18.2.6)(react@18.3.1): + react-remove-scroll@2.5.7(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.2.6)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.2.6)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.10)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.10)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.2.6)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.2.6)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.10)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.10)(react@18.3.1) optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.17.0 + '@remix-run/router': 1.19.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.24.0(react@18.3.1) + react-router: 6.26.2(react@18.3.1) - react-router@6.24.0(react@18.3.1): + react-router@6.26.2(react@18.3.1): dependencies: - '@remix-run/router': 1.17.0 + '@remix-run/router': 1.19.2 react: 18.3.1 - react-style-singleton@2.2.1(@types/react@18.2.6)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.10)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 react-syntax-highlighter@15.5.0(react@18.3.1): dependencies: @@ -13864,7 +13898,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -13963,7 +13997,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.4 + '@babel/runtime': 7.25.6 regexp.prototype.flags@1.5.1: dependencies: @@ -14312,18 +14346,18 @@ snapshots: store2@2.14.2: {} - storybook-addon-remix-react-router@3.0.0(@storybook/blocks@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/channels@8.1.11)(@storybook/components@8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/core-events@8.1.11)(@storybook/manager-api@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/preview-api@8.1.11)(@storybook/theming@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + storybook-addon-remix-react-router@3.0.1(@storybook/blocks@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/channels@8.1.11)(@storybook/components@8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/core-events@8.1.11)(@storybook/manager-api@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@storybook/preview-api@8.1.11)(@storybook/theming@8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: - '@storybook/blocks': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/channels': 8.1.11 - '@storybook/components': 8.1.11(@types/react-dom@18.2.4)(@types/react@18.2.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/components': 8.1.11(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/core-events': 8.1.11 '@storybook/manager-api': 8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/preview-api': 8.1.11 '@storybook/theming': 8.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) compare-versions: 6.1.0 react-inspector: 6.0.2(react@18.3.1) - react-router-dom: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -14552,21 +14586,21 @@ snapshots: '@ts-morph/common': 0.12.3 code-block-writer: 11.0.3 - ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.14.8)(typescript@5.5.4): + ts-node@10.9.1(@swc/core@1.3.38)(@types/node@20.16.10)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.8 + '@types/node': 20.16.10 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.4 + typescript: 5.6.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -14644,7 +14678,7 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.5.4: {} + typescript@5.6.2: {} tzdata@1.0.40: {} @@ -14655,6 +14689,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.8: {} + undici@6.19.7: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -14711,8 +14747,6 @@ snapshots: universalify@0.2.0: {} - universalify@2.0.0: {} - universalify@2.0.1: {} unpipe@1.0.0: {} @@ -14748,20 +14782,20 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-callback-ref@1.3.2(@types/react@18.2.6)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.10)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 - use-sidecar@1.1.2(@types/react@18.2.6)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.10)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.2.6 + '@types/react': 18.3.10 use-sync-external-store@1.2.0(react@18.3.1): dependencies: @@ -14807,7 +14841,7 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-plugin-checker@0.7.2(@biomejs/biome@1.8.3)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.5.4)(vite@5.4.6(@types/node@20.14.8)): + vite-plugin-checker@0.7.2(@biomejs/biome@1.9.3)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.2)(vite@5.4.6(@types/node@20.16.10)): dependencies: '@babel/code-frame': 7.24.7 ansi-escapes: 4.3.2 @@ -14819,26 +14853,26 @@ snapshots: npm-run-path: 4.0.1 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - vite: 5.4.6(@types/node@20.14.8) + vite: 5.4.6(@types/node@20.16.10) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - '@biomejs/biome': 1.8.3 + '@biomejs/biome': 1.9.3 eslint: 8.52.0 optionator: 0.9.3 - typescript: 5.5.4 + typescript: 5.6.2 vite-plugin-turbosnap@1.0.3: {} - vite@5.4.6(@types/node@20.14.8): + vite@5.4.6(@types/node@20.16.10): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.20.0 optionalDependencies: - '@types/node': 20.14.8 + '@types/node': 20.16.10 fsevents: 2.3.3 vscode-jsonrpc@6.0.0: {} diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index ebc296f57db1b..bd40045c8c45e 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -343,6 +343,15 @@ export interface CreateWorkspaceRequest { readonly automatic_updates?: AutomaticUpdates; } +// From codersdk/deployment.go +export interface CryptoKey { + readonly feature: CryptoKeyFeature; + readonly secret: string; + readonly deletes_at: string; + readonly sequence: number; + readonly starts_at: string; +} + // From codersdk/roles.go export interface CustomRoleRequest { readonly name: string; @@ -2077,6 +2086,10 @@ export const AutomaticUpdateses: AutomaticUpdates[] = ["always", "never"] export type BuildReason = "autostart" | "autostop" | "initiator" export const BuildReasons: BuildReason[] = ["autostart", "autostop", "initiator"] +// From codersdk/deployment.go +export type CryptoKeyFeature = "oidc_convert" | "tailnet_resume" | "workspace_apps" +export const CryptoKeyFeatures: CryptoKeyFeature[] = ["oidc_convert", "tailnet_resume", "workspace_apps"] + // From codersdk/workspaceagents.go export type DisplayApp = "port_forwarding_helper" | "ssh_helper" | "vscode" | "vscode_insiders" | "web_terminal" export const DisplayApps: DisplayApp[] = ["port_forwarding_helper", "ssh_helper", "vscode", "vscode_insiders", "web_terminal"] diff --git a/site/src/components/AvatarData/AvatarData.tsx b/site/src/components/AvatarData/AvatarData.tsx index e1598feb29d4b..eb9fa81d4981d 100644 --- a/site/src/components/AvatarData/AvatarData.tsx +++ b/site/src/components/AvatarData/AvatarData.tsx @@ -8,18 +8,31 @@ export interface AvatarDataProps { subtitle?: ReactNode; src?: string; avatar?: React.ReactNode; + + /** + * Lets you specify the character(s) displayed in an avatar when an image is + * unavailable (like when the network request fails). + * + * If not specified, the component will try to parse the first character + * from the title prop if it is a string. + */ + imgFallbackText?: string; } export const AvatarData: FC = ({ title, subtitle, src, + imgFallbackText, avatar, }) => { const theme = useTheme(); - if (!avatar) { - avatar = {title}; + avatar = ( + + {(typeof title === "string" ? title : imgFallbackText) || "-"} + + ); } return ( diff --git a/site/src/components/FeatureStageBadge/FeatureStageBadge.tsx b/site/src/components/FeatureStageBadge/FeatureStageBadge.tsx index 52cdfaeb01a11..763b180d03bbe 100644 --- a/site/src/components/FeatureStageBadge/FeatureStageBadge.tsx +++ b/site/src/components/FeatureStageBadge/FeatureStageBadge.tsx @@ -10,7 +10,7 @@ import { docs } from "utils/docs"; * All types of feature that we are currently supporting. Defined as record to * ensure that we can't accidentally make typos when writing the badge text. */ -const featureStageBadgeTypes = { +export const featureStageBadgeTypes = { beta: "beta", experimental: "experimental", } as const satisfies Record; diff --git a/site/src/components/Filter/UserFilter.tsx b/site/src/components/Filter/UserFilter.tsx index 3bd5936bfcb7a..015bc3d71d439 100644 --- a/site/src/components/Filter/UserFilter.tsx +++ b/site/src/components/Filter/UserFilter.tsx @@ -13,10 +13,7 @@ export const useUserFilterMenu = ({ value, onChange, enabled, -}: Pick< - UseFilterMenuOptions, - "value" | "onChange" | "enabled" ->) => { +}: Pick) => { const { user: me } = useAuthenticated(); const addMeAsFirstOption = (options: readonly SelectFilterOption[]) => { diff --git a/site/src/components/Filter/menu.ts b/site/src/components/Filter/menu.ts index 1dca0df4db779..f643e5110348a 100644 --- a/site/src/components/Filter/menu.ts +++ b/site/src/components/Filter/menu.ts @@ -2,28 +2,28 @@ import type { SelectFilterOption } from "components/Filter/SelectFilter"; import { useMemo, useRef, useState } from "react"; import { useQuery } from "react-query"; -export type UseFilterMenuOptions = { +export type UseFilterMenuOptions = { id: string; value: string | undefined; // Using null because of react-query // https://tanstack.com/query/v4/docs/react/guides/migrating-to-react-query-4#undefined-is-an-illegal-cache-value-for-successful-queries - getSelectedOption: () => Promise; - getOptions: (query: string) => Promise; - onChange: (option: TOption | undefined) => void; + getSelectedOption: () => Promise; + getOptions: (query: string) => Promise; + onChange: (option: SelectFilterOption | undefined) => void; enabled?: boolean; }; -export const useFilterMenu = < - TOption extends SelectFilterOption = SelectFilterOption, ->({ +export const useFilterMenu = ({ id, value, getSelectedOption, getOptions, onChange, enabled, -}: UseFilterMenuOptions) => { - const selectedOptionsCacheRef = useRef>({}); +}: UseFilterMenuOptions) => { + const selectedOptionsCacheRef = useRef>( + {}, + ); const [query, setQuery] = useState(""); const selectedOptionQuery = useQuery({ queryKey: [id, "autocomplete", "selected", value], @@ -80,7 +80,7 @@ export const useFilterMenu = < selectedOption, ]); - const selectOption = (option: TOption | undefined) => { + const selectOption = (option: SelectFilterOption | undefined) => { if (option) { selectedOptionsCacheRef.current[option.value] = option; } diff --git a/site/src/components/Paywall/Paywall.tsx b/site/src/components/Paywall/Paywall.tsx index 4ab955c856a3c..ae940ce515836 100644 --- a/site/src/components/Paywall/Paywall.tsx +++ b/site/src/components/Paywall/Paywall.tsx @@ -58,7 +58,7 @@ export const Paywall: FC = ({
diff --git a/site/src/modules/provisioners/ProvisionerGroup.tsx b/site/src/modules/provisioners/ProvisionerGroup.tsx index ee333c915a2fe..79bcac0c9ba20 100644 --- a/site/src/modules/provisioners/ProvisionerGroup.tsx +++ b/site/src/modules/provisioners/ProvisionerGroup.tsx @@ -27,7 +27,7 @@ import { createDayString } from "utils/createDayString"; import { docs } from "utils/docs"; import { ProvisionerTag } from "./ProvisionerTag"; -type ProvisionerGroupType = "builtin" | "psk" | "key"; +type ProvisionerGroupType = "builtin" | "userAuth" | "psk" | "key"; interface ProvisionerGroupProps { readonly buildInfo: BuildInfoResponse; @@ -103,7 +103,8 @@ export const ProvisionerGroup: FC = ({ : `${provisionersWithWarnings} provisioners`; const hasMultipleTagVariants = - type === "psk" && provisioners.some((it) => !isSimpleTagSet(it.tags)); + (type === "psk" || type === "userAuth") && + provisioners.some((it) => !isSimpleTagSet(it.tags)); return (
= ({ )} + {type === "userAuth" && } + {type === "psk" && } {type === "key" && (

Key group – {keyName}

@@ -249,7 +252,7 @@ export const ProvisionerGroup: FC = ({
{hasMultipleTagVariants && ( - + )} @@ -335,11 +338,11 @@ const ProvisionerVersionPopover: FC = ({ ); }; -interface PskProvisionerTagsProps { +interface InlineProvisionerTagsProps { tags: Record; } -const PskProvisionerTags: FC = ({ tags }) => { +const InlineProvisionerTags: FC = ({ tags }) => { const daemonScope = tags.scope || "organization"; const iconScope = daemonScope === "organization" ? : ; @@ -413,6 +416,30 @@ const BuiltinProvisionerTitle: FC = () => { ); }; +const UserAuthProvisionerTitle: FC = () => { + return ( +

+ + User-authenticated provisioners + + + + User-authenticated provisioners + + These provisioners are connected by users using the{" "} + coder CLI, and are authorized by the users + credentials. They can be tagged to only run provisioner jobs for + that user. User-authenticated provisioners are only available for + the default organization.{" "} + Learn more… + + + + +

+ ); +}; + const PskProvisionerTitle: FC = () => { return (

diff --git a/site/src/modules/resources/ResourceCard.tsx b/site/src/modules/resources/ResourceCard.tsx index e72c5fe5995e2..ceeaccf3d207b 100644 --- a/site/src/modules/resources/ResourceCard.tsx +++ b/site/src/modules/resources/ResourceCard.tsx @@ -6,7 +6,7 @@ import { CopyableValue } from "components/CopyableValue/CopyableValue"; import { DropdownArrow } from "components/DropdownArrow/DropdownArrow"; import { MemoizedInlineMarkdown } from "components/Markdown/Markdown"; import { Stack } from "components/Stack/Stack"; -import { Children, type FC, type PropsWithChildren, useState } from "react"; +import { Children, type FC, useState } from "react"; import { ResourceAvatar } from "./ResourceAvatar"; import { SensitiveValue } from "./SensitiveValue"; @@ -75,14 +75,6 @@ export interface ResourceCardProps { agentRow: (agent: WorkspaceAgent) => JSX.Element; } -const p: FC = ({ children }) => { - const childrens = Children.toArray(children); - if (childrens.every((child) => typeof child === "string")) { - return {children}; - } - return <>{children}; -}; - export const ResourceCard: FC = ({ resource, agentRow }) => { const [shouldDisplayAllMetadata, setShouldDisplayAllMetadata] = useState(false); @@ -95,7 +87,7 @@ export const ResourceCard: FC = ({ resource, agentRow }) => { const mLength = resource.daily_cost > 0 ? (resource.metadata?.length ?? 0) + 1 - : resource.metadata?.length ?? 0; + : (resource.metadata?.length ?? 0); const gridWidth = mLength === 1 ? 1 : 4; @@ -146,7 +138,25 @@ export const ResourceCard: FC = ({ resource, agentRow }) => { {meta.sensitive ? ( ) : ( - + { + const childrens = Children.toArray(children); + if ( + childrens.every( + (child) => typeof child === "string", + ) + ) { + return ( + + {children} + + ); + } + return <>{children}; + }, + }} + > {meta.value} )} diff --git a/site/src/modules/resources/SSHButton/SSHButton.tsx b/site/src/modules/resources/SSHButton/SSHButton.tsx index 7246a2d1fc6b5..c7395ebbc21bc 100644 --- a/site/src/modules/resources/SSHButton/SSHButton.tsx +++ b/site/src/modules/resources/SSHButton/SSHButton.tsx @@ -75,19 +75,13 @@ export const SSHButton: FC = ({ Install Coder CLI - + Connect via VS Code Remote SSH - + Connect via JetBrains Gateway - + SSH configuration diff --git a/site/src/modules/tableFiltering/options.tsx b/site/src/modules/tableFiltering/options.tsx index 3eac5b92a184a..f6f98770f4a71 100644 --- a/site/src/modules/tableFiltering/options.tsx +++ b/site/src/modules/tableFiltering/options.tsx @@ -25,7 +25,7 @@ import type { FC } from "react"; export const useOrganizationsFilterMenu = ({ value, onChange, -}: Pick, "value" | "onChange">) => { +}: Pick) => { return useFilterMenu({ onChange, value, diff --git a/site/src/pages/AuditPage/AuditFilter.tsx b/site/src/pages/AuditPage/AuditFilter.tsx index d534f52fa94f6..1d18cdaeedb2b 100644 --- a/site/src/pages/AuditPage/AuditFilter.tsx +++ b/site/src/pages/AuditPage/AuditFilter.tsx @@ -51,7 +51,7 @@ export const AuditFilter: FC = ({ filter, error, menus }) => { return ( = ({ filter, error, menus }) => { export const useActionFilterMenu = ({ value, onChange, -}: Pick, "value" | "onChange">) => { +}: Pick) => { const actionOptions: SelectFilterOption[] = AuditActions.map((action) => ({ value: action, label: capitalize(action), @@ -119,7 +119,7 @@ const ActionMenu: FC = ({ menu, width }) => { export const useResourceTypeFilterMenu = ({ value, onChange, -}: Pick, "value" | "onChange">) => { +}: Pick) => { const actionOptions: SelectFilterOption[] = ResourceTypes.map((type) => { let label = capitalize(type); diff --git a/site/src/pages/AuditPage/AuditHelpTooltip.tsx b/site/src/pages/AuditPage/AuditHelpTooltip.tsx index 1bb8abdba3f45..215c0a508081e 100644 --- a/site/src/pages/AuditPage/AuditHelpTooltip.tsx +++ b/site/src/pages/AuditPage/AuditHelpTooltip.tsx @@ -25,7 +25,7 @@ export const AuditHelpTooltip: FC = () => { {Language.title} {Language.body} - + {Language.docs} diff --git a/site/src/pages/AuditPage/AuditPageView.tsx b/site/src/pages/AuditPage/AuditPageView.tsx index bacdfd62d4dae..eeb930e95d7c8 100644 --- a/site/src/pages/AuditPage/AuditPageView.tsx +++ b/site/src/pages/AuditPage/AuditPageView.tsx @@ -139,7 +139,7 @@ export const AuditPageView: FC = ({ diff --git a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPage.test.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx similarity index 86% rename from site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPage.test.tsx rename to site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx index c3625ab49484a..49c007724aecf 100644 --- a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPage.test.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx @@ -8,11 +8,11 @@ import { MockTemplateExample2, } from "testHelpers/entities"; import { server } from "testHelpers/server"; -import StarterTemplatesPage from "./CreateTemplatesGalleryPage"; +import CreateTemplateGalleryPage from "./CreateTemplateGalleryPage"; test("does not display the scratch template", async () => { server.use( - http.get("api/v2/organizations/:organizationId/templates/examples", () => { + http.get("api/v2/templates/examples", () => { return HttpResponse.json([ MockTemplateExample, MockTemplateExample2, @@ -36,7 +36,7 @@ test("does not display the scratch template", async () => { children: [ { path: "/starter-templates", - element: , + element: , }, ], }, diff --git a/site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesGalleryPage.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.tsx similarity index 63% rename from site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesGalleryPage.tsx rename to site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.tsx index 5f4c42d700a20..695dd3bfdfc75 100644 --- a/site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesGalleryPage.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.tsx @@ -1,16 +1,13 @@ import { templateExamples } from "api/queries/templates"; import type { TemplateExample } from "api/typesGenerated"; -import { useDashboard } from "modules/dashboard/useDashboard"; import type { FC } from "react"; import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { pageTitle } from "utils/page"; import { getTemplatesByTag } from "utils/starterTemplates"; -import { CreateTemplatesPageView } from "./CreateTemplatesPageView"; -import { StarterTemplatesPageView } from "./StarterTemplatesPageView"; +import { CreateTemplateGalleryPageView } from "./CreateTemplateGalleryPageView"; const CreateTemplatesGalleryPage: FC = () => { - const { showOrganizations } = useDashboard(); const templateExamplesQuery = useQuery(templateExamples()); const starterTemplatesByTag = templateExamplesQuery.data ? // Currently, the scratch template should not be displayed on the starter templates page. @@ -22,17 +19,10 @@ const CreateTemplatesGalleryPage: FC = () => { {pageTitle("Create a Template")} - {showOrganizations ? ( - - ) : ( - - )} + ); }; diff --git a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.stories.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx similarity index 69% rename from site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.stories.tsx rename to site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx index 6f8dca2596ad8..4db1d58e8e20e 100644 --- a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.stories.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx @@ -6,16 +6,16 @@ import { mockApiError, } from "testHelpers/entities"; import { getTemplatesByTag } from "utils/starterTemplates"; -import { StarterTemplatesPageView } from "./StarterTemplatesPageView"; +import { CreateTemplateGalleryPageView } from "./CreateTemplateGalleryPageView"; -const meta: Meta = { - title: "pages/StarterTemplatesPage", +const meta: Meta = { + title: "pages/CreateTemplateGalleryPage", parameters: { chromatic }, - component: StarterTemplatesPageView, + component: CreateTemplateGalleryPageView, }; export default meta; -type Story = StoryObj; +type Story = StoryObj; export const Example: Story = { args: { diff --git a/site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesPageView.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.tsx similarity index 95% rename from site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesPageView.tsx rename to site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.tsx index 644a2cd80bb35..d34054e9be764 100644 --- a/site/src/pages/CreateTemplatesGalleryPage/CreateTemplatesPageView.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.tsx @@ -13,15 +13,14 @@ import { Link as RouterLink } from "react-router-dom"; import type { StarterTemplatesByTag } from "utils/starterTemplates"; import { StarterTemplates } from "./StarterTemplates"; -export interface CreateTemplatePageViewProps { +export interface CreateTemplateGalleryPageViewProps { starterTemplatesByTag?: StarterTemplatesByTag; error?: unknown; } -export const CreateTemplatesPageView: FC = ({ - starterTemplatesByTag, - error, -}) => { +export const CreateTemplateGalleryPageView: FC< + CreateTemplateGalleryPageViewProps +> = ({ starterTemplatesByTag, error }) => { return ( diff --git a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplates.tsx b/site/src/pages/CreateTemplateGalleryPage/StarterTemplates.tsx similarity index 100% rename from site/src/pages/CreateTemplatesGalleryPage/StarterTemplates.tsx rename to site/src/pages/CreateTemplateGalleryPage/StarterTemplates.tsx diff --git a/site/src/pages/CreateTemplatePage/VariableInput.tsx b/site/src/pages/CreateTemplatePage/VariableInput.tsx index 52e991f79fd4e..f2038957df58d 100644 --- a/site/src/pages/CreateTemplatePage/VariableInput.tsx +++ b/site/src/pages/CreateTemplatePage/VariableInput.tsx @@ -95,7 +95,7 @@ const VariableField: FC = ({ placeholder={variable.sensitive ? "" : variable.default_value} required={variable.required} defaultValue={ - variable.sensitive ? "" : defaultValue ?? variable.default_value + variable.sensitive ? "" : (defaultValue ?? variable.default_value) } onChange={(event) => { onChange(event.target.value); diff --git a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.tsx b/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.tsx deleted file mode 100644 index 40dcb599e1bd0..0000000000000 --- a/site/src/pages/CreateTemplatesGalleryPage/StarterTemplatesPageView.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { Loader } from "components/Loader/Loader"; -import { Margins } from "components/Margins/Margins"; -import { - PageHeader, - PageHeaderSubtitle, - PageHeaderTitle, -} from "components/PageHeader/PageHeader"; -import type { FC } from "react"; -import type { StarterTemplatesByTag } from "utils/starterTemplates"; -import { StarterTemplates } from "./StarterTemplates"; - -export interface StarterTemplatesPageViewProps { - starterTemplatesByTag?: StarterTemplatesByTag; - error?: unknown; -} - -export const StarterTemplatesPageView: FC = ({ - starterTemplatesByTag, - error, -}) => { - return ( - - - Starter Templates - - Import a built-in template to start developing in the cloud - - - - {Boolean(error) && } - - {Boolean(!starterTemplatesByTag) && } - - - - ); -}; diff --git a/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx b/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx index 575e219cd1e59..439eca0286cb6 100644 --- a/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx +++ b/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx @@ -75,7 +75,7 @@ export const GeneralSettingsPageView: FC = ({ It is recommended that you remove these experiments from your configuration as they have no effect. See{" "} diff --git a/site/src/pages/DeploySettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/DeploySettingsPage/NotificationsPage/NotificationsPage.tsx index c073792248072..511959d3ec55f 100644 --- a/site/src/pages/DeploySettingsPage/NotificationsPage/NotificationsPage.tsx +++ b/site/src/pages/DeploySettingsPage/NotificationsPage/NotificationsPage.tsx @@ -43,6 +43,7 @@ export const NotificationsPage: FC = () => { title="Notifications" description="Control delivery methods for notifications on this deployment." layout="fluid" + featureStage={"beta"} > diff --git a/site/src/pages/DeploySettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploySettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 35b0f22d496fd..ece25f476a721 100644 --- a/site/src/pages/DeploySettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploySettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -35,7 +35,7 @@ export const ObservabilitySettingsPageView: FC< title="Audit Logging" secondary description="Allow auditors to monitor user operations in your deployment." - docsHref={docs("/admin/security/audit-logs")} + docsHref={docs("/admin/audit-logs")} /> diff --git a/site/src/pages/DeploySettingsPage/Sidebar.tsx b/site/src/pages/DeploySettingsPage/Sidebar.tsx index 607920d65ee2f..1f1172834a5fa 100644 --- a/site/src/pages/DeploySettingsPage/Sidebar.tsx +++ b/site/src/pages/DeploySettingsPage/Sidebar.tsx @@ -7,6 +7,7 @@ import NotificationsIcon from "@mui/icons-material/NotificationsNoneOutlined"; import Globe from "@mui/icons-material/PublicOutlined"; import ApprovalIcon from "@mui/icons-material/VerifiedUserOutlined"; import VpnKeyOutlined from "@mui/icons-material/VpnKeyOutlined"; +import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { GitIcon } from "components/Icons/GitIcon"; import { Sidebar as BaseSidebar, @@ -51,11 +52,9 @@ export const Sidebar: FC = () => { Observability - {experiments.includes("notifications") && ( - - Notifications - - )} + + Notifications + ); }; diff --git a/site/src/pages/DeploySettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx b/site/src/pages/DeploySettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx index 8d6ce0371e9b0..095b5dd44e983 100644 --- a/site/src/pages/DeploySettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx +++ b/site/src/pages/DeploySettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx @@ -33,7 +33,7 @@ export const UserAuthSettingsPageView = ({ title="Login with OpenID Connect" secondary description="Set up authentication to login with OpenID Connect." - docsHref={docs("/admin/users/oidc-auth")} + docsHref={docs("/admin/auth#openid-connect-with-google")} /> {oidcEnabled ? : } @@ -52,7 +52,7 @@ export const UserAuthSettingsPageView = ({ title="Login with GitHub" secondary description="Set up authentication to login with GitHub." - docsHref={docs("/admin/external-auth#github")} + docsHref={docs("/admin/auth#github")} /> diff --git a/site/src/pages/GroupsPage/GroupsPageView.tsx b/site/src/pages/GroupsPage/GroupsPageView.tsx index 2c2131e99758e..093ea25fec605 100644 --- a/site/src/pages/GroupsPage/GroupsPageView.tsx +++ b/site/src/pages/GroupsPage/GroupsPageView.tsx @@ -48,7 +48,7 @@ export const GroupsPageView: FC = ({ diff --git a/site/src/pages/ManagementSettingsPage/CreateOrganizationPageView.tsx b/site/src/pages/ManagementSettingsPage/CreateOrganizationPageView.tsx index a73c2628cfbc1..7f4e41121d568 100644 --- a/site/src/pages/ManagementSettingsPage/CreateOrganizationPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/CreateOrganizationPageView.tsx @@ -69,7 +69,7 @@ export const CreateOrganizationPageView: FC<
{Boolean(error) && !isApiValidationError(error) && ( @@ -92,7 +92,7 @@ export const CreateOrganizationPageView: FC< @@ -104,7 +104,7 @@ export const CreateOrganizationPageView: FC< diff --git a/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPage.tsx b/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPage.tsx index c103c6b95e1c5..cc47c85133e22 100644 --- a/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPage.tsx +++ b/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPage.tsx @@ -87,7 +87,9 @@ export const CustomRolesPage: FC = () => { onCancel={() => setRoleToDelete(undefined)} onConfirm={async () => { try { - await deleteRoleMutation.mutateAsync(roleToDelete!.name); + if (roleToDelete) { + await deleteRoleMutation.mutateAsync(roleToDelete.name); + } setRoleToDelete(undefined); await organizationRolesQuery.refetch(); displaySuccess("Custom role deleted successfully!"); diff --git a/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPageView.tsx b/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPageView.tsx index c241f5b25a11a..fb642c2225c8d 100644 --- a/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/CustomRolesPage/CustomRolesPageView.tsx @@ -52,7 +52,7 @@ export const CustomRolesPageView: FC = ({ )} = ({ diff --git a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncHelpTooltip.tsx b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncHelpTooltip.tsx index 2951a3d25fa35..37ab1d9f317d9 100644 --- a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncHelpTooltip.tsx +++ b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncHelpTooltip.tsx @@ -22,7 +22,7 @@ export const IdpSyncHelpTooltip: FC = () => { Configure IdP Sync diff --git a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPage.tsx b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPage.tsx index ae8280e207a35..487ef57c416b0 100644 --- a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPage.tsx +++ b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPage.tsx @@ -74,7 +74,7 @@ export const IdpSyncPage: FC = () => {